【问题标题】:AutoResize and AutoRearrange TextView in Layout , View same as Chips in "Android L" AndroidAutoResize 和 AutoRearrange TextView in Layout , View 与 "Android L" Android 中的 Chips 相同
【发布时间】:2014-10-16 13:11:38
【问题描述】:

这个问题可能已经被其他成员问过了,但我找不到任何答案。

我的问题是如何根据文本调整文本视图的大小和重新排列。 请看图片

这种视图用于 Gmail 应用中的发件人电子邮件 ID,在“Android L”中称为“芯片”android Chips

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

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

欢迎提出任何建议

【问题讨论】:

  • 这不是单个文本视图,如果此 android 活动比您可以从 DDMS 获取视图层次结构,它可能是自定义或多个文本视图
  • @andruboy 是的,我知道它不是单一的 textview..请阅读我的问题,在我的问题中我提到了 3 个 textview..我知道我们可以通过一些自定义视图来获得它,但百万美元的问题是怎么样?
  • 它类似于来自 android L google.com/design/spec/components/chips-tokens.html 的芯片(或者至少是它们的查看方式)。此外,gmail 应用程序也有类似的东西。也许 AOSP 会有所帮助?
  • @dominik4142 谢谢你的信息..
  • @Swap-IOS-Android 这里是一个讨厌的(但我认为可行的解决方案)stackoverflow.com/questions/2961777/…。动态添加子项,跟踪其大小,如果要添加的子项不适合,添加新行(或以不同方式控制其位置)并放置在下方。

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


【解决方案1】:

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

红色的视图是自定义布局,带有 Imageview - Textview - Imageview

【讨论】:

    【解决方案2】:

    我找到了一个非常好的库,叫做 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 给我有关芯片的提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多