右对齐水平LinearLayout中的按钮

119 android android-layout

如果你看一下附图.我需要我的按钮才能正确对齐,但由于某种原因,它不适用于'gravity:right'...

取消添加

这是我的布局代码:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="35dp">

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"
        android:layout_marginTop="9dp" />

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

为什么不工作?!

Dip*_*iya 129

使用以下代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="35dp"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="9dp"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="15dp"
        android:background="@drawable/stitch_button"
        android:text="@string/add" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

  • ru使用relativelayout而不是linearlayout? (17认同)
  • 在这种情况下,似乎属性'layout_alignParentRight'不适用于按钮?可能已弃用? (3认同)
  • 我仍然惊讶于如何使用线性布局变得如此困难. (2认同)
  • @DipakKeshariya 对于未来的观众,您可以使用“android:layout_gravity="top|right" linearlayout (2认同)

TWi*_*Rob 126

单一LinearLayout解决方案 只添加一个简单的间距视图:(
没有人似乎提到过这个,只有更复杂的多布局解决方案.)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="35dp">

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"
        android:layout_marginTop="9dp" />

    <!-------------------------  ADDED SPACER VIEW -------------------->
    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <!------------------------- /ADDED SPACER VIEW -------------------->

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

注意"突出显示"的视图,我没有修改任何其他内容.高度= 0确保它不可见.宽度= 0是因为宽度由LinearLayout基于权重= 1确定.这意味着间隔视图将尽可能地沿着方向(方向)伸展LinearLayout.

请注意,如果您的API级别和/或依赖项允许,您应该使用android.widget.Spaceandroid.support.v4.widget.Space代替View.Space以更便宜的方式完成工作,因为它只是衡量而不是试图画出类似的东西View; 传达意图也更具表现力.

  • 只需将android:layout_weight =“ 1”添加到R.id.lblExpenseCancel即可。 (2认同)
  • 我想知道为什么这个答案被否决了,它有效而且很好,我肯定会尝试。 (2认同)

小智 26

我知道这个问题是在前一段时间被问过的,但我之前已经完成了这项工作,它可以在对齐项目时提供更多控制.如果你像网页编程那样看待它,它会有所帮助.你只需嵌套另一个LinearLayout包含你的按钮的东西.然后,您可以更改按钮布局的重力,并使其在TextView仍然在左侧时向右移动.

试试这段代码:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"             
android:orientation="horizontal" 
android:layout_marginTop="35dp">

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/cancel" 
    android:textColor="#404040"         
    android:layout_marginLeft="10dp" 
    android:textSize="20sp" 
    android:layout_marginTop="9dp"/>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"                    
        android:text="@string/add" 
        android:layout_gravity="right" 
        android:layout_marginRight="15dp"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

您可能必须使用嵌套布局上的填充,以便它按您希望的方式运行.

  • 您应该使用FrameLayout作为嵌套布局.定位一个单一元素就是它的用途.而且,给它一个重量,使它填充父母的正确部分.不管怎么说,不使用相对布局+1. (2认同)

nic*_*ich 19

案例的真正解决方案:

android:layout_weight="1" 对于TextView,您的按钮向右移动!


Nag*_*ddy 10

试试这个

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_gravity="right" 
    android:layout_height="wrap_content"             
    android:orientation="horizontal"  >

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
   android:layout_height="wrap_content"   
   android:orientation="horizontal" >

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="9dp"
    android:text="cancel"
    android:textColor="#ffff0000"
    android:textSize="20sp" />

<Button
    android:id="@+id/btnAddExpense"
    android:layout_width="wrap_content"
    android:layout_height="45dp"
    android:layout_alignParentRight="true"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="15dp"
     android:textColor="#ff0000ff"
    android:text="add" />

 </RelativeLayout>
  </LinearLayout>
Run Code Online (Sandbox Code Playgroud)


小智 9

如前所述:从LinearLayout切换到RelativeLayout工作,但您也可以解决问题而不是避免它.使用LinearLayout提供的工具:给TextView一个权重= 1(见下面的代码),按钮的权重应保持为0或无.在这种情况下,TextView将占用所有剩余空间,这些空间不用于显示TextView或ButtonView的内容,而是将按钮向右推.

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="35dp">

        <TextView
            android:id="@+id/lblExpenseCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cancel"
            android:textColor="#404040"
            android:layout_marginLeft="10dp"
            android:textSize="20sp"
            android:layout_marginTop="9dp"

            **android:layout_weight="1"**

            />

        <Button
            android:id="@+id/btnAddExpense"
            android:layout_width="wrap_content"
            android:layout_height="45dp"
            android:background="@drawable/stitch_button"
            android:layout_marginLeft="10dp"
            android:text="@string/add"
            android:layout_gravity="right"
            android:layout_marginRight="15dp" />

    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案.我只是想写一些类似的东西,直到找到你的帖子. (2认同)

goo*_*odm 5

您需要将重力添加到布局而不是按钮,按钮设置中的重力是按钮内的文本

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_gravity="right" 
android:layout_height="wrap_content"             
android:orientation="horizontal" 
android:layout_marginTop="35dp">
Run Code Online (Sandbox Code Playgroud)

  • 那不就是将TextView对齐了吗?我只需要按钮右对齐...... (2认同)

小智 5

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"             
    android:orientation="horizontal" 
    android:layout_marginTop="35dp">

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:text="@string/cancel" 
        android:textColor="#404040"         
        android:layout_marginLeft="10dp" 
        android:textSize="20sp" 
        android:layout_marginTop="9dp"/>              

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"                    
        android:text="@string/add" 
        android:layout_gravity="right" 
        android:layout_marginRight="15dp"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题


小智 5

只需添加android:gravity="right"这行父布局即可。

<LinearLayout
        android:id="@+id/withdrawbuttonContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:orientation="horizontal"
        **android:gravity="right"**
        android:weightSum="5"
        android:visibility="visible">

        <Button
            android:id="@+id/bt_withDraw"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/BTN_ADD"
            app:delay="1500" />

        <Button
            android:id="@+id/btn_orderdetail_amend"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/BTN_CANCEL"
            app:delay="1500" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)