水平LinearLayoutの右揃えボタン


130

添付画像を見れば。ボタンを右揃えにする必要がありますが、何らかの理由で「重力:右」では機能しません...

追加をキャンセル

これがそのレイアウトの私のコードです。

<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>

なぜ機能しないのですか?


6
この場合は、相対レイアウトを試してください。LLは
機能しません

4
LinearLayoutを使用する場合は、2つの内部線形レイアウトを使用し、layout_weightをlayout_gravityとともに使用します。正常に動作します。
Vamsi Challa 14

@VamsiChalla 1つで可能です。以下の新しい回答を確認してください。
TWiStErRob 2015年

回答:


137

そのために以下のコードを使用してください

<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>

3
この場合、ボタンには「layout_alignParentRight」属性を使用できないようですか?おそらく非推奨ですか?

20
ruはlinearlayoutの代わりにrelativelayoutを使用していますか?
Dipak Keshariya、2012年

1
ああがらくた..申し訳ありませんが、私は完全にそれを見渡しました。ありがとう!

4
それでも、とても簡単に見えるものが、linearlayoutを使用しようとすると非常に難しくなることに、私はまだ驚きます。
AlvaroSantisteban 2014年

2
@DipakKeshariyaを将来の視聴者に提供するには、「android:layout_gravity = "top | right" linearlayout
SupimpaAllTheWay

145

単一の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>

「強調表示された」ビューに注意してください。他には何も変更していません。Height = 0は、表示されないようにします。Width = 0は、width LinearLayout= 1に基づいて幅が決定されるためです。これは、スペーサービューがの方向(方向)に可能な限り伸びることを意味しLinearLayoutます。

APIレベルや依存関係で許可されている場合は、代わりにまたはを使用する必要がandroid.widget.Spaceandroid.support.v4.widget.SpaceViewあることに注意してくださいSpaceそれは測定するだけであり、何かを描画しようとしないので、より安価な方法で仕事を達成Viewします。また、意図を伝える表現力も高まります。


2
android:layout_weight = "1"をR.id.lblExpenseCancelに追加するだけです。
hrules6872

1
@h_rulesは、ハッキングする場合に機能しますが、TextViewに背景を追加するとどうなるかを想像してください。
TWiStErRob

2
なぜこの回答は反対票を投じたのでしょうか。それは機能し、すばらしいので、間違いなく試してみるつもりです。
Elvedin Hamzagic 2015年

それはモバイル開発者として完璧です
Shivanand Darur '28 / 07/28

スペーサーを追加すると、画面サイズが異なると結果も異なります。したがって、これは理想的なソリューションではありません。
GeoMint 2016


28

私はこの質問が少し前に尋ねられたことを知っていますが、以前にこれを行ったことがあり、アイテムを揃えるときにより詳細に制御できます。Webプログラミングのように見ると、役立ちます。あなたはその中に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>

ネストされたレイアウトのパディングを操作して、希望どおりに動作するようにする必要がある場合があります。


2
ネストされたレイアウトにはFrameLayoutを使用する必要があります。1つの要素を配置することが目的です。また、重みを付けて、親の右側の部分が満たされるようにします。相対レイアウトを使用しない場合は+1。
Hjalmar

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>

9

前に数回言及したように:LinearLayoutからRelativeLayoutに切り替えることは機能しますが、それを回避する代わりに問題を解決することもできます。LinearLayoutが提供するツールを使用します。TextViewにweight = 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>

2
これが最良の答えです。私はあなたの投稿が見つかるまで似たようなものを書きたかっただけです。
codedave 2017

それはずっといいに切り替えるよりもあるRelativeLayoutことから、メモリの問題に起因するRelativeLayoutよりも消費の方法より多くのメモリLinearLayout
ThunderWiring

7

ボタンではなくレイアウトに重力を追加する必要があります。ボタン設定の重力はボタン内のテキスト用です

<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">

2
その後、TextViewも正しく整列しませんか?ボタンを右揃えにするだけです...

1
ボタンのみを配置する必要がある場合は、RelativeLayoutを使用します。
goodm

1
すべてのボタンを揃えたい場合でも、これは機能しません(API 16)。子供のビューはまだ左側に配置されています。
m0skit0

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>

これはあなたの問題を解決します


3

RelativeLayoutを使用したくない、または使用できない場合は、ボタンの向きを「vertical」、幅を「fill_parent」に設定した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" />

  <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
     <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>
</LinearLayout> 

これは、LinearLayoutの方向が水平の場合、重力は垂直方向のビューにのみ影響するためです。また、方向が「垂直」の場合、重力はビューに水平方向にのみ影響します。参照してくださいここのLinearLayoutオリエンテーション/重力説明の詳細については。


2

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>

0

私は4 TextView秒で同様のレイアウトを使用しました。2つTextViewのは左に揃え、2つTextViewのは右に揃えます。だから、あなたがLinearLayouts一人で使いたいなら、これが私の解決策です。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:baselineAligned="false"
    android:padding="10dp" >

    <LinearLayout
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="match_parent"
        android:gravity="left"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/level"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_level_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="match_parent"
        android:gravity="right"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/time"
            android:textAppearance="?android:attr/textAppearanceMedium"
             />

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_time_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium" 
            />
    </LinearLayout>

</LinearLayout>

0

ボタンの親レイアウトでRelativeLayoutを使用するか、gravity = "right"を設定できます。


0

私はこれが古いことを知っていますが、ここに線形レイアウトの別のものがあります:

<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="center_vertical|bottom|right|top"
    android:layout_marginRight="15dp" />

重力だけではなく、layout_gravityに注意してください。


どうしたのcenter_vertical|bottom|top?それらは私には排他的な整列重力のように見えます。
TWiStErRob 2016

0

メインレイアウトとして、LinearlayoutではなくRelativelayoutを使用する必要があります。Relativelayoutをメインとして使用する場合、相対レイアウトによってalignParentを右、左、上、下に配置できるため、右側のボタンを簡単に処理できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.