我一直在创建Chips
之类的Gmail和大多数社交Android应用程序的地址。
我一直在追加LinearLayout
中的值,只要它小于设备宽度就可以正常工作。一旦它的长度超过设备宽度,它就会混乱。
如何在每个环境中保留相同的行为?
预期行为:
我得到了什么
代码段:
<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);
}
答案 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);
}
答案 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)
答案 3 :(得分:0)
有Chips
被实现为材料设计组件:
答案 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>