私のアプリケーションは、テキストファイルのアセットから大量のデータを読み込み、TextViewに表示します。 (最大は〜450kです。)ファイルをSpannableStringBufferに1行ずつ読み込みます(セクション名などのメタデータがいくつかあります)。このアプローチは、2年間で私が市場にアプリを持っていた(7kを超えるアクティブデバイスのインストール)苦情なしで働いていたので、コードが合理的に正しいことを知っています。SpannableStringBufferは9,999文字に制限されていますか?
しかし、LG Lucid(LGE VS840 4G、Android 2.3.6)のユーザーから、テキストが切り捨てられているという最新の報告がありました。ログエントリから、私のアプリは、バッファに9,999文字しか持っていません。これはSpannableStringBufferの既知の問題ですか?大きなSpannableバッファを構築するための他の推奨される方法はありますか?推奨される回避策
SpannableStringBuilderに追加するたびに更新される予定の別の長さを維持する以外に、エラーを検出する良い方法はありません。追加インターフェイスはエラーではなくオブジェクトを返します。データを読み込み
私のコードは次のとおりです。
currentOffset = 0;
try {
InputStream is = getAssets().open(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
ssb.clear();
jumpOffsets.clear();
ArrayList<String> sectionNamesList = new ArrayList<String>();
sectionOffsets.clear();
int offset = 0;
while (br.ready()) {
String s = br.readLine();
if (s.length() == 0) {
ssb.append("\n");
++offset;
} else if (s.charAt(0) == '\013') {
jumpOffsets.add(offset);
String name = s.substring(1);
if (name.length() > 0) {
sectionNamesList.add(name);
sectionOffsets.add(offset);
if (showSectionNames) {
ssb.append(name);
ssb.append("\n");
offset += name.length() + 1;
}
}
} else {
if (!showNikud) {
// Remove nikud based on Unicode character ranges
// Does not replace combined characters (\ufb20-\ufb4f)
// See
// http://en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphabet
s = s. replaceAll("[\u05b0-\u05c7]", "");
}
if (!showMeteg) {
// Remove meteg based on Unicode character ranges
// Does not replace combined characters (\ufb20-\ufb4f)
// See
// http://en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphabet
s = s.replaceAll("\u05bd", "");
}
ssb.append(s);
ssb.append("\n");
offset += s.length() + 1;
}
}
sectionNames = sectionNamesList.toArray(new String[0]);
currentFilename = filename;
Log.v(TAG, "ssb.length()=" + ssb.length() +
", daavenText.getText().length()=" +
daavenText.getText().length() +
", showNikud=" + showNikud +
", showMeteg=" + showMeteg +
", showSectionNames=" + showSectionNames +
", currentFilename=" + currentFilename
);
インターフェース上で見た後、私はInputFilter秒でshowNikudとshowMetegケースを交換する予定。
'ListView'(' ScrollView'内)に 'TextView'をたくさん作成すると、画面からスクロールした' TextView'sは自動的に再フォーマットされますか? ''WebView'sは残念なことにオプションではありませんが、私は音声のヘブライ語のテキストを表示し、Androidはそれを後方に表示します(バグは修正されていますが、ICSのみです)。 – shmuelp
@shmuelp: "自動的にrecyled?" - うまく書かれた 'Adapter'、はい。 – CommonsWare