Есть ли способ, которым я могу обойтись, чтобы добавить параметры layout_width и layout_height в мои пользовательские представления? Я знаю, что есть несколько встроенных представлений в Android, для которых вам не нужно предоставлять эти атрибуты.layout_width и layout_height
ответ
Когда вы хотите не использовать параметры высоты и ширины? Я не уверен, но я думаю, что это может заставить их даже не появиться на макете?
Посмотрите здесь для справки http://developer.android.com/guide/topics/ui/declaring-layout.html#layout-params
Из того же Reference Дэйва предложил.
все просмотреть группы включает ширину и высоту (layout_width и layout_height), и каждый вид требуется, чтобы определить их. Многие LayoutParams также включают в себя дополнительные поля и границы.
Похоже, вы, , должны.
Как выглядит TableRow ViewGroup? –
@NicholasRoge Я не знал о 'ViewGroup', но он говорит, что это« абстрактный класс »(http://developer.android.com/reference/android/view/ViewGroup.html). Классы, расширяющие его, они реализуют 'layout_height' и' layout_width' –
@NicholasRoge Но, как я уже сказал, я об этом не знал. Можете ли вы определить ViewGroup и использовать его в качестве макета в xml, например? Я сомневаюсь в этом. –
Это не обязанность View, чтобы решить, может ли она/должна предоставлять эти атрибуты. Родительская ViewGroup определяет, являются ли эти атрибуты обязательными или нет. TableRow, например, делает их необязательными. Другие макеты (LinearLayout, FrameLayout и т. Д.) Требуют этих параметров.
Я об этом не думал. В этом случае, как сделать родительскую ViewGroup, пусть XML будет «Эй, этот парень не должен показывать мне эти вещи»? –
Если вы снижаете общие и избыточные атрибуты, что вам нужно, тогда вы должны попробовать стиль.
Руководство разработчика here.
Это не редукция, в которой я собираюсь. Это удаление. Для них нет никакой необходимости быть там. –
Проблема в том, что ViewGroup.LayoutParams.setBaseAttributes()
использует строгий getLayoutDimension(int, String)
. Вам необходимо расширить любые параметры LayoutParams и переопределить setBaseAttributes
. Внутри вы можете вручную установить ширину и высоту или использовать более мягкий getLayoutDimension(int, int)
. Наконец, вам придется переопределить в своем классе макета, что вы используете свои собственные LayoutParams.
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(getContext(), attrs);
}
public static class LayoutParams extends FrameLayout.LayoutParams {
public LayoutParams(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
width = a.getLayoutDimension(widthAttr, WRAP_CONTENT);
height = a.getLayoutDimension(heightAttr, WRAP_CONTENT);
}
}
Как и таблица, они мне не нужны, поскольку родительский вид управляет параметрами макета детей. Поэтому атрибуты, которые я указываю в XML, вообще ничего не делают. –