たまに使うので忘れないようにメモ
どういうこと?(使用例)
- 3行以上で省略されるTextViewの下部に、全文表示ボタンをつけたい
- 省略されない場合はボタンを非表示にしたい
- そのため、TextViewが表示されたタイミングで省略可能判定を行いたい。
結論
- ViewにRunnableを引数に持つメソッドが生えているので使える
- View.post(Runnable)
- View.postDelayed(Runnable, long)
- 無論UIスレッドの操作となるので多用は禁物。そもそもこういったものを使う仕様にしたくない。
- (参考) https://developer.android.com/guide/components/processes-and-threads?hl=ja#WorkerThreads
コード例
(DataBindingを使います)
// View#post()を使います
binding.textView.post {
binding.textView.layout?.let { layout ->
val ellipsisCount = layout.getEllipsisCount(MAX_LINES - 1)
if (ellipsisCount == 0) {
binding.moreButton.visibility = View.GONE
} else {
binding.moreButton.visibility = View.VISIBLE
}
}