Tetapkan lebar menjadi setengah lebar layar yang tersedia secara deklaratif

113

Apakah mungkin untuk menetapkan lebar widget menjadi setengah dari lebar layar yang tersedia, dan melakukannya menggunakan xml deklaratif?

bugzy
sumber

Jawaban:

274

Jika widget Anda adalah Tombol:

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal">
    <Button android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="somebutton"/>

    <TextView android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
</LinearLayout>

Saya berasumsi Anda ingin widget Anda mengambil satu setengah, dan widget lain mengambil setengah lainnya. Triknya adalah menggunakan LinearLayout, menyetel layout_width="fill_parent"kedua widget, dan menyetel layout_weightnilai yang sama pada kedua widget juga. Jika ada dua widget, keduanya memiliki bobot yang sama, LinearLayout akan membagi lebar antara dua widget tersebut.

sinis
sumber
15
Lebih baik gunakan android: layout_width = "0dp" untuk kedua elemen turunan, hindari mengubah ukurannya dua kali.
tomash
2
Saya tidak pernah mengerti mengapa Anda harus mendeklarasikan layout_width = "0dp"
Andrew
Anda juga dapat menggunakan <Space /> pada versi Android yang lebih baru sebagai pengisi. Saya pikir View sedikit lebih ringan dari TextView jika Anda hanya ingin menggunakannya sebagai filler. layout_width = "0dp" sebenarnya adalah pendekatan yang direkomendasikan menurut dokumentasi Android.
Muz
Bekerja dengan baik! Terima kasih banyak!!
IcyFlame
1
@Andrew: karena dengan cara ini penyaji tata letak tidak mencoba bekerja dengan layout_width komponen, ia langsung melompat ke berbagi lebar ekstra sesuai dengan bobot.
njzk2
43

Menggunakan tata letak kendala

  1. Tambahkan Panduan
  2. Atur persentasenya menjadi 50%
  3. Batasi pandangan Anda ke Guideline dan orang tua.

masukkan deskripsi gambar di sini

Jika Anda mengalami masalah dalam mengubahnya menjadi persentase, lihat jawaban ini .

XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

    <android.support.constraint.Guideline
        android:id="@+id/guideline8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5"/>

    <TextView
        android:id="@+id/textView6"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/guideline8"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
    
</android.support.constraint.ConstraintLayout>
Suragch
sumber
Ini harus menjadi jawaban terbaik.
Jean Eric
15

beri lebar 0dp untuk memastikan ukurannya persis sesuai beratnya. Ini akan memastikan bahwa meskipun konten penayangan anak bertambah besar, konten tersebut masih dibatasi hingga tepat setengahnya (menurut beratnya)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1"
     >

    <Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="click me"
    android:layout_weight="0.5"/>


    <TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="Hello World"
    android:layout_weight="0.5"/>
  </LinearLayout>
Rajesh Batth
sumber
1
Saya pikir android: layout_width = "0dp" sudah benar tetapi mengatur setiap bobot menjadi 0,5 dan weitghtSum ke jumlah mereka itu tidak diperlukan. Sepertinya Anda hanya perlu memiliki bobot yang sama pada kedua tampilan anak ..
jj_
5

Cara lain untuk satu item di tengah, yang memenuhi setengah layar:

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

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

        <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2" />

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

</LinearLayout>
Denys_Sh
sumber
1
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
    android:id="@+id/textD_Author"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:text="Author : "
    android:textColor="#0404B4"
    android:textSize="20sp" />
 <TextView
    android:id="@+id/textD_Tag"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:text="Edition : "
    android:textColor="#0404B4"
    android:textSize="20sp" />
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:weightSum="1" >
    <Button
        android:id="@+id/btbEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="Edit" />
    <Button
        android:id="@+id/btnDelete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="Delete" />
</LinearLayout>
</LinearLayout>
Shahzad Shameer
sumber
3
Meskipun cuplikan kode ini dapat menyelesaikan pertanyaan, menyertakan penjelasan sangat membantu meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa mendatang, dan orang-orang itu mungkin tidak tahu alasan saran kode Anda.
gunr2171