【教えて下さい】TextViewの幅の取得方法について

1,591 views
Skip to first unread message

onigu...@gmail.com

unread,
Sep 25, 2013, 10:30:10 PM9/25/13
to android-g...@googlegroups.com
いつもお世話になっております。

今回も皆さんの助言をいただければ幸いです。
よろしくお願い致します。

●件名のとおり、TextViewの幅の取得方法が分からず困っております。
取得したい幅は、文字列すべてを含んだ幅です。

例えば、幅1024[px]のLCDに、TextView(1行表示)を定義し、
TextView.setText(文字列)にてLCDに入りきらないような文字列を入力したとします。

この状態の、実際のTextVIewのサイズ(LCDサイズをオーバーしている分を加味)が取得したいのです。
(説明が下手で表現がおかしい所があると思いますが、ご了承下さい)

予想されるサイズは1024を越える値になると思うのですが、
単純にView.getWidth()では、LayoutされているTextViewのサイズが取得され、私が欲しい値とは異なっております。

上記のような状態での幅の取得方法について、ご教授願います。
よろしくお願い致します。

Makoto Yamazaki

unread,
Sep 25, 2013, 11:30:01 PM9/25/13
to android-g...@googlegroups.com
zaki です。

何をしたいのかにもよりますが、"実際のTextVIewのサイズ" というものは存在しないので
自分で計算してあげる必要があります。

セットされているテキストの幅と左右のパディングを加えたものが欲しい値になると思いますが、
パディングは TextView#getCompoundPaddingLeft() や TextView#getCompoundPaddingRight() で
わかりますし、テキストの幅は TextView#getPaint() でTextView が使用している Paint オブジェクトを
取得して Layout.getDesiredWidth(CharSequence, Paint) を使用すれば取得できます。

TextView がどのように幅を決めているかの詳細が知りたい場合は TextView#onMeasure(...) 
のソースを読むといいです。
これを見ると、本当に正確に実装するには、top や bottom にセットしたDrawable の幅のほうがテキスト幅より
大きいというような場合の考慮が上記の説明では省略されていることなどがわかります。



2013/9/26 <onigu...@gmail.com>

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
YAMAZAKI Makoto

onigu...@gmail.com

unread,
Sep 26, 2013, 12:40:57 AM9/26/13
to android-g...@googlegroups.com
zaki様

早速のご投稿ありがとうございます。

ご指示頂いた手法で目的のサイズを取得することができました。
感謝致します。

元々のしたいことは、テキストのマーキー表示です。

当初は、
TextView.setEllipsize(TruncateAt.MARQUEE);でマーキー表示してみました。
しかし、移動する速度が設定できませんでした。(設定方法が分からりませんでした)

そこで、独自のViewを定義してマーキーを実装しているところでテキストのサイズが必要になったのです。

余談ではありますが、
TextView.setEllipsize(TruncateAt.MARQUEE);でマーキー表示する際、
移動速度を自由に設定する方法があるのでしたら、こちらも教えていただければ幸いです。
Reply all
Reply to author
Forward
0 new messages