布局中的AutoResize和AutoRearrange TextView,与“Android L”Android中的芯片相同

时间:2014-10-16 13:11:39

标签: android android-layout textview android-custom-view android-5.0-lollipop

可能是其他成员已经提出过这个问题,但我没有找到任何答案。

我的问题是如何根据文字调整文本视图的大小和重新排列。 请看一下图片 enter image description here

此类视图在Gmail应用中用于发件人电子邮件ID,在“Android L”中称为“筹码”android Chips

这里我想在滑动菜单中显示3个textview。 这三个textview是内部相对布局。 想法是如果第一个textview文本很长(“swift”textview类似于“microsoft office”而不是“objective c”textview将显示在第一个textview“Microsoft office”下面,如果第一个和第二个可以共享第一行空间而不是它将是一个接一个地展示。)

我尝试过AutoResizeTextView,但它只调整字体大小,并根据宽度设置textview高度,因此在UI方面看起来不太好。

感谢任何建议

2 个答案:

答案 0 :(得分:1)

试试这个https://github.com/RanaRanvijaySingh/AdjustableLayout。我所做的是创建一个新的布局,扩展线性布局并覆盖 addView() removeView()功能。此布局允许您以水平方向添加自己的视图(布局)。视图会一直添加,直到它超出您为布局定义的宽度,然后视图会自动添加到下一行。

红色视图是使用Imageview的自定义布局 - Textview - Imageview

enter image description here

答案 1 :(得分:0)

我发现了一个名为FlowLayout的非常好的库,可以处理所有事情。 FlowLayout link

进入我的相对布局

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

chipsBoxLayout = (FlowLayout)keyword_layout.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);

        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("Java");
        arrayList.add("Objective c");
        arrayList.add("Swift");
        for(int i = 0; i<3; i++)
        {
          TextView t = new TextView(context);
          t.setLayoutParams(params);
          t.setPadding(5, 5, 5, 5);
          t.setText(arrayList.get(i));
          t.setTextColor(Color.BLACK);
          t.setBackgroundColor(Color.WHITE);
          chipsBoxLayout.addView(t);
        }

并且它有效,谢谢@ dominik4142给我​​提示芯片。