在单个TextView中将字符串显示为多个标记

时间:2016-12-14 07:19:51

标签: java android textview

首先,我知道如何拆分字符串,我的问题不是将它拆分为逗号或空格。

我有一个这样的字符串:

"hello,nice,owesome"

我希望像这样显示:

enter image description here

这是我分隔字符串的方式:

ArrayList<String> list = Arrays.asList(str.split(","));

现在我已经分开了问候语列表,但我不知道如何在一个TextView中将此列表显示为多个标签。

4 个答案:

答案 0 :(得分:1)

像这样创建你的芯片布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background_chip"
    android:gravity="center"
    android:paddingLeft="4dp"
    android:paddingRight="4dp">
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background_chip"
    android:gravity="center"
    android:paddingBottom="6dp"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    android:paddingTop="6dp">

    <TextView
        android:id="@+id/chip_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="6dp"
        android:text="#SoftwereEngineer"
        android:textColor="@android:color/white"
        android:textSize="14sp" />

</LinearLayout>
</LinearLayout>

然后创建一个容器,在其中添加这些芯片

 <LinearLayout
    android:id="@+id/chip_container
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background_chip"
    android:gravity="center"
    android:orientation:"horizontal"
    android:paddingBottom="4dp"
    android:paddingTop="4dp"/>

在你的java文件中将芯片添加到这个容器

LinearLayout linearLayout = view.findViewById(R.id.chip_container);
for(int i = 0; i < list.size ; i++){
final View view = LayoutInflater.from(getActivity()).inflate(R.layout.item_chip, null);
    ((TextView) view.findViewById(R.id.chip_text)).setText(list.get(i));
    linearLayout.addView(view);
}

background_chip.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

     <solid android:color="#cac8c8"/>
     <corners android:radius="20dp"/>
</shape>

答案 1 :(得分:1)

尝试芯片视图。你需要的是here

答案 2 :(得分:1)

只需将其循环为简单的一个:

String temp="";
String tagFront= "<font color='color code you want'>";
String tagBack = "</font>";
for(int i=0;i<list.size();i++){
     temp+=tagFront+list.get(i)+tagBack+" ";
}

YourtextView.setText(Html.fromHtml(temp));

我只是添加这个,文本颜色的顶级代码,对不起 试试这个:

    int count =0;
    List<String> list = new ArrayList<>();
    String str1 = "Hello";
    String str2 = "World";
    String str3 = "what's up?";
    String message = str1 + " " + str2 + " " + str3;

    list.add(str1);
    list.add(str2);
    list.add(str3);

    Spannable spannable = new SpannableString(message);

    for(int i=0;i<list.size();i++)
    {
        spannable.setSpan(new BackgroundColorSpan(Color.BLUE),count, list.get(i).length()+count, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        count = count + list.get(i).length() + 1;
    }

    respas.setText(spannable);

答案 3 :(得分:0)

改为使用HTML标签,如下所示:

enter image description here