2015-04-12 2 views
0

Я хочу сделать this вид меню тегов в android. Заполните макет динамически и выровняйтесь по центру.
Как я могу это сделать?Android: Пользовательский FlowLayout

Edited с использованием библиотеки по @Dory

<FlowLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:f="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" 
    f:debugDraw="false" 
    f:weightDefault="0" 
    f:layoutDirection="ltr" 
    android:gravity="center" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="6dip" 
    android:paddingTop="6dip" 
    android:paddingRight="12dip" 
    android:paddingBottom="12dip" 
    android:background="@android:color/black" 
    android:id="@+id/l_flow"/> 



    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="3dp"/> 

FlowLayout рекомендуется в одной кнопки XML-файл находится в другом файле XML. Я надуваю кнопку, затем fLayout.addView (кнопка);

what I get is this Перетяжка сверху и снизу между видами выше, чем ожидалось

+0

https://github.com/blazsolar/FlowLayout – MilapTank

+0

Вместо этого я попытаюсь использовать вертикальную линейную компоновку. –

+0

thanks @milapTank –

ответ

2

, наконец, я сделал это с помощью this библиотеки. Я использовал только класс FlowLayout и attr.xml Мой main.xml выглядит следующим образом:

<com.example.FlowTest.FlowLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/flow" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:background="@android:color/white"/> 

и мой макет пункт выглядит следующим образом:

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:padding="5dp"/> 

И в моем OnCreate метод Activity в:

LayoutInflater mInflater = LayoutInflater.from(this); 
    mFlowLayout = (FlowLayout) findViewById(R.id.flow); 

    String [] names = {"goods", "shops", "cars", "washing machine","blablabla","clothes","books"}; 

    for(int i = 0; i<names.length;i++){ 
     Button b = (Button)mInflater.inflate(R.layout.item_flow,mFlowLayout, false); 
     b.setText(names[i]); 
     mFlowLayout.addView(b); 
    } 
1

Посмотрите here, вы можете использовать this библиотека

Edit:

Существует атрибутов, предоставляемых в котором может установить horizontal и vertical интервал Flow Layout. Ниже образец XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
xmlns:f="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
    <FlowLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    f:horizontalSpacing="5dp" 
    f:verticalSpacing="5dp" /> 
</RelativeLayout>  

Днем кодирования :)

+0

, что библиотека мне помогла, но когда я динамически добавляю представления, это не сработало. Пространство (вертикальное) между представлениями слишком велико, и я не могу ими управлять –

+0

@ user3657472 не могли бы вы подробнее рассказать о своей проблеме? – Dory

+0

@ user3657472 см. В редакции в ответе – Dory

Смежные вопросы