在LinearLayout中添加TextView,就像与Gmail地址建议一样的芯片

时间:2014-04-22 10:18:33

标签: android android-layout

我一直在创建Chips之类的Gmail和大多数社交Android应用程序的地址。

我一直在追加LinearLayout中的值,只要它小于设备宽度就可以正常工作。一旦它的长度超过设备宽度,它就会混乱。

如何在每个环境中保留相同的行为?

预期行为:

Expected Behaviour

我得到了什么

enter image description here enter image description here

代码段:

<LinearLayout
        android:id="@+id/chipsBoxLayout" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        >
<!--Layout to add Chips like Gmail application-->
</LinearLayout>

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,1);
params.setMargins(5, 0, 5, 0);

Iterator<Contact> iterContacts = contacts.iterator();
while(iterContacts.hasNext()) 
{   
  Contact contact = iterContacts.next();
  TextView t = new TextView(MainActivity.this);
  t.setLayoutParams(params);
  t.setPadding(5, 5, 5, 5);
  t.setText(contact.getContactName());
  t.setTextColor(Color.WHITE);
  t.setBackgroundColor(Color.BLUE);
  chipsBoxLayout.addView(t);
}

6 个答案:

答案 0 :(得分:14)

根据Rethinavel Pillai,

FlowLayout在添加视图时可以正常工作,如果它添加到FlowLayout内,我将自行适应。

代码段:

<com.FlowLayout
            android:id="@+id/chips_box_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="start"
             >
</com.FlowLayout>

FlowLayout chipsBoxLayout;
chipsBoxLayout = (FlowLayout)findViewById(R.id.chips_box_layout);


FlowLayout.LayoutParams params = new FlowLayout.LayoutParams(FlowLayout.LayoutParams.WRAP_CONTENT, FlowLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(5, 5, 5, 5);

Iterator<Contact> iterContacts = contacts.iterator();
while(iterContacts.hasNext()) 
{   
  Contact contact = iterContacts.next();
  TextView t = new TextView(MainActivity.this);
  t.setLayoutParams(params);
  t.setPadding(5, 5, 5, 5);
  t.setText(contact.getContactName());
  t.setTextColor(Color.WHITE);
  t.setBackgroundColor(Color.BLUE);
  chipsBoxLayout.addView(t);
}

enter image description here

答案 1 :(得分:3)

您使用的是LinearLayout,但Google不会使用它。线性布局不会破坏线条并将所有内容输出到一条线。 gmail中的芯片在普通的textView中工作。它使用spannable字符串输出图像而不是文本,背景颜色或其他。 看这里http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/com/android/ex/chips/RecipientEditTextView.java#RecipientEditTextView 有代码如何工作。

答案 2 :(得分:2)

FlowLayout可以使用,找到下面给出的URL,

https://github.com/ApmeM/android-flowlayout

@Rethinavel Pillai是对的

答案 3 :(得分:0)

Chips被实现为材料设计组件

enter image description here

定义: material.io/design/components/chips.html#input-chips

Android库: material.io/develop/android/components/chip

答案 4 :(得分:-1)

我认为问题在于您使用

android:layout_width="match_parent"

你如何使用重量总和而不是......?

答案 5 :(得分:-2)

试试看: 使用重量属性: 我在我的应用程序中使用它并且工作正常,它也非常有用并节省时间。

<LinearLayout
    android:id="@+id/lLListImages"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:orientation="horizontal"
    android:weightSum="1" >

    <Button
        android:id="@+id/button1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.30"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.20"
        android:text="Button" />

    <Button
         android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.35"
        android:text="Button" />

    <Button
         android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.15"
        android:text="Button" />
</LinearLayout>