Weisen Sie die Breite deklarativ der halben verfügbaren Bildschirmbreite zu


113

Ist es möglich, der Hälfte der verfügbaren Bildschirmbreite eine Widgetbreite zuzuweisen und dies mit deklarativem XML zu tun?

Antworten:


273

Wenn Ihr Widget eine Schaltfläche ist:

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

Ich gehe davon aus, dass Ihr Widget die eine Hälfte und ein anderes Widget die andere Hälfte einnehmen soll. Der Trick besteht darin, ein LinearLayout zu verwenden, das layout_width="fill_parent"für beide Widgets festgelegt wird, und für beide Widgets layout_weightden gleichen Wert festzulegen . Wenn zwei Widgets mit demselben Gewicht vorhanden sind, teilt das LinearLayout die Breite zwischen den beiden Widgets auf.


15
Verwenden Sie besser android: layout_width = "0dp" für beide untergeordneten Elemente, ohne sie zweimal zu dimensionieren.
Tomash

2
Ich habe nie verstanden, warum Sie das layout_width = "0dp" deklarieren mussten
Andrew

Sie können in späteren Versionen von Android auch <Space /> als Füllstoffe verwenden. Ich denke, View ist etwas leichter als TextView, wenn Sie es nur als Füllstoff verwenden möchten. layout_width = "0dp" ist laut Android-Dokumentation der empfohlene Ansatz.
Muz

Funktioniert super! Ich danke dir sehr!!
IcyFlame

1
@ Andrew: Da der Layout-Renderer auf diese Weise nicht versucht, mit der layout_width der Komponente zu arbeiten, wird die zusätzliche Breite direkt nach Gewicht geteilt.
NJZK2

42

Verwenden des Einschränkungslayouts

  1. Fügen Sie eine Richtlinie hinzu
  2. Stellen Sie den Prozentsatz auf 50% ein
  3. Beschränken Sie Ihre Sicht auf die Richtlinie und das übergeordnete Element.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie Probleme haben, den Prozentsatz zu ändern, lesen Sie diese Antwort .

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>

Dies sollte die beste Antwort sein.
Jean Eric

15

Geben Sie die Breite als 0 dp an, um sicherzustellen, dass die Größe genau dem Gewicht entspricht. Dadurch wird sichergestellt, dass der Inhalt der untergeordneten Ansichten auch dann auf genau die Hälfte begrenzt wird (je nach Gewicht).

<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
Ich denke, dass android: layout_width = "0dp" korrekt ist, aber jedes Gewicht auf 0,5 und weitghtSum auf ihre Summe zu setzen, wird nicht benötigt. Scheint, als müssten Sie nur das gleiche Gewicht für beide
untergeordneten

5

Eine andere Möglichkeit für einzelne Elemente in der Mitte, die die Hälfte des Bildschirms ausfüllen:

<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
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
gunr2171
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.