Assegna la larghezza alla metà della larghezza disponibile dello schermo in modo dichiarativo


113

È possibile assegnare la larghezza di un widget alla metà della larghezza disponibile dello schermo e farlo utilizzando xml dichiarativo?

Risposte:


274

Se il tuo widget è un pulsante:

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

Suppongo che tu voglia che il tuo widget occupi una metà e un altro widget che occupi l'altra metà. Il trucco sta usando un LinearLayout, l'impostazione layout_width="fill_parent"su entrambi i widget e l'impostazione layout_weightsullo stesso valore anche su entrambi i widget. Se sono presenti due widget, entrambi con lo stesso peso, LinearLayout dividerà la larghezza tra i due widget.


15
Usa meglio android: layout_width = "0dp" per entrambi gli elementi figlio, evitando di ridimensionarli due volte.
tomash

2
Non ho mai capito perché hai dovuto dichiarare layout_width = "0dp"
Andrew

È inoltre possibile utilizzare <Spazio /> nelle versioni successive di Android come riempitivi. Penso che View sia un po 'più leggero di TextView se intendi usarlo solo come riempitivo. layout_width = "0dp" è in realtà l'approccio consigliato secondo la documentazione di Android.
Muz

Funziona alla grande! Grazie mille!!
IcyFlame

1
@Andrew: poiché in questo modo il renderer di layout non cerca di lavorare con layout_width del componente, salta direttamente alla condivisione della larghezza extra in base ai pesi.
njzk2

43

Utilizzo del layout dei vincoli

  1. Aggiungi una linea guida
  2. Imposta la percentuale al 50%
  3. Limita la tua visualizzazione alla linea guida e al genitore.

inserisci qui la descrizione dell'immagine

Se hai problemi a cambiarlo in una percentuale, vedi questa risposta .

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>

Questa dovrebbe essere la risposta migliore.
Jean Eric,

15

dai larghezza come 0dp per assicurarti che le sue dimensioni siano esattamente come per il suo peso questo farà in modo che anche se il contenuto delle visualizzazioni figlio diventa più grande, sarà comunque limitato esattamente alla metà (a seconda del peso)

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

1
Penso che android: layout_width = "0dp" sia corretto, ma non è necessario impostare ogni peso su 0,5 e weitghtSum sulla loro somma. Sembra che tu abbia solo bisogno di avere lo stesso peso su entrambe le visualizzazioni dei bambini ..
jj_

5

Un altro modo per un singolo elemento al centro, che riempie metà dello schermo:

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

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>

3
Sebbene questo snippet di codice possa risolvere la domanda, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
gunr2171
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.