水平線形レイアウトAndroidでウィジェットを右揃えする方法は?


206

これは私が使用しているコードであり、機能していません:

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

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>

回答:


419

右に表示したい要素の前Viewに、水平の内側に空を追加LinearLayoutしてみてください。例:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />                

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

12
これでうまくいきます!しかし、誰もが理由を説明できますか?完全に理解できませんでした。
GMsoF 2013

29
空のビューは、ボタンのスペースを残して、最大限のスペースを確保しようとしています。
alcsan 2013

14
これまでのところ、左側にいくつかのボタンを配置し、右側に最後のボタンを1つ配置しようとする場合、これが唯一の機能です。しかし、それは私にとってハックのように感じます。これを行う「正しい」方法はありますか?
IcedD​​ante 2014

8
これはすごい!しかし、最初からgravity = "right"がこのように機能しないのはなぜですか?なぜこの別の見方からの助けが必要なのですか?そして、もしそうでなければ、余分な視野なしでどのように「正しい」のでしょうか?
アフリカの2014年

1
これはグリッドのようなレイアウトでは機能しません-空のスペースはありません。Sherif elKhatibのソリューションが機能します。
cdonner 2015年

119

すべてを右にしたくない場合は、LinearLayoutの重力を「右」に変更しないでください。

試してください:

  1. TextViewのfill_parent
  2. TextViewの重力right

コード:

    <TextView 
              android:text="TextView" 
              android:id="@+id/textView1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"   
              android:gravity="right">
    </TextView>

1
このおかげで-私を追い払っていたのはfill_parentの幅だった
dldnh 2013

2
線形レイアウトはこれを達成するように設計されていますか?これを達成するために相対レイアウトを使用するだけではいけませんか?このソリューションはハックではありませんか?
user2635088

LinearLayoutに複数のTextViewコントロールがある場合、これは機能しません。@alcsanからの回答を見る
Felix

これは受け入れられる答えになるはずです。このアプローチは、追加のビューを使用せず、さらに重要なことに、パフォーマンスの大幅な低下を示すlayout_weightを使用しません。
Sermilion 2017年

android:layout_weight = "1"と並べandroid:gravity="right"て、トリックを行う必要があります。
Vassilis

63

alcsanの答えの補足として、SpaceAPI 14(Android 4.0 ICE_CREAM_SANDWICH)以降のドキュメントを使用できます。

スペースは、汎用レイアウトのコンポーネント間にギャップを作成するために使用できる軽量のビューサブクラスです。

<?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="match_parent" 
    android:orientation="horizontal" >

    <Space
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="TextView"
        android:gravity="right" />

</LinearLayout>

14未満のAPIレベルをサポートするアプリには、android.support.v4.widget.SpaceAndroidサポートライブラリr22.1.0以降があります。


重要なのは、layout_weight = "1"を設定する必要があることです
code4j

完璧に動作します!各要素の幅を保持します。
ファットマン

これは機能します。うわー、Androidの醜さは私を驚かせ続けることは決してありません
Chris Neve

31

リニアレイアウト

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar"
        android:gravity="right" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/my_booking_icon" />
    </LinearLayout>

ここに画像の説明を入力してください

frameLayout

<FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:src="@drawable/my_booking_icon" />
    </FrameLayout>

RelativeLayout

<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:src="@drawable/my_booking_icon" />
    </RelativeLayout>

21

ビューを設定するlayout_weight="1"とうまくいきます。

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

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

<RadioButton
    android:id="@+id/radioButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>


2
このようなシンプルなソリューション+1
Alex

1
誰かがまだ探している場合、これは正しい解決策です:)
passatgt

これは魔法です!どのようにしてそれを見つけましたか?
andreikashin

@andreikashin、それが役に立った場合は賛成投票を検討してください。ありがとう。
Saad Mahmud

13

android:gravity="right"LinearLayoutに追加します。TextView持っていると仮定layout_width="wrap_content"


2
彼は特に、LinearLayout内に単一のコンポーネントを配置すると述べました。線形レイアウト自体ではありません。レイアウト自体はfill_parentに設定されています。
RichieHH 2014


4

私は最も簡単な方法でそれを行いました:

ただ1つのRelativeLayoutを取り出し、その中に ビューを配置します。これを右側に配置します。

    <LinearLayout
        android:id="@+id/llMain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f5f4f4"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingBottom="20dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="20dp">

        <ImageView
            android:id="@+id/ivOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />


        <TextView
            android:id="@+id/txtOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="Hiren"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="@android:color/black" />

        <RelativeLayout
            android:id="@+id/rlRight"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right">


            <ImageView
                android:id="@+id/ivRight"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/ic_launcher" />

        </RelativeLayout>
    </LinearLayout>

それがあなたを助けることを願っています。


3

RelativeLayoutを使用して、見栄えがするまでドラッグするだけです:)

    <ImageView
        android:id="@+id/button_info"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:contentDescription="@string/pizza"
        android:src="@drawable/header_info_button" />

</RelativeLayout>

2
「それらをドラッグ」はマルチ解像度画面にはお勧めしません
Moses Aprico

3

linear layoutwith layout_width="fill_parent"と同じlayout width+ のウィジェットもgravity as right右に揃えます。

TextView次の例でtopicTitleは、左側とtopicQuestions右側で2 秒を使用しています。

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:orientation="horizontal">

    <TextView
        android:id="@+id/topicTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/topicQuestions"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textSize="18sp"
        android:textStyle="bold" />
    </LinearLayout>

</RelativeLayout>

出力


2

テキストをlayout_width内に配置するandroid:layout_width="match_parent"ため、layout_widthをに変更してみてください。gravity:"right"コンテンツの折り返しを選択した場合、そこに移動する場所がありませんが、親の一致を選択した場合、右に移動できます。


2

追加のビューや要素を使用する必要はありません:

//それはとても簡単でシンプルです

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
>

//これは左揃えです

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="No. of Travellers"
      android:textColor="#000000"
      android:layout_weight="1"
      android:textStyle="bold"
      android:textAlignment="textStart"
      android:gravity="start" />

//これは正しい配置です

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Done"
      android:textStyle="bold"
      android:textColor="@color/colorPrimary"
      android:layout_weight="1"
      android:textAlignment="textEnd"
      android:gravity="end" />

</LinearLayout>

0

TextViewの場合:

<TextView 
    android:text="TextView" 
    android:id="@+id/textView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"   
    android:gravity="right"
    android:textAlignment="gravity">    
</TextView>

0

ビューの追加は少し難しく、次のようにすべての画面幅をカバーします。

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_weight="1" />                

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

このコードを試してください:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Create Account"/>

</LinearLayout>

-1

こちらがサンプルです。手配のポイントは以下の通り

android:layout_width="0dp"
android:layout_weight="1"

完全なコード

<?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:padding="5dp">

    <TextView
        android:id="@+id/categoryName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="abcd" />

    <TextView
        android:id="@+id/spareName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="efgh" />

</LinearLayout>

ここに画像の説明を入力してください


-1

次のように、match_parentと重力を使用して、TextViewテキストを右に設定します。

<?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="match_parent"
    android:orientation="horizontal">

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>

-2

これを試して..

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



    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>

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