java - How to select a particular line in dynamic content in android
问题描述
I need to select a particular line within dynamic content from database. In every row of a table, few lines start with <#c>. I want to select and center the line which starts with <#c>. I am using SpannableString. I am able to remove <#c> but all texts become centered.
My problem is I am unable to select the paricular line. In the
setSpan (Object what, int start, int end, int flags)
How will I write start and end characters?
My problem is with
int start and int end
How will I use spannableString.length() for int start and int end.
Below is like the content.
|<#c>aaaaaaa |
|bbbbbbbbbb |
|<#c>dddddddd |
|cccccccccc |
|jjjjjjjjjj |
|<#c>ffffffff |
|rrrrrrrrr |
|ggggggggggg |
I am trying below;
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);
}
I checked with the following:
System.out.println("spannableString.length : " + spannableString.length());
Result was :
I/System.out: spannableString.length : 1763
I/System.out: spannableString.length : 537
I/System.out: spannableString.length : 931
spannableString.length() is taking all the characters in the content not taking only the particular lines where <#c> contains.
How to get the length of that particular line which contains <#c>?
xml file
<?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>
With the above code All the dynamic contents in the row of the table are becoming "centered". I need to center that particular lines which start with <#c>.
解决方案
你可以试试这个。
如果您的字符串以 <#c> 开头,那么 if 部分将执行 else 字符串将在 else 部分中按原样显示
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);
}
推荐阅读
- botframework - 如何将自定义身份验证服务器与机器人框架一起使用?
- r - tidyr Pivot-wider:重复问题
- polybase - POLYBASE ODBC 获取未实现的可选功能
- mysql - MySQL - 让用户在日期之间的位置
- excel - 带有变量或块变量的 VBA 对象未设置错误,即使已设置
- c++ - 编译器对数组声明大小的评估。什么时候发生?
- asp.net-mvc - 在 EF 上使用 Include 时,Get 方法返回 Null
- swift - 如何自定义 Realm 平台的 SyncUser?
- ios - SWIFT:应用程序是为 RTL 语言设计的,但是当我在基于 RTL 的语言上运行时,它会镜像
- c++ - 使用模板重载函数