Расширение GridLayout

С GridLayout это допустимое определение макета. Нет предупреждений о 'layout_height' attribute should be defined или 'layout_width' attribute should be defined

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView />
</GridLayout>

С другой стороны, если я расширяю GridLayout, эквивалентный макет выдает оба предупреждения 'layout_height' attribute should be defined и 'layout_width' attribute should be defined

<ExtendedGridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView />
</ExtendedGridLayout>

вот как выглядит расширенная сетка

package com.github.extendedgridlayout;

import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.GridLayout;

@SuppressWarnings("unused")
public class ExtendedGridLayout extends GridLayout {
    public ExtendedGridLayout(Context context){
        super(context);
    }

    public ExtendedGridLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ExtendedGridLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public ExtendedGridLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
}

Я попытался просмотреть источник GridLayout, и похоже, что они расширили ViewGroup.LayoutParams и установили ширину и высоту по умолчанию, как для PercentRelativeLayout

Таким образом, может показаться, что, основываясь на наследовании, ExtendedGridLayout также должен установить ширину и высоту по умолчанию для своих дочерних элементов или сделать что-либо, что делает GridLayout, чтобы избежать предупреждающего сообщения в редакторе макета.

Итак, мой вопрос: почему ExtendedGridLayout имеет предупреждение и как его предотвратить?


person Olumide    schedule 13.07.2016    source источник
comment
Лично я предпочитаю создавать собственное представление с помощью LinearLayouts вместо использования бесполезного GridLayout.   -  person M D P    schedule 25.07.2016
comment
Для чего предназначен ‹ImageView /›? Почему бы вам не задать ему ширину и высоту?   -  person Amir Uval    schedule 25.07.2016
comment
@uval gridview устанавливает ширину и высоту своих дочерних элементов. Особенно, когда вы явно указываете количество столбцов и строк   -  person Olumide    schedule 25.07.2016
comment
Я не понимаю, почему вы добавили пустой ImageView внутри xml. Это псевдокод? Это ваш настоящий код? Или случайно? (Я никогда не видел такого использования полностью пустого представления в xml)   -  person Amir Uval    schedule 26.07.2016
comment
@uval это урезанная версия, чтобы показать мою проблему   -  person Olumide    schedule 26.07.2016
comment
Таким образом, ‹ImageView ... /› будет понятнее. Потому что ‹ImageView /› на самом деле может компилироваться без ошибок, даже если это не имеет смысла. Так что это могло быть проблемой.   -  person Amir Uval    schedule 26.07.2016
comment
@uval предназначен для компиляции   -  person Olumide    schedule 27.07.2016


Ответы (1)


Это поведение AndroidStudio по умолчанию.
Один из способов избежать этой ошибки – подавление.

<ExtendedGridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <!--suppress AndroidDomInspection -->
    <ImageView />

</ExtendedGridLayout>

AndroidStudio пропускает отображение этой ошибки с GridLayout, но не пропускает дочерние элементы GridLayout. Вот исходный код инспектора AndroidStudio.

Вот связанный отчет об ошибке.
Судя по этому отчету об ошибке, ваша проблема возникла следующим образом: это.

person nshmura    schedule 19.07.2016
comment
Отчет об ошибке отличается от моей ситуации. В отчете об ошибке GridLayout показывает предупреждения для некоторых дочерних элементов, но в моем случае ExtendedGridLayout показывает предупреждения для всех дочерних элементов. Также в отчете об ошибке говорится, что ошибка была исправлена ​​​​в версии 0.3.2, а я использую версию 2.1.2. - person Olumide; 19.07.2016
comment
О, простите мой плохой английский. Я хотел сказать, что есть родственная проблема. Судя по этому отчету об ошибке, ваша проблема, похоже, возникла. - person nshmura; 19.07.2016