11
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

ScrollViewを持ったAlertDialogを表示する

はじめに

利用規約画面などの文章を見せるためだけの画面を作成する際に、ActivityやFragmentで一画面作るのが正攻法だとは思います。
しかし如何せん面倒なのでもう少しライトに使えるAlearDialogでサクッと作った際の自分向けメモを残しておきます。

実装方法

まずはScrollViewを持つレイアウトファイルを作成します。
今回は要素として複数個のTextViewを持つためLinearLayoutを挟んでいますが、もっと手抜きをするならScrollView直下にTextViewをそのまま入れてしまっても大丈夫です。

view_scrollable_text.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="hoge" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fuga" />
    </LinearLayout>
</ScrollView>

あとは任意のタイミングでAlertDialogを表示するだけです。
このときsetMessageはせず、上記で定義したレイアウトファイルをsetViewします。
※ここではMainActivityのonCreateで表示するものとします。

MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    AlertDialog.Builder(applicationContext)
        .setTitle("title")
        .setView(R.layout.view_scrollable_text)
        .setPositiveButton(
            "OK"
        ) { _, _ ->
            // Do nothing
        }
        .show()
}

使用例

image.png

おわりに

枝葉に時間をかけすぎるのも辛いので適度に手を抜いていきましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
11
Help us understand the problem. What are the problem?