Изменить ширину кнопки в TableRow в TableLayout - PullRequest
0 голосов
/ 03 октября 2019

У меня странный случай исчезновения или застревания кнопок на ширине, не заданной мной. Как ни странно, если я вместо этого изменю кнопки на 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

...