Декларативно призначте ширину до половини наявної ширини екрана


113

Чи можна призначити віджет шириною до половини доступної ширини екрана і зробити це за допомогою декларативного xml?

Відповіді:


274

Якщо ваш віджет - кнопка:

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

Я припускаю, що ви хочете, щоб ваш віджет займав одну половину, а інший віджет - другу. Трюк полягає у використанні LinearLayout, налаштуванні layout_width="fill_parent"обох віджетів та встановлення layout_weightоднакового значення для обох віджетів. Якщо є два віджети, обидва з однаковою вагою, LinearLayout розділить ширину між двома віджетами.


15
Краще використовувати android: layout_width = "0dp" для обох дочірніх елементів, уникаючи розміру їх двічі.
tomash

2
Я ніколи не зрозумів, чому вам довелося оголосити layout_width = "0dp"
Ендрю

Ви також можете використовувати <Space /> на пізніших версіях Android в якості наповнювачів. Я думаю, що View трохи легше, ніж TextView, якщо ви просто маєте намір використовувати його як наповнювач. layout_width = "0dp" - це фактично рекомендований підхід відповідно до документації на Android.
Муз

Чудово працює! Дуже дякую!!
IcyFlame

1
@Andrew: оскільки таким чином рендерінг макета не намагається працювати з layout_width компонента, він пропускає безпосередньо до розподілу додаткової ширини відповідно до ваг.
njzk2

43

Використання макета обмежень

  1. Додайте керівництво
  2. Встановіть відсоток на 50%
  3. Обмежте свій погляд на Керівництво та батьків.

введіть тут опис зображення

Якщо у вас виникли труднощі змінити його на відсоток, то дивіться цю відповідь .

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>

Це має бути найкращою відповіддю.
Жан Ерік

15

дайте ширину як 0dp, щоб переконатися, що її розмір точно відповідає вазі, це забезпечить, що навіть якщо вміст дитячих переглядів збільшиться, вони все одно будуть обмежені рівно половиною (відповідно до ваги)

<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
Я думаю, що android: layout_width = "0dp" є правильним, але встановлювати кожну вагу в 0,5 і weitghtSum до їх суми це не потрібно. Здається, що вам просто потрібно мати однакову вагу на обох дитячих поглядах ..
jj_

5

Ще один спосіб для одного елемента в центрі, який заповнює половину екрану:

<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
Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
gunr2171
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.