0

Android でのレイアウトのパフォーマンスに関しては、どのルートに進むべきかを決めるのに問題があります。API からテキストを入力する必要がある非常に大きなレイアウトがあります。ここでの問題は、キャプションを太字にする必要があることです。単純化すると、このようになります。

キャプション 1: Lorem ipsum...
キャプション 2: Lorem ipsum...
キャプション 3: Lorem ipsum...
etc..

私が見たとき、私には2つの選択肢があります。これを達成するために2つのビューに行くか、次のようなものです

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Caption 1"
                android:textStyle="bold" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Lorem ipsum..." />

         </LinearLayout>

または私は1つのTextViewに行き、使用します

Html.fromHtml("<b>Caption 1</b> Lorem ipsum")

2 つのアプローチのパフォーマンスに関する数値を誰かが持っているのではないかと思っています。私が表示しなければならない大きなビューを考えると、それを知ることは素晴らしいことです. オプション 2 の方が優れているように感じますが、その証拠はなく、両方をテストする時間もありません。

乾杯!

編集:APIをある程度制御できることを忘れていたので、HTMLをAPIに埋め込んで文字列を次の形式で送り返すことができます

"<b>Caption</b> Lorem ipsum...". 

最初の 2 つの回答から判断すると、最初のアプローチは窓の外です。

4

2 に答える 2

1

より高速なパフォーマンスを本当に求めている場合は、SpannableStringBuilder代わりにを使用することをお勧めしますHtml.fromHtml

Html.fromHtml は実際SpannableStringBuilderにその実装で使用しますが、fromHtml も実際に html 文字列を解析するのに時間がかかることを考えると (さらに、テキストを html タグでラップする必要がある時間をこれに追加します)、それよりも遅くなります。SpannableStringBuilder

そして、これらのバリアントはいずれも、xml からビューを作成して維持するよりも高速です。

SpannableStringBuilderPS私はあなたが始めるための小さな記事さえ持っています: http://illusionsandroid.blogspot.com/2011/05/modifying-coloring-scaling-part-of-text.html

于 2012-06-01T15:06:02.757 に答える
0

私は<3 Regexなので、次のような方法が好きです:

String myCaption = "Caption 1: Lorem Ipsum...";
TextView tv = (TextView)findViewById(R.id.mytextview);

//Set a Regex pattern to find instances of "Caption X:" 
//where X is any integer.
Pattern pattern = Pattern.compile("Caption [0-9]+:");

//Get a matcher for the caption string and find the first instance
Matcher matcher = pattern.matcher(myCaption);
matcher.find();

//These are the start and ending indexes of the discovered pattern
int startIndex = matcher.start();
int endIndex = matcher.end();

//Sets a BOLD span on the
Spannable textSpan = new Spannable(myCaption);
textSpan.setSpan(new StyleSpan(Typeface.BOLD), 
    startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//Set this Spannable as the TextView text
tv.setText(textSpan);

私はこれをテストしていませんが、たとえこれがうまくいかなくても、このアイデアはあなたを動かすはずです。基本的に、Regex を使用して文字列の "Caption X:" 部分を見つけ、開始インデックスと終了インデックスを取得し、テキストの特定のセクションに Bold スパンを設定します。

于 2012-06-01T15:15:22.987 に答える