Ich habe Probleme, mit meinem LinearLayout Ansichten im gewünschten Verhältnis anzuzeigen. Ich habe etwa 10 oder 15 weitere Fragen zu LinearLayout und layout_weight gelesen, aber aus irgendeinem Grund scheinen in meinem Fall keine Antworten zu treffen. Ich erstelle einen benutzerdefinierten Alertdialog Farbpicker mit einer benutzerdefinierten Ansicht wie folgt erstellt:Layout_weight funktioniert nicht wie gewünscht, wenn ein verschachteltes LinearLayout verwendet wird
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;
}
Das Problem, das ich habe, ist, dass trotz der layout_height meiner drei vertikalen Elemente einzustellen (PresetView, subLayout und Lineview) auf "0" verteilt das Gewicht immer noch nicht den verfügbaren Platz wie ich will. subLayout erhält nicht 70% des Speicherplatzes, aber immer weniger. Von dem, was ich sagen kann, erhält der PresetView immer so viel vertikalen Raum, wie es verlangt, und SubLayout und LineView sind übrig, um den Rest aufzunehmen. Hier ist meine onMeasure() -Methode für PresetView:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = resolveSize(250, widthMeasureSpec);
int height = resolveSize(150, heightMeasureSpec);
setMeasuredDimension(width, height);
}
Die 250 und 150 sind eher willkürliche Werte - die PresetView ist so konzipiert, mit fast jedem Satz von Dimensionen zu arbeiten (weil ich das Linearlayout will seine Größe kontrollieren!). Ich hatte den Eindruck, dass die Verwendung einer layout_height von 0 und die Angabe einer Gewichtung das Layout in die Kontrolle über den von der Ansicht eingenommenen Raum und nicht mehr durch die Steuerung der Ansicht bringen. Warum nimmt PresetView immer noch volle 150 Pixel auf, wenn ich die layout_height auf 0 setze?
Die onMeasure() -Methode der anderen Ansichten ist identisch mit PresetView, nur mit anderen Werten.