2016-12-14 3 views
-3

Первое, что я знаю, как разделить строку и мой вопрос - это не разделение запятой или пробелом.отображаемая строка как несколько тегов в одном текстовом виде

У меня есть строка, как это,

"hello,nice,owesome" 

, и я хотел показать, как это:

enter image description here

это, как я saperate мои строки:

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

теперь я разделил список приветствий, но я не знаю, как отобразить их l ist как несколько тегов в одном текстовом виде.

+0

Кажется, как вы требуют [что-то вроде этого] (https://github.com/splitwise/TokenAutoComplete)? –

+0

Да, точно так же, как этот, но этот отображается в одном текстовом виде. –

+1

Вы пробовали 'SpannableString' –

ответ

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> 
+0

кажется хорошим решением, позвольте мне сначала попробовать. –

+0

есть одна проблема, когда у меня есть 15 тегов, ее не печатать во второй строке. есть ли способ распечатать только 5 тегов в одной строке, следующие пять во второй строке. –

+0

используйте этот макет вместо LinearLayout https://github.com/mitmel/Locast-Core-Android/blob/master/src/se/fnord/android/layout/PredicateLayout.java –

0

Использование HTML-тегов, а не, как это:

enter image description here

+0

удаляйте свой ответ, сначала вам нужно понять мой вопрос. –

1

Попробуйте с чипами зрения. то, что вам нужно, это here

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); 
+0

не работает, я не получаю цвет фона –

+0

Я просто добавляю новый код для цвета фона, и вам нужно настроить цикл. +1 по длине, чтобы прыгать в пространстве »« добавлено в строки –

+0

, дайте мне знать, если это поможет, не забудьте проголосовать: D –

Смежные вопросы