У меня странный случай исчезновения или застревания кнопок на ширине, не заданной мной. Как ни странно, если я вместо этого изменю кнопки на TextViews, то ширина изменится, как и ожидалось. Кроме того, ширина всех остальных элементов View изменяется, как и ожидалось.
Вот некоторые из вещей, которые я пробовал встречаться до сих пор. Я создаю TableLayout в XML, но TableRows создаются динамически
Опция 1: Использование setWidth - Отображаются кнопки, но размер является статическим независимо от предоставленного значения ширины
private TableRow createItemRow() {
TableRow row = new TableRow(getContext());
row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT));
//Create a + button and set it's id to ("+" + StockItem.Id)
Button butPlus = new Button(getContext());
butPlus.setWidth(30);//<--------------------------------- No affect
butPlus.setText("+");
row.addView(butPlus);
//Create more buttons the same way and add the table row
//adding the other view elements (working correctly) to the row
...
return row;
}
Вариант 2: Использование LinearLayout.LayoutParams - заставляет кнопки полностью исчезнуть
private TableRow createItemRow() {
TableRow row = new TableRow(getContext());
row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT));
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(30, TableLayout.LayoutParams.MATCH_PARENT)
//Create a + button and set it's id to ("+" + StockItem.Id)
Button butPlus = new Button(getContext());
butPlus.setLayoutParams(lp);//<-------------------- Button disappear
butPlus.setText("+");
row.addView(butPlus);
//add the more buttons the same way... no affect
//adding the other view elements (working correctly) to the row
...
return row;
}
Опции 3: Обтекание кнопок в линейном макете с нужным размеромзатем добавьте кнопки в этот макет. Опять же, кнопки не отображаются. Установка кнопок в соответствии с родителями также не влияет. Опять же, если мы изменим их на TextViews вместо кнопок, то он будет отображаться правильно.
private TableRow createItemRow() {
TableRow row = new TableRow(getContext());
row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT));
//Create linearlayout wrapper
LinearLayout wrapperLayout = new LinearLayout(getContext());
wrapperLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(60, TableLayout.LayoutParams.MATCH_PARENT)
//Create a + button and set it's id to ("+" + StockItem.Id)
Button butPlus = new Button(getContext());
butPlus.setText("+");
wrapperLayout.addView(butPlus);//<-------------------------Button is too big for the wrapper, even if the layout parameters are set to match parent
//add the next buttons the same way then add it to the wrapper
//after all the buttons are added to the wrapper, add the wrapper to the row
row.addView(wrapperLayout);
//adding the other view elements (working correctly) to the row
...
return row;
}
Возможно ли, что именно TableRow заставляет кнопки отображаться неправильно? Есть идеи, что идет не так?
Этот код скомпилирован для API 26