私は、それぞれの子が最も広い幅を持つ、LinearLayout
いくつかの子を持つ垂直を作成したいと考えています。Button
ただし、子供の幅の使用MATCH_PARENT
または使用に応じて、画面全体の幅を取得するか、塗りつぶさないかのいずれかになります。以下のスクリーンショット (塗りつぶし/ラップ):WRAP_CONTENT
LinearLayout
Buttons
LinearLayout
アクティビティ コードの例:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout mainView = new RelativeLayout(this);
mainView.setBackgroundColor(Colors.WHITE);
String[] buttonsNames = new String[] { "Short", "Looooooong", "Medium" };
View buttonsView = getButtonsView(buttonsNames);
mainView.addView(buttonsView, new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT));
setContentView(mainView);
}
private View getButtonsView(String[] buttonNames) {
LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
buttonsView.setBackgroundColor(Colors.BLACK);
for (int i = 0; i < buttonNames.length; i++) {
Button button = new Button(this);
button.setText(buttonNames[i]);
///////////// HERE LAYS THE PROBLEM //////////
buttonsView.addView(button, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
//LinearLayout.LayoutParams.WRAP_CONTENT, // neither of them works
LinearLayout.LayoutParams.WRAP_CONTENT));
View redLineDivider = new View(this);
redLineDivider.setBackgroundColor(Colors.RED);
buttonsView.addView(redLineDivider, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 2));
}
return buttonsView;
}
2 番目のスクリーンショットでわかるように、赤い線は実際には引き伸ばされずに全幅になりLinearLayout
ます。これは、少なくとも 1 つのビューで幅が設定されているためです。
私が思いついた潜在的な修正は、最も幅の広いボタン (テキストが最も長い) を見つけてそれを使用WRAP_CONTENT
し、残りはすべて を使用することMATCH_PARENT
です。これにより、期待される結果が得られます。
コード:
buttonsView.addView(button, new LinearLayout.LayoutParams(
isLongestText(i) ? LinearLayout.LayoutParams.WRAP_CONTENT
: LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
しかし、それはエレガントな解決策のようには感じません - 私が見逃しているこのような状況のために意図されたメカニズムはありますか?