Вопрос по android, android-layout, layout – Этот макет RelativeLayout или его родитель LinearLayout бесполезен

11

Я разрабатываю Android 3.1. и выше приложения.

На одном мероприятии я генерирую его макет динамически. Я используюformdetail.xml как contentview:

<code>@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.formdetail);

    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        currentFormId = extras.getString("FormId");
    }
}
</code>

formdetail.xml:

<code><?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/detailLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <Button
            android:id="@+id/downloadFormsButton"
            android:enabled="false"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="@string/download_forms_button" />
        <TextView
            android:id="@+id/formErrorMsg"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textSize="16dp" >
        </TextView>
    </RelativeLayout>

</LinearLayout>
</code>

downloadFormsButton а такжеformErrorMsg должен быть всегда в форме.

Но используя этот XML, я получаю это предупреждение:

This RelativeLayout layout or its LinearLayout parent is useless

Мне нужно linearLayout, чтобы добавить TableLayouts программно.

Как я могу решить это предупреждение?

Я думаю, что ваш родительский макет обернуть только один дочерний, и вы можете оптимизировать свой макет, удалив родительский LinearLayout Borys

Ваш Ответ

4   ответа
12

ваш LinearLayout не делает ничего полезного, поскольку его единственный дочерний элемент - RelativeLayout. Удалить LinearLayout:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/detailLayout"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <Button android:id="@+id/downloadFormsButton" 
         android:enabled="false"
         android:layout_alignParentLeft="true"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" 
         android:layout_margin="10dp"
         android:text="@string/download_forms_button" />
 <TextView 
         android:id="@+id/formErrorMsg" 
         android:layout_alignParentRight="true"
         android:layout_alignParentBottom="true"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:padding="10dp"
         android:textSize="16dp" />
</RelativeLayout>
Как вы можете прочитать в моем вопросе, мне нужен LinearLayout для программного добавления TableLayout. VansFannel
затем вы можете добавить их в свой RelativeLayout ... в любом случае я просто объяснил причину предупреждения Lint
2

Я не знаю как, и это правильный путь или нет, но это решается после установки атрибута фона для обоих макетов.

Теперь нет предупреждений и работает отлично. Надеюсь, это также сработает для вас.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:background="@drawable/bg"
    android:layout_height="match_parent" >

        <FrameLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:background="@drawable/bg2"
            android:layout_marginTop="10dp" >

            <ImageView
                android:id="@+id/img_BookImage"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:scaleType="fitXY"
                android:contentDescription="@string/India"
                android:src="@drawable/india" />
        </FrameLayout>

    </FrameLayout>
У меня было две линейные раскладки, которые линтер распознал как избыточные, но первая содержит фоновое изображение, которое привязано к исходным точкам экрана, вторая раскладка помещает некоторые поля ввода и тексты по центру группы по горизонтали и вертикали. Я не смог найти способ получить это без использования двух макетов, поэтому определение атрибутов android: background обоих макетов исключило предупреждение.
1

lint. Lint не знает, что вы позже добавите представления к этому макету, и он предупредит вас, что вы добавили ненужный дополнительный вид (увеличивая глубину макета).

Вы должны просто проигнорировать предупреждение (если это действительно беспокоит вас, вот ссылка накак убрать предупреждения отlint).

8

либо щелкаете правой кнопкой мыши по своему проекту. НажмитеBuild Path->Configure Build Path..., ПодAndroid Lint Preferences ИщуUselessParent и установите его серьезность, чтобы игнорировать или нажатьIgnore All.

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

Я забираю эту последнюю часть обратно. Я думаюIgnore All сотрет все предупреждения и ошибки Lint.

В Eclipse Juno это меню находится в свойствах вашего проекта -> Настройки Lint Android.

Похожие вопросы