Как выбрать конкретную строку в динамическом контенте в Android - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно выбрать конкретную строку в динамическом контенте из базы данных.В каждой строке таблицы несколько строк начинаются с <#c>.Я хочу выбрать и отцентрировать строку, которая начинается с <#c>.Я использую SpannableString.Я могу удалить <#c>, но все тексты становятся по центру.

Моя проблема в том, что я не могу выбрать конкретную линию.В

setSpan (Object what, int start, int end, int flags)

Как я буду писать начальный и конечный символы?

Моя проблема с

int start and  int end

Как я буду использовать spannableString.length () для intstart и int end.

Ниже показано содержимое.

 |<#c>aaaaaaa    |
 |bbbbbbbbbb     |
 |<#c>dddddddd   |
 |cccccccccc     |
 |jjjjjjjjjj     |
 |<#c>ffffffff   |
 |rrrrrrrrr      |
 |ggggggggggg    |

Я пытаюсь ниже;

    TextView textView1 = ((TextView) rootView.findViewById(R.id.text2));
    String text1 = args.getString(ARG_OBJECT2);

    SpannableString spannableString;
    Object standard;
    if (text1.contains("<#c>")) {
        spannableString = new SpannableString(text1.replaceAll("<#c>", ""));
        standard = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
        spannableString.setSpan(standard, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView1.setText(spannableString);

    }

Я проверил следующее:

System.out.println("spannableString.length : " + spannableString.length());

Результат был:

I/System.out: spannableString.length : 1763
I/System.out: spannableString.length : 537
I/System.out: spannableString.length : 931

spannableString.length () принимает все символы в содержимом, а не только те строки, которые содержит <#c>.

Какчтобы получить длину этой конкретной строки, которая содержит <#c>?

xml файл

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ScrlView"
        android:fillViewport="true"
        android:clickable="true"
        android:focusable="true"
        android:scrollbars="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ll"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:width = "0dp"
                android:id="@+id/text2"
                android:textSize="20sp"
                android:textStyle="bold"
                android:textColor="@color/blue"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="2dp"
                android:layout_marginBottom="5dp"/>

        </LinearLayout>

    </ScrollView>

</RelativeLayout>

С помощью приведенного выше кода все динамическое содержимое в строке таблицы становится «центрированным»».Мне нужно отцентрировать те конкретные строки, которые начинаются с <#c>.

1 Ответ

0 голосов
/ 24 сентября 2019

Вы можете попробовать это.

Если ваша строка начинается с <#c>, то если часть будет выполняться, иначе строка будет отображаться как есть в другой части

TextView textView1 = ((TextView) rootView.findViewById(R.id.text2));
String text1 = args.getString(ARG_OBJECT2);

SpannableString spannableString;
Object standard;
if (text1.startsWith("<#c>")) {
  spannableString = new SpannableString(text1.replaceAll("<#c>", ""));
  standard = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
  spannableString.setSpan(standard, 0, spannableString.length(), 
  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  textView1.setText(spannableString);
}else{
   textView1.setText(text1);
}
...