С 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
имеет предупреждение и как его предотвратить?
LinearLayout
s вместо использования бесполезногоGridLayout
. - person M D P   schedule 25.07.2016