У меня возникли проблемы с получением моего LinearLayout для отображения просмотров в желаемой пропорции. Я просмотрел около 10 или 15 вопросов о LinearLayout и layout_weight, но по какой-то причине в моем случае ответы не применяются. Я создаю пользовательский AlertDialog цветовую палитру с настраиваемым видом созданной следующим образом:Layout_weight не работает по желанию при использовании вложенного LinearLayout
private LinearLayout createLayout() {
//Create our top-level layout
LinearLayout mainLayout = new LinearLayout(mContext);
mainLayout.setOrientation(LinearLayout.VERTICAL);
mainLayout.setPadding(15, 0, 15, 0);
//Make the preset view at the top
LinearLayout.LayoutParams presetViewParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 0.2f);
mainLayout.addView(new PresetView(mContext), presetViewParams);
//Create another linear layout
LinearLayout subLayout = new LinearLayout(mContext);
subLayout.setOrientation(LinearLayout.HORIZONTAL);
subLayout.setPadding(0, 15, 0, 15);
//Add the Sat Lum View to the second layout
LinearLayout.LayoutParams satLumViewParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.60f);
subLayout.addView(new SatLumView(mContext), satLumViewParams);
//Add the divider between the sat lum view and the hue view
LinearLayout.LayoutParams dividerViewParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.1f);
subLayout.addView(new DividerView(mContext), dividerViewParams);
//Add the Hue View to the second layout
LinearLayout.LayoutParams hueViewParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.30f);
subLayout.addView(new HueView(mContext), hueViewParams);
//Add the second layout to the first layout
LinearLayout.LayoutParams subLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 0.7f);
mainLayout.addView(subLayout, subLayoutParams);
//Add the Line view at the bottom of the main layout
LinearLayout.LayoutParams lineParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 0.1f);
mainLayout.addView(new LineView(mContext), lineParams);
//Return our completed layout
return mainLayout;
}
Проблема у меня в том, что несмотря на то, установить layout_height моих трех вертикальных элементов (PresetView, subLayout и LineView) до «0», вес по-прежнему не распределяет доступное пространство, как я хочу. subLayout не получает 70% пространства, но всегда меньше. Из того, что я могу сказать, PresetView всегда получает столько вертикального пространства, сколько он просит, а subLayout и LineView оставляют остальное. Вот мой onMeasure() метод для PresetView:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = resolveSize(250, widthMeasureSpec);
int height = resolveSize(150, heightMeasureSpec);
setMeasuredDimension(width, height);
}
250 и 150 являются довольно произвольными ценности - PresetView предназначен для работы практически с любым набором измерений (потому что я хочу, чтобы LinearLayout контролировать свой размер!). У меня создалось впечатление, что использование layout_height 0 и указание веса помещают макет в управление пространством, занимаемым View, а не View, контролирующим его. Почему PresetView все еще занимает полные 150 пикселей, когда я установил его layout_height в 0?
Метод onMeasure() других представлений идентичен PresetView, только с разными значениями.