Программно добавленный флажок с заголовком не вписывается в макет в Android

Я разрабатываю приложение для Android. В моем приложении я программно добавляю флажки в LinearLayout. Но после добавления флажков он не вписывается в макет должным образом.

Снимок экрана:

введите здесь описание изображения

Как вы можете видеть на снимке экрана, текст x-samll и его флажок установлены неправильно. Я хочу, чтобы и флажок, и его текст вместе переходили на новую строку, когда не хватает места. Как я могу достичь этого?

Вот как я программно добавляю флажки:

if(attrs.length()>0)
                                {
                                    LinearLayout attrControlsSubContainer = new LinearLayout(getBaseContext());
                                    attrControlsSubContainer.setOrientation(LinearLayout.HORIZONTAL);
                                    LinearLayout.LayoutParams layoutParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
                                    attrControlsSubContainer.setLayoutParams(layoutParams);
                                    for(int i=0;i<attrs.length();i++)
                                    {
                                        CheckBox chkAttribute = new CheckBox(getBaseContext());
                                        chkAttribute.setText(attrs.getJSONObject(i).getString("name"));
                                        chkAttribute.setTextColor(Color.BLACK);
                                        chkAttribute.setId(attrs.getJSONObject(i).getInt("id"));
                                        attrControlsSubContainer.addView(chkAttribute);
                                    }
                                    attributeControlContainer.addView(attrControlsSubContainer);
                                }

person Wai Yan Hein    schedule 21.03.2016    source источник
comment
Связанный вопрос   -  person OJ7    schedule 21.03.2016


Ответы (2)


используйте приведенный ниже код:

if(attrs.length() > 0) {
      ScrollView mScrollView = new HorizontalScrollView(getApplicationContext());
      mScrollView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
      mScrollView.setFillViewport(true); 
      LinearLayout attrControlsSubContainer = new LinearLayout(getBaseContext());
      attrControlsSubContainer.setOrientation(LinearLayout.HORIZONTAL);
      LinearLayout.LayoutParams layoutParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);                               attrControlsSubContainer.setLayoutParams(layoutParams);
      for(int i=0;i<attrs.length();i++)
      {
         CheckBox chkAttribute = new CheckBox(getBaseContext());
         chkAttribute.setText(attrs.getJSONObject(i).getString("name"));
         chkAttribute.setTextColor(Color.BLACK);
         chkAttribute.setId(attrs.getJSONObject(i).getInt("id"));
         attrControlsSubContainer.addView(chkAttribute);
                                    }
       mScrollView.addView(attrControlsSubContainer);
       attributeControlContainer.addView(mScrollView);  


 }
person Haniyeh Khaksar    schedule 21.03.2016

LinearLayout для этого недостаточно, вы должны использовать FlowLayout

<com.wefika.flowlayout.FlowLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="start|top">


</com.wefika.flowlayout.FlowLayout>

Зависимость от Gradle: - compile 'org.apmem.tools:layouts:1.10@aar'

Затем динамически добавьте флажок в FlowLayout

используйте FlowLayout.LayoutParams

 FlowLayout.LayoutParams params = new FlowLayout.LayoutParams
                    (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
person N J    schedule 25.03.2016
comment
Могу ли я получить ссылку для установки FlowLayout с помощью Grandle? - person Wai Yan Hein; 25.03.2016