【问题标题】:Android - Place oposite views in a LayoutAndroid - 在布局中放置相反的视图
【发布时间】:2014-06-13 13:13:31
【问题描述】:

我有一个Horizontal Layout,里面有一些观点。我想要一些从左边开始,另一些从右边开始,但我做不到。我尝试了几种Gravity 配置,但它们什么也没做。

我就是这样:

我希望旗帜在右边,时间在左边,如箭头所示。稍后我会添加更多标志。

谁能帮我解决这个问题?谢谢:D

编辑:

到目前为止的XML:

<LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:id="@+id/hlTopBar"
        android:background="#e6262626"
        android:gravity="center_vertical">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/default_time_date_string"
            android:id="@+id/tvTime"
            android:textStyle="bold"
            android:paddingLeft="10dp"
            android:gravity="left" />

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ibUSA"
            android:src="@drawable/united_states_flag"
            android:background="@android:color/transparent"
            android:adjustViewBounds="true" />
    </LinearLayout>

【问题讨论】:

  • 发布您的 xml,然后我们可以建议您更好。我认为你需要使用相对布局。

标签: android user-interface layout-gravity


【解决方案1】:

android:layout_gravity 的工作方向与 LinearLayout 的方向相反——vertical LinearLayout 的子级可以使用 android:layout_gravity 来控制它们的定位 horizontally (left or right),但不能垂直。同样horizontal LinearLayout 的孩子可以使用 android:layout_gravity 来控制他们的定位 vertically (top or bottom) 但不能水平。当您使用Horizontal LinearLayout 时,您可以使用android:layout_gravity 定位孩子top or bottom。出于您的目的,最好使用RelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
<TextView
        .........
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        />

    <ImageView
        .......
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        />

</RelativeLayout>

【讨论】:

    【解决方案2】:

    不要使用水平布局,而是使用相对布局

    示例:

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Time" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:text="Image" />
    
    </RelativeLayout>
    

    结果:

    【讨论】:

    • 有趣,我会做的……但无论如何要用线性来完成它?就像一个好奇心
    • @mFeinstein 但你说你要添加更多标志。如果是,那么它在线性中是不可能的
    • 我想我可以将文本的重力设置在左侧,将所有标志的重力设置在右侧,所以它们都会向右移动,而中间为空......但我无法得到完成了
    • @mFeinstein 是的,你可以这样做,但下一个问题是添加一个新标志。
    • 但是它们不应该都按顺序向右吗?哦,我猜他们会在每一个的顶部,对吧?
    【解决方案3】:

    RelativeLayout 是一个很好的答案。然而,如果你真的想用 LinearLayout 来做,试着在中间放一个空的 TextView,width=0 和 weight=1。

    这个空视图将自动尝试填充,但其他视图没有占用太多空间。

    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:id="@+id/hlTopBar"
            android:background="#e6262626"
            android:gravity="center_vertical">
    
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/default_time_date_string"
                android:id="@+id/tvTime"
                android:textStyle="bold"
                android:paddingLeft="10dp" />
    
            <TextView
                android:id="@+id/spacer"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />
    
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/ibUSA"
                android:src="@drawable/united_states_flag"
                android:background="@android:color/transparent"
                android:adjustViewBounds="true" />
        </LinearLayout>
    

    【讨论】:

    • 谢谢你的技巧,我使用的是相对布局,但学习新东西总是很好
    猜你喜欢
    • 1970-01-01
    • 2013-09-01
    • 2016-11-05
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多