一段时间以来,我一直在尝试为TextView
设置一个大字符串(25k +个字符),但是我一直得到“ STRING_TOO_LARGE”输出。
我在某处读到在运行时设置字符串可能有助于解决该问题,因此我修改了代码,但这似乎无济于事。我还尝试直接在setText()
中设置资源ID,但这也没有做任何事情。
我在Activity
中使用以下方法来显示terms_dialog
:
private void showTermsPopup() {
Dialog termsDialog = new Dialog(this);
termsDialog.setContentView(R.layout.terms_dialog);
termsDialog.getWindow().setLayout(WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
// Cancel the dialog if you touch the background
termsDialog.setCanceledOnTouchOutside(true);
// Add the terms string to the dialog
TextView termsText = termsDialog.findViewById(R.id.termsTextView);
String terms = getResources().getString(R.string.terms);
termsText.setText(terms);
// Show the dialog
termsDialog.show();
}
这是terms_dialog.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:padding="8dp"
android:scrollbarSize="0dp">
<TextView
android:id="@+id/termsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</android.support.constraint.ConstraintLayout>
Marathon REST API documentation是我得到的结果(敏感信息被清空)。
答案 0 :(得分:2)
如@HB链接所指出。给了我,您的APK文件中的字符串不能超过32,767字节(以UTF-8编码)。
所以,我要做的是在名为terms.txt
的资产文件夹中创建一个txt文件,然后将字符串放入其中。然后,使用以下函数将文件转换为字符串:
private String getTermsString() {
StringBuilder termsString = new StringBuilder();
BufferedReader reader;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("terms.txt")));
String str;
while ((str = reader.readLine()) != null) {
termsString.append(str);
}
reader.close();
return termsString.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我刚刚将其分配给了TextView
。
答案 1 :(得分:0)
使用android:ellipsize容纳文本
<TextView
android:id="@+id/termsTextView"
android:ellipsize="middle"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
致谢!
答案 2 :(得分:0)
在这种情况下,您可以像下面的代码那样使用2个TextView,并将您的文本(图元或隐私权政策)分为两部分,并分别加载到这两个TextView中。
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/_20sdp"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/TEXTVIEW_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:linksClickable="true"
android:text="FIRST_HALF_TEXT"
android:textColor="@color/color_text_color"
android:textColorLink="@color/ic_blue_gray_500"
android:textSize="@dimen/_12ssp" />
<TextView
android:id="@+id/TEXTVIEW_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:linksClickable="true"
android:visibility="gone"
android:text="SECOND_HALF_TEXT"
android:textColor="@color/color_text_color"
android:textColorLink="@color/ic_blue_gray_500"
android:textSize="@dimen/_12ssp" />
</LinearLayout>
</ScrollView>