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

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>
alcsan
sumber
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>
Sherif elKhatib
sumber
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.

Akhir pekan
sumber
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>
DeltaCap019
sumber
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"/>

Saad Mahmud
sumber
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"

Ronnie
sumber
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
8

cukup tambahkan android:gravity="right"di Liner Layout Anda.

Idrees Ashraf
sumber
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.

Hiren Patel
sumber
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>
detman
sumber
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

prayagupd
sumber
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.

mrvinent
sumber
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>
kamaljeet Singh
sumber
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>
Роман Елизаров
sumber
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>
Zafar Iqbal
sumber
-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

Rohit Mandiwal
sumber
-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>
Guillermo Gonzalez
sumber
-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>
Shubham
sumber