Androidレイアウトでテキストビューを左端と右端に揃える


158

Androidを使い始めました。シンプルなレイアウトがうまくいきません。

を使用しLinearLayoutTextViews、1つの行に2つ配置します。1つTextViewは左側にあり、もう1つは右側にあります(CSSのfloat:left、float:rightに類似)。

それは可能ですか、それともViewGroupそれを達成するために別のまたはさらに別のレイアウトネストを使用する必要がありますか?

ここに私がこれまで持っているものがあります:

<?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:padding="10sp">
<TextView android:id="@+id/mytextview1" android:layout_height="wrap_content" android:text="somestringontheleftSomestring" android:layout_width="wrap_content"/>
<TextView android:id="@+id/mytextview2" android:layout_height="wrap_content" android:ellipsize="end"
    android:text="somestringontheright" android:layout_width="wrap_content"/>
</LinearLayout>

回答:


290

使用RelativeLayoutしてlayout_alignParentLeftlayout_alignParentRight

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:padding="10dp">

    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true" 
        android:id="@+id/mytextview1"/>

    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:id="@+id/mytextview2"/>

</RelativeLayout>

また、おそらくレイアウトではなくdip(またはdp)を使用する必要spがありますspテキスト設定と画面密度を反映するため、通常はテキスト項目のサイズ変更のみを目的としています。


57
コンテンツが重複しないようにするには、最初のテキストビューに「android:layout_toLeftOf = "@ + id / mytextview2"」を追加することもできます
Rollin_s

動的テーブルの場合、次のことができます。TableRow.LayoutParams col1Params = new TableRow.LayoutParams(); //行のコンテンツをラップしますcol1Params.height = LayoutParams.WRAP_CONTENT; col1Params.width = LayoutParams.WRAP_CONTENT; //重力を設定して、列の重力を中央に配置しますcol1Params.gravity = Gravity.LEFT;
siddhusingh 2014

3
さまざまなデバイス画面の互換性とサポートを向上させるには、「android:layout_alignParentEnd = "true"」(layout_alignParentRightを使用する場合)と「android:layout_alignParentStart = "true"」(layout_alignParentLeftを使用する場合)を使用します。
ivanleoncz 2016年

@Rollin_s、愛しています。
ベガス

89

重力プロパティを使用して、ビューを「フローティング」できます。

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

    <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_vertical|center_horizontal"
            android:orientation="horizontal">

        <TextView  
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:gravity="left"
            android:layout_weight="1"
            android:text="Left Aligned"
            />

        <TextView  
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:gravity="right"
            android:layout_weight="1"
            android:text="Right Aligned"
            />
    </LinearLayout>

</LinearLayout>

1
残念ながら、これによって両方のアイテムが同じ行に配置されることはないようです
Webnet

1
重力は「テキストの配置」にのみ影響しませんか?
Joshua Pinter 2013年

3
すみません、その働き。android:layout_weight = "1"を追加するのを忘れていました。それを追加した後、その罰金。
Abdullah Umer 2014年

13

これは、LinearLayout(相対レイアウトオプションよりオーバーヘッドが少なく、より制御しやすい)で行うことができます。2番目のビューに残りのスペースを与えて、gravity作業できるようにします。API 16にテストして戻りました。

証明

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Aligned left" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="end"
        android:text="Aligned right" />
</LinearLayout> 

最初のテキストビューのサイズを制限する場合は、次のようにします。

必要に応じてウェイトを調整します。相対レイアウトでは、このようなパーセンテージウェイトを設定することはできません。ビューの1つの固定dpのみです。

証明2

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

    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="Aligned left but too long and would squash the other view" />

    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:gravity="end"
        android:text="Aligned right" />
</LinearLayout>

8

Rollin_sの助言があったとしても、Dave Webbの答えはうまくいきませんでした。右側のテキストTextViewはまだ左側のテキストと重なっていますTextView

私は最終的に次のようなもので私が望む行動を得ました:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout01" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:padding="10dp">

<TextView 
    android:id="@+id/mytextview1"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" />

<TextView 
    android:id="@+id/mytextview2"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@id/mytextview1"
    android:gravity="right"/>

</RelativeLayout>

mytextview2がに"android:layout_width"設定されていることに注意してください"match_parent"

これが誰かを助けることを願っています!


4

<TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Hello world" />

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

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Gud bye" />


1

左と右の要素でコンテンツをラップしたいが中央のスペースがある場合

<LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    <Space
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
</LinearLayout>

0

これを実現する方法は他にもたくさんあります。私はこのようなことをします。

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

    <TextView
        android:id="@+id/textRight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginTop="30dp"
        android:text="YOUR TEXT ON THE RIGHT"
        android:textSize="16sp"
        android:textStyle="italic" />


    <TextView
        android:id="@+id/textLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="30dp"
        android:text="YOUR TEXT ON THE LEFT"
        android:textSize="16sp" />
</RelativeLayout>

0

デイブ・ウェッブの答えは私にとってうまくいきました。ありがとう!ここに私のコード、これが誰かを助けることを願っています!

<RelativeLayout
    android:background="#FFFFFF"
    android:layout_width="match_parent"
    android:minHeight="30dp"
    android:layout_height="wrap_content">
    <TextView
        android:height="25dp"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dp"
        android:text="ABA Type"
        android:padding="3dip"
        android:layout_gravity="center_vertical"
        android:gravity="left|center_vertical"
        android:layout_height="match_parent" />
    <TextView
        android:background="@color/blue"
        android:minWidth="30px"
        android:minHeight="30px"
        android:layout_column="1"
        android:id="@+id/txtABAType"
        android:singleLine="false"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="20dp"
        android:layout_width="wrap_content" />
</RelativeLayout>

画像: 画像


0

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

このコードは、コントロールを2つの等しい側に分割します。

    <LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/linearLayout">
    <TextView
        android:text = "Left Side"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight = "1"
        android:id = "@+id/txtLeft"/>

    <TextView android:text = "Right Side"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight = "1"
        android:id = "@+id/txtRight"/>
    </LinearLayout>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.