45

指定された中心のx座標とy座標にtextViewを配置するのに問題があります。まず、textViewにテキストを設定し、 このリンクからビューの幅と高さでビューを移動しようとしました。

しかし、うまくいかないので、別のことを試してみたいと思います。指定したテキストがtextViewで取るサイズを取得するメソッドがあるかどうか知りたいですか?つまり、textとtextSizeを知っていますが、textViewが取る幅と高さを取得するにはどうすればよいですか?

(NSString)sizeWithFont;iPhone開発者を知っている人のための方法のようなもの。

4

4 に答える 4

97
Rect bounds = new Rect();

textView.getPaint().getTextBounds(textView.getText().toString(), 0, textView.getText().length(), bounds);

bounds.width()テキストビューのテキストの正確な幅が表示されます。

于 2014-05-28T22:41:53.967 に答える
68

テキストビューがテレビと呼ばれる場合

tv.setText("bla");
tv.measure(0, 0);       //must call measure!
tv.getMeasuredHeight(); //get height
tv.getMeasuredWidth();  //get width

これに関する詳細(更新):ビューの幅/高さを取得する方法

于 2011-07-18T14:21:14.773 に答える
14

何らかの理由で、Midverse Engineerのソリューションでは、常に正しい結果が得られるとは限りません(少なくとも一部のAndroidバージョンでは)。Sherif elKhatibのソリューションは機能しますが、MeasuredWidthとHeightを変更するという副作用があります。これにより、textViewの位置が正しくなくなる可能性があります。

私の解決策:

width = textView.getPaint().measureText(text);
metrics = textView.getPaint().getFontMetrics();
height = metrics.bottom - metrics.top;
于 2016-04-21T13:44:32.900 に答える
0

複数行のテキストと異なるパディングがある場合、TextView内部Paingクラスの使用はそれほど熱くありません。ですから、車輪の再発明を試みるのはやめましょう。を呼び出した後の使用getMeasuredHeightとメソッド。投稿内で新しい値を取得することを忘れないでください。そうしないと、ほとんどの場合、間違った結果が得られます。getMeasuredWidthmeasure(UNSPECIFIED, UNSPECIFIED)

tv.setText(state.s);
tv.measure(UNSPECIFIED,UNSPECIFIED);
tv.post(new Runnable() {
    @Override
    public void run() {
       Log.d("tv","Height = "+tv.getMeasuredHeight());
       Log.d("tv","Width  = "+tv.getMeasuredWidth());
    }
});
于 2019-10-16T15:33:38.773 に答える