Menyelaraskan tampilan teks di tepi kiri dan kanan dalam tata letak Android

158

Saya memulai dengan Android. Saya kesulitan mendapatkan tata letak yang sederhana.

Saya ingin menggunakan LinearLayoutke posisi dua TextViewsdalam satu baris. Satu TextViewdi sisi kiri, yang lain di sisi kanan (analog dengan float: left, float: right in CSS).

Apakah itu mungkin, atau apakah saya perlu menggunakan ViewGrouptata letak yang berbeda atau lebih jauh untuk menyelesaikannya?

Inilah yang saya miliki sejauh 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: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>
Richard
sumber

Jawaban:

290

Gunakan RelativeLayoutdengan layout_alignParentLeftdan layout_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>

Juga, Anda mungkin harus menggunakan dip(atau dp) daripada spdi tata letak Anda . spmencerminkan pengaturan teks serta kepadatan layar sehingga biasanya hanya untuk ukuran item teks.

Dave Webb
sumber
57
Untuk mencegah konten tumpang tindih, mungkin juga ingin menambahkan 'android: layout_toLeftOf = "@ + id / mytextview2"' ke tampilan teks pertama
Rollin_s
Untuk tabel dinamis, Anda bisa melakukan: TableRow.LayoutParams col1Params = new TableRow.LayoutParams (); // Bungkus konten baris col1Params.height = LayoutParams.WRAP_CONTENT; col1Params.width = LayoutParams.WRAP_CONTENT; // Atur gravitasi untuk memusatkan gravitasi kolom col1Params.gravity = Gravity.LEFT;
siddhusingh
3
Untuk kompatibilitas dan dukungan yang lebih baik untuk layar perangkat yang berbeda, gunakan "android: layout_alignParentEnd =" true "" (saat menggunakan layout_alignParentRight) dan "android: layout_alignParentStart =" true "" (saat menggunakan layout_alignParentLeft).
ivanleoncz
@Rollin_s, aku mencintaimu.
Vegas
89

Anda bisa menggunakan properti gravitasi untuk "melayang" tampilan.

<?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>
JeremyFromEarth
sumber
1
Sayangnya sepertinya ini tidak menyebabkan kedua item berada pada baris yang sama
Webnet
1
Tidakkah gravitasi hanya memengaruhi "perataan teks"?
Joshua Pinter
3
maaf, ini berfungsi. Saya lupa menambahkan android: layout_weight = "1". Setelah menambahkan itu tidak masalah.
Abdullah Umer
13

Ini dapat dilakukan dengan LinearLayout(lebih sedikit overhead dan lebih banyak kontrol daripada opsi Relative Layout). Berikan pandangan kedua sisa ruang sehingga gravitybisa bekerja. Diuji kembali ke API 16.

Bukti

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

Jika Anda ingin membatasi ukuran tampilan teks pertama, lakukan ini:

Sesuaikan bobot sesuai kebutuhan. Tata letak relatif tidak akan memungkinkan Anda untuk mengatur persentase berat seperti ini, hanya dp tetap dari salah satu tampilan

Bukti 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>
Carson Holzheimer
sumber
8

Bahkan dengan tip Rollin_s, jawaban Dave Webb tidak bekerja untuk saya. Teks di sebelah kanan TextViewmasih tumpang tindih dengan teks di sebelah kiriTextView .

Saya akhirnya mendapatkan perilaku yang saya inginkan dengan sesuatu seperti ini:

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

Perhatikan bahwa mytextview2 telah "android:layout_width"ditetapkan sebagai "match_parent".

Semoga ini bisa membantu seseorang!

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

Taj Mb
sumber
1

Jika Anda ingin elemen kiri dan kanan untuk membungkus konten tetapi memiliki ruang tengah

<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>
funct7
sumber
0

Ada banyak cara lain untuk mencapai ini, saya akan melakukan sesuatu seperti ini.

<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>
NelsonRoberts
sumber
0

Jawaban Dave Webb berhasil bagi saya. Terima kasih! Ini kode saya, semoga ini membantu seseorang!

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

Gambar: Gambar

GinCanhViet
sumber
0

masukkan deskripsi gambar di sini

Kode ini akan membagi kontrol menjadi dua sisi yang sama.

    <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>
Sayed Muhammad Idrees
sumber