ダイアログを使って、入力を行う方法
レイアウトを使用する方法もありますが、まずは使わずに行う単純なパターン
こんなダイアログでます
画面レイアウト
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btnOpenDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnOpenDialog" />
</android.support.constraint.ConstraintLayout>
ボタン:おしたらダイアログを表示させる
TextView:ダイアログで入力したデータを表示させる
コード
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ボタン押されたらダイアログ表示
btnOpenDialog.setOnClickListener {
val dialog : ClsTextInputDialog = ClsTextInputDialog(this)
// ダイアログ用にクラスを作っているのでそこに設定している
dialog.dialogTitle = "テキスト入力"
dialog.dialogMessage = "文字を入力してください!"
dialog.dialogTextData = textView.text.toString()
dialog.onOkClickListener = DialogInterface.OnClickListener { _,_->
// OK選択時の処理
val textData = dialog.dialogTextData
textView.text = textData
}
dialog.isCancelButton = true
// ダイアログ表示
dialog.openDialog(supportFragmentManager)
}
}
}
ボタンを押されたら、ダイアログの表示、動作を設定して表示している
ClsTextInputDialog.kt
ダイアログ用のクラス
DialogFragment にインタフェースを追加している
class ClsTextInputDialog( mc:Context) {
// テキスト入力用のダイアログ
private val mDialog = MyDialog()
init {
mDialog.mEdit = EditText(mc)
}
// タイトル
var dialogTitle : String
get() {
return mDialog.mTitle
}
set(value) {
mDialog.mTitle = value
}
// メッセージ
var dialogMessage : String
get() {
return mDialog.mMsg
}
set(value) {
mDialog.mMsg = value
}
// 入力データ
var dialogTextData : String
get() {
if ( null != mDialog.mEdit) {
mDialog.mTextData = mDialog.mEdit?.text.toString()
}
return mDialog.mTextData
}
set(value) {
mDialog.mTextData = value
}
// OK時の処理
var onOkClickListener : DialogInterface.OnClickListener
get() {
// 実際には使用しない
return DialogInterface.OnClickListener {_, _ -> }
}
set(value) {
mDialog.isOkButton = true
mDialog.onOkClickListener = value
}
// キャンセルボタンの使用
var isCancelButton : Boolean
get() {
return mDialog.isCancelButton
}
set(value) {
mDialog.isCancelButton = value
}
// キャンセル時の処理
var onCancelClickListener : DialogInterface.OnClickListener
get() {
// 実際には使用しない
return DialogInterface.OnClickListener {_, _ -> }
}
set(value) {
mDialog.isCancelButton = true
mDialog.onCancelClickListener = value
}
// ダイアログの表示
fun openDialog(manager: FragmentManager) {
mDialog.show( manager,"dialog")
}
//
class MyDialog : DialogFragment() {
// パラメータ未設定時の基本状態
var mTitle : String = ""
var mMsg : String = ""
var mEdit : EditText? = null
var mTextData : String = ""
var isOkButton : Boolean = false
var onOkClickListener : DialogInterface.OnClickListener = DialogInterface.OnClickListener {_, _ -> }
var isCancelButton : Boolean = false
var onCancelClickListener : DialogInterface.OnClickListener = DialogInterface.OnClickListener { _, _ -> }
//
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// 実際は AlertDialog を使用
val dialogBuilder = AlertDialog.Builder(activity!!)
// ここで、設定
if (mTitle.isNotEmpty()) {
dialogBuilder.setTitle(mTitle)
} else {
dialogBuilder.setTitle("dialog")
}
if (mMsg.isNotEmpty()) {
dialogBuilder.setMessage(mMsg)
}
if (mTextData.isNotEmpty()) {
mEdit?.setText( mTextData )
dialogBuilder.setView(mEdit)
}
if (isOkButton) {
dialogBuilder.setPositiveButton(getString(android.R.string.ok), onOkClickListener)
}
if (isCancelButton) {
dialogBuilder.setNegativeButton(getString(android.R.string.cancel), onCancelClickListener)
}
return dialogBuilder.create()
}
// onPause でダイアログを閉じている
override fun onPause() {
super.onPause()
dismiss()
}
}
}
ダイアログへの設定があればその値を使用して、なければデフォルトで表示します
コードはGitに置いてます