🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1404閲覧

TableRow内セルのWidth取得方法について

adk

総合スコア12

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/09/17 06:53

編集2019/09/18 01:33

現状、Android StudioのKotlinでTableLayout内にTableRow、さらにそのTableRowの中に複数のTextViewを入れ、
エクセルのシートのようにしたDBを作っています。

この時、各TextView内に文字が入力されたら、それに応じて変動する各TextViewのWidthを取得したいのですが
下記コードではすべて0という値が返ってきてうまくいきません。

val Body = findViewById(R.id.tl_Body) as TableLayout
if (Body.childCount > 0) {
val Bodyrow = Body.getChildAt(0) as TableRow//0行目(最初の行を得る// )
for (cellnum in 0 until Bodyrow.childCount) {
val cell = Bodyrow.getChildAt(cellnum) as TextView
val params = cell.layoutParams as TableRow.LayoutParams  //セルのパラメータを得る。
val text = cell.text //セルの中身に値が入っているかをデバッグ時に確認するための行。中身は入っている。
val cellWidth = if (params.span == 1) cell.width else 0  //params.spanは1なのでcell.widthの値が返ってくる。だがその中身が0
}
}

cell.widthの部分が悪いと思われるのですが、代わりにどのような関数でwidthを取得すれば正しい値が取れるのかがわかりません。

お手数ですがご教授をお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakajika

2019/09/18 03:50

この処理はどのタイミングで呼んでいるものですか?レイアウトが完了するまではViewのwidthは0が返されるので、自分でwidthの計測を行わなければなりません。
adk

2019/09/18 04:42 編集

kakajika様 ご返信ありがとうございます。 スピナーのonItemSelected内で処理を呼んでいます(OnCreate内でスピナーのリスナーは定義しています) スピナーの中身はDBの絞り込み条件となっており、スピナーの中身を変更すると DB内に情報が代入されます。情報の代入直後に上記のWidth取得関数を入れています。 スピナーの中身が変更されるごとにWidthを取得したいのですが、 ひょっとするとonItemSelected内ではレイアウトが完了しないのでしょうか。 それとも、width以外に幅を計測する関数にしたほうが良いのでしょうか (先ほどgetMeasuredWidth()を試してみましたがこれもダメでした)
guest

回答1

0

自己解決

private fun getWidthOfView(contentview: View): Int {
contentview.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED)
//contentview.getMeasuredWidth();
return contentview.measuredWidth
}
というWidthを取るための関数を定義し、widthをgetWidthOfView(cell)と取った。

この関数は
https://stackoverflow.com/questions/8170915/getheight-returns-0-for-all-android-ui-objects
のコメント12に提示された関数をもとに作成した。

投稿2019/09/18 04:54

adk

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問