Функция «include» макета не поддерживает свойство layout_gravity? - PullRequest
7 голосов
/ 16 декабря 2010
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <include
        layout="@layout/view1" 
        android:layout_gravity="center_vertical" />

    <include
        layout="@layout/view2"
        android:layout_gravity="center_vertical" />
</LinearLayout>

Итак, android: layout_gravity всегда будет игнорироваться?Это очень плохо для повторного использования кода ... Кажется, что layout_margin тоже не поддерживается.

А вот макет view1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:minHeight="45dip"
    android:background="@drawable/updater_background" >

    <ProgressBar
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="7dip"
        android:visibility="gone" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" />
</LinearLayout>

Ответы [ 3 ]

12 голосов
/ 22 января 2013

Два года спустя ошибка все еще существует!Хотя атрибуты ALL android: layout _ * должны поддерживаться тегом , атрибут android: layout_gravity - нет (какой тип является большим недостатком для макетавозможность повторного использования).

Обходной путь, который я сейчас использую, заключается в том, чтобы программно установить поле макета следующим образом:

( (LinearLayout.LayoutParams) includedView.getLayoutParams () ).gravity = Gravity.BOTTOM | Gravity.RIGHT;

ИЛИ для FrameLayout в качестве родительскогонапример:

( (FrameLayout.LayoutParams) includedView.getLayoutParams () ).gravity = Gravity.BOTTOM | Gravity.RIGHT;

РЕДАКТИРОВАТЬ:

Я также обнаружил, что атрибут android: layout_gravity применяется для include тег IF it (тег включает ) содержит теги layout_width и layout_height !

0 голосов
/ 19 марта 2017

Я думаю, что это можно решить, вставив взвешенный макет

Например

<LinearLayout
  android:orientation="vertical"
  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:context="com.sample.SampleActivity">

 <LinearLayout
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="0dp">

    <--Some other Views-->

</LinearLayout>


<include
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    layout="@layout/my_awesome_layout"
    />

LinearLayout можно заменить на Space, если вам не нужен какой-либо компонент.

0 голосов
/ 16 декабря 2010

http://developer.android.com/resources/articles/layout-tricks-reuse.html утверждает, что поддерживаются все атрибуты layout_.

В вашем случае центрирование по горизонтали LinearLayout, вероятно, не имеет никакого эффекта. Попробуйте другой макет, другие параметры.

...