Как правильно выровнять виджет в горизонтальном линейном макете Android? - PullRequest
179 голосов
/ 09 августа 2011

Это код, который я использую, и он не работает:

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

Ответы [ 17 ]

380 голосов
/ 04 февраля 2013

Попробуйте добавить пустой 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>
107 голосов
/ 09 августа 2011

Не меняйте гравитацию LinearLayout на «вправо», если вы не хотите, чтобы все было вправо.

Попробуйте:

  1. Измените TextView's ширина до fill_parent
  2. Измените TextView's Гравитация на right

Код:

    <TextView 
              android:text="TextView" 
              android:id="@+id/textView1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"   
              android:gravity="right">
    </TextView>
50 голосов
/ 07 сентября 2015

В качестве дополнения к ответу alcsan, вы можете использовать Space начиная с API 14 (Android 4.0 ICE_CREAM_SANDWICH), документ здесь .

Пробел - это легкий подкласс View, который может использоваться для создания промежутков между компонентами в макетах общего назначения.

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

Для приложений, поддерживающих уровни API ниже 14, существует android.support.v4.widget.Space, начиная с библиотеки поддержки Android r22.1.0.

27 голосов
/ 23 октября 2013

С Линейный макет

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

enter image description here

с 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 голосов
/ 23 марта 2015

установка вида 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"/>

13 голосов
/ 09 августа 2011

Добавьте android:gravity="right" к LinearLayout.Предполагая, что TextView имеет layout_width="wrap_content"

7 голосов
/ 11 апреля 2017

просто добавьте android:gravity="right" в свой макет лайнера.

3 голосов
/ 16 октября 2012

Вы должны использовать 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>
3 голосов
/ 02 января 2017

linear layout с layout_width="fill_parent", а также виджет с таким же layout width + gravity as right будет выравнивать его вправо.

Я использую 2 TextView с в следующем примере, topicTitle слева и topicQuestions справа.

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

выход

image

2 голосов
/ 21 мая 2015

Попробуйте изменить layout_width на android:layout_width="match_parent", потому что gravity:"right" выравнивает текст внутри layout_width, и если вы выбираете перенос содержимого, ему некуда деваться, но если вы выберете match parent, он может перейти вправо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...