Не переносится текст у CheckBox (Programmatically (Android))

336
02 августа 2021, 17:40

При динамическом создании CheckBox, не переносится текст. Добавляю следующим образом:

LinearLayout dynamic_task_fields;
for (int chIt = 0 ; chIt < chB.length(); chIt++) {
    TableRow row =new TableRow(ctx);
    row.setLayoutParams(new 
    TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, 
    TableRow.LayoutParams.WRAP_CONTENT));
                            final CheckBox check = new CheckBox(ctx);
                            check.setButtonTintList(colorStateList);
                            JSONObject objCheck = null;
                            objCheck = chB.getJSONObject(chIt);
                            String OptionName = objCheck.getString("PropName");
                            String OptionDescription = objCheck.getString("Description");
                            Boolean Checked = objCheck.getBoolean("Value");
                            check.setId(chIt);
                            check.setTag(OptionName);
                            check.setText(OptionDescription);
                            check.setChecked(Checked);
                            if(completed)
                            {
                                check.setEnabled(false);
                                check.setTextColor(Color.BLACK);
                            }
                            try {
                                row.addView(check);
                                table.addView(row);
                            }
                            catch (Exception ex)
                            {
                                String err = ex.getMessage();
                            }
                        }
                        dynamic_task_fields.addView(table);

CheckBox добавляется в TableRow, а TableRow в TableLayout. Уже множество вариантов перепробовал, никак не получается его перенести. Пожалуйста, подскажите, в чем может быть проблема.

Answer 1

У вас Checkbox должен создаваться с параметрами лейаута - примерно так:

final CheckBox check = new CheckBox(ctx); 
check.setLayoutParams(
     new LinearLayout.LayoutParams(
         ViewGroup.LayoutParams.WRAP_CONTENT,
         ViewGroup.LayoutParams.WRAP_CONTENT));

Но вообще такой чисто программный способ виджетов является немножко антипаттерном.

Принято обычно создавать небольшой XML ресурсик типа (допустим с именем row.xml):

<TableRow>
   <CheckBox
       android:id="@+id/check"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
    />
 </TableRow>

который уже динамически "поднимать" (inflate) в коде:

TableLayout table = (TableLayout)findViewById(R.id.table); //таблица куда добавляем
View row = getLayoutInflater().inflate(R.layout.row, null); //инфлейтим
table.addView(row); //добавляем в таблицу
CheckBox check = (CheckBox)row.findViewById(R.id.check); //находим наш чекбокс
check.setText("Blah-blah"); //пишем текст

P.S. За точность кода не ручаюсь изложена общая идея - я не компилятор :)

READ ALSO
Настройка виртуальных хостов Tomcat

Настройка виртуальных хостов Tomcat

Есть имя хоста testmydomain

210
HashMap.merge() через Stream API

HashMap.merge() через Stream API

Есть метод, в котором алгоритм прописан через обычную итерацию по List:

202
Как получить одно из двух значений Object из Map&lt;String, Object&gt; и поместить его в List&lt;&gt;?

Как получить одно из двух значений Object из Map<String, Object> и поместить его в List<>?

От сервера с помощью Retrofit я получаю данные в виде:

223
Exception in thread &ldquo;main&rdquo; java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source)

Exception in thread “main” java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source)

Задача: На числовой прямой дан отрезок [3;8]Требуется определить, принадлежит ли точка x данному отрезку

223