0

リソースに文字列がある場合、その境界矩形を取得するにはどうすればよいですか?

プレーンテキストの場合、Paint.getTextBounds()を使用できますが、これは改行と属性設定を含むリソースからの文字列です。

<string name="foobar"><small>Foo</small>\nBar</string>

つまり、そのような文字列を表示するカスタムビューを実装していて、ビューのサイズを計算したいと思います。

詳細:基本的に、テキストに合わせてサイズを調整するのではなく、使用可能なスペースに合わせてフォントサイズを調整するTextViewのバリアントを実装しています。

4

2 に答える 2

1

カスタムビューにhtmlを表示したいとします。はっきりさせますか?

これをすべて独自のコードで実装したい場合。とても大きな作品です。TextViewを拡張し、いくつかのメソッドをオーバーライドするのが最善の選択ですが、独自のクラスを作成することを主張する場合でも、いくつかのシステムクラスからヘルプを得ることができます。

htmlの表示と測定は、TextViewのコードに従う必要があります。これは、TextView.onDraw()とTextView.onMeasure()にあります。ここでは、htmlを測定する手順について説明します。

  1. HTMLの解析。Html.fromHtml()スパンテキストを取得するために使用します。
  2. スパンテキストでStaticLayoutまたはを作成します。DynamicLayout
  3. Layout.getLineWidth()およびを使用しLayout.getHeight()てテキストを測定します。
于 2012-12-18T06:32:35.430 に答える
0

これを試して :

String.xml

       <string name="foobar"><small>Foo</small>\nBar</string>

活動中

       final TextView mytext = (TextView) findViewById(R.id.my_textView);
       mytext.setText(getString(R.string.foobar));

       Button btn_getTextBounds = (Button) findViewById(R.id.ok);
       btn_getTextBounds.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
               Rect rectf = new Rect();
               mytext.getLocalVisibleRect(rectf);

               Log.d("WIDTH        :",String.valueOf(rectf.width()));
               Log.d("HEIGHT       :",String.valueOf(rectf.height()));
               Log.d("left         :",String.valueOf(rectf.left));
               Log.d("right        :",String.valueOf(rectf.right));
               Log.d("top          :",String.valueOf(rectf.top));
               Log.d("bottom       :",String.valueOf(rectf.bottom));
           }
       });

表示画面領域のTextViewで使用される必要な属性が表示されます。

お役に立てば幸いです。

ありがとう。

于 2012-12-18T05:56:29.820 に答える