Bagaimana cara meluruskan widget di tata letak linear horizontal Android?


206

Ini adalah kode yang saya gunakan dan tidak berfungsi:

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

Jawaban:


419

Coba tambahkan kosong Viewdi dalam horisontal LinearLayoutsebelum elemen yang ingin Anda lihat benar, misalnya:

<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
Ini bekerja! Tapi siapa yang bisa menjelaskan mengapa? Saya benar-benar tidak bisa mengerti.
GMsoF

29
Empty View sedang mencoba untuk mengambil jumlah ruang maksimum, menyisakan ruang untuk tombol.
alcsan

14
Sejauh ini ini adalah satu-satunya hal yang berhasil bagi saya dalam mencoba memiliki beberapa tombol di sebelah kiri, dan satu tombol terakhir di sebelah kanan. Tapi rasanya seperti retas bagi saya. Apakah ada cara "benar" untuk melakukan ini?
IcedDante

8
Ini luar biasa! Tetapi mengapa gravitasi = "benar" tidak bekerja seperti ini sejak awal? Mengapa perlu bantuan dari pandangan lain ini? Dan bagaimana itu "benar", jika tidak, tanpa tampilan tambahan?
afrish

1
Ini tidak berfungsi dalam tata letak seperti grid - tidak ada ruang kosong. Solusi Sherif elKhatib bekerja.
cdonner

119

Jangan mengubah gravitasi LinearLayout ke "kanan" jika Anda tidak ingin semuanya menjadi benar.

Mencoba:

  1. Ubah lebar TextView menjadifill_parent
  2. Ubah gravitasi TextView menjadiright

Kode:

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

1
terima kasih untuk ini - itu adalah lebar fill_parent yang melemparkan saya
dldnh

2
Apakah tata letak linear bahkan dirancang untuk mencapai ini? Bukankah seharusnya kita hanya menggunakan tata letak relatif untuk mencapai ini? Apakah solusi ini bukan peretasan?
user2635088

ini tidak akan berfungsi jika Anda memiliki beberapa kontrol TextView di LinearLayout. Lihat jawaban dari @alcsan
Felix

Ini harus menjadi jawaban yang diterima. Pendekatan ini tidak menggunakan tampilan tambahan apa pun, dan yang lebih penting, ini tidak menggunakan layout_weight yang secara signifikan menunjukkan kinerja yang menurun.
Sermilion

android:layout_weight = "1"berdampingan dengan android:gravity="right", harus melakukan trik.
Vassilis

63

Sebagai pelengkap jawaban alcsan, Anda dapat menggunakan Spacesejak API 14 (Android 4.0 ICE_CREAM_SANDWICH), dokumen di sini .

Space adalah subclass View ringan yang dapat digunakan untuk membuat kesenjangan antar komponen dalam tata letak tujuan umum.

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

Untuk aplikasi yang mendukung level API di bawah 14, ada android.support.v4.widget.Spacesejak Android Support Library r22.1.0.


Penting adalah Anda perlu mengatur layout_weight = "1"
code4j

Bekerja dengan sempurna! Mempertahankan lebar setiap elemen.
phatmann

Ini bekerja. Wow, keburukan Android tidak pernah berhenti membuat saya takjub
Chris Neve

31

Dengan Tata Letak Linear

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

masukkan deskripsi gambar di sini

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

dengan 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

pengaturan tampilan layout_weight="1"akan melakukan trik.!

<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
Solusi sederhana +1
Alex

1
Jika seseorang masih mencari, ini adalah solusi yang tepat :)
passatgt

Ini Ajaib! Bagaimana Anda mengetahuinya?
andreikashin

@andreikashin, Pertimbangkan untuk memilih jika itu membantu. Terima kasih.
Saad Mahmud

13

Tambahkan android:gravity="right"ke LinearLayout. Dengan asumsi TextViewmemilikilayout_width="wrap_content"


2
Dia secara khusus mengatakan untuk menyelaraskan satu komponen di dalam LinearLayout. Bukan tata letak linier itu sendiri: tata letak itu sendiri diatur ke fill_parent.
RichieHH


4

Saya telah melakukannya dengan cara termudah:

Ambil satu RelativeLayout dan letakkan pandangan anak Anda di dalamnya, yang ingin Anda tempatkan di sisi kanan .

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

Semoga ini bisa membantu Anda.


3

Anda harus menggunakan RelativeLayout dan seret mereka sampai terlihat bagus :)

    <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
"seret mereka" tidak direkomendasikan untuk layar multi-resolusi
Moses Aprico

3

linear layoutdengan layout_width="fill_parent"dan juga widget dengan layout width+ yang sama gravity as rightakan menyelaraskannya ke kanan.

Saya menggunakan 2 TextViews dalam contoh berikut, topicTitledi sebelah kiri dan topicQuestionsdi sebelah kanan.

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

Keluaran


2

Cobalah untuk mengubah layout_width menjadi android:layout_width="match_parent"karena gravity:"right"menyelaraskan teks di dalam layout_width, dan jika Anda memilih membungkus konten itu tidak memiliki tempat untuk pergi, tetapi jika Anda memilih induk yang cocok itu bisa pergi ke kanan.


2

Tidak perlu menggunakan tampilan atau elemen tambahan:

// itu sangat mudah dan sederhana

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

// ini adalah perataan kiri

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

// ini adalah perataan yang benar

<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

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

Menambahkan tampilan agak sulit dan mencakup semua lebar layar seperti ini:

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

Coba kode ini:

<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

Berikut ini contohnya. kunci untuk mengatur adalah sebagai berikut

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

Kode lengkap

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

masukkan deskripsi gambar di sini


-1

Gunakan match_parent dan gravitasi untuk mengatur teks TextView ke kanan, seperti ini:

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

Coba ini..

<?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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.