Как динамически изменять поля просмотра в «Android Flowlayout»

#android

#Android

Вопрос:

У меня есть макет потока Android hash_tag_layout

 <org.apmem.tools.layouts.FlowLayout

    android:id="@ id/hash_tag_layout"

    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="@dimen/view_padding"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin">

</org.apmem.tools.layouts.FlowLayout>
  

Проблема в том, что я не могу изменить поля для динамически добавляемых представлений.

 int pixels = convertDensityPixelsToPixels(5);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

lp.setMargins(0,0,pixels,pixels); //<---<< This line has no effect

TextView tv1 = new TextView(ctx);
tv1.setPadding(pixels,pixels,pixels,pixels); //int left top right bottom
tv1.setBackground(ctx.getResources().getDrawable(R.drawable.hash_tag_bubble_format));//drawable
tv1.setText("# Asd");
tv1.setLayoutParams(lp);
layout.addView(tv1);
  

Если я изменю hash_tag_layout макет на обычный линейный макет, я получу поля!

  <LinearLayout

    android:id="@ id/hash_tag_layout"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

 </LinearLayout>
  

Итак, я пришел к выводу, что макет Android Flow не позволяет мне добавлять поля к представлениям, добавляемым динамически!

Есть идеи, как изменить исходный код или найти способ обойти это? Может быть, добавить прозрачную границу вокруг динамически добавляемых представлений?

Ответ №1:

Просто измените свой LinearLayout.LayoutParams на FlowLayout.LayoutParams .

Вот обсуждение проблемы на GitHub.

Я вижу, что вы задали вопрос 3 года назад, но я только что столкнулся с той же проблемой 🙂