Android以对话框的形式制作简易数字软键盘,点击按钮显示键盘,输入完成点击键盘外的地方关闭键盘并将输入数字显示于文本,使用kotlin语言用最新android studio软件编写,请给出具体步骤和详细代码
时间: 2023-06-14 07:03:30 浏览: 227
步骤如下:
1. 在 activity_main.xml 布局文件中添加一个按钮和一个文本框:
```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_show_keyboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Keyboard"/>
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_show_keyboard"
android:layout_margin="16dp"
android:hint="Enter number here"/>
</RelativeLayout>
```
2. 创建一个自定义的对话框布局文件 dialog_keyboard.xml,用于显示数字键盘:
```
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboard_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="vertical">
<GridLayout
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="3"
android:rowCount="4"
android:padding="16dp">
<Button
android:id="@+id/btn_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="1"/>
<Button
android:id="@+id/btn_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="2"/>
<Button
android:id="@+id/btn_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="3"/>
<Button
android:id="@+id/btn_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="4"/>
<Button
android:id="@+id/btn_5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="5"/>
<Button
android:id="@+id/btn_6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="6"/>
<Button
android:id="@+id/btn_7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="7"/>
<Button
android:id="@+id/btn_8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="8"/>
<Button
android:id="@+id/btn_9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="9"/>
<Button
android:id="@+id/btn_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="C"/>
<Button
android:id="@+id/btn_0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="0"/>
<Button
android:id="@+id/btn_ok"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="OK"/>
</GridLayout>
</LinearLayout>
```
3. 在 MainActivity.kt 中实现逻辑代码:
```
class MainActivity : AppCompatActivity() {
private lateinit var btnShowKeyboard: Button
private lateinit var editText: EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化控件
btnShowKeyboard = findViewById(R.id.btn_show_keyboard)
editText = findViewById(R.id.edit_text)
// 绑定点击事件
btnShowKeyboard.setOnClickListener { showKeyboardDialog() }
}
// 显示数字键盘对话框
private fun showKeyboardDialog() {
val dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_keyboard, null)
// 绑定数字键盘按钮的点击事件
val btn1 = dialogView.findViewById<Button>(R.id.btn_1)
val btn2 = dialogView.findViewById<Button>(R.id.btn_2)
val btn3 = dialogView.findViewById<Button>(R.id.btn_3)
val btn4 = dialogView.findViewById<Button>(R.id.btn_4)
val btn5 = dialogView.findViewById<Button>(R.id.btn_5)
val btn6 = dialogView.findViewById<Button>(R.id.btn_6)
val btn7 = dialogView.findViewById<Button>(R.id.btn_7)
val btn8 = dialogView.findViewById<Button>(R.id.btn_8)
val btn9 = dialogView.findViewById<Button>(R.id.btn_9)
val btnClear = dialogView.findViewById<Button>(R.id.btn_clear)
val btn0 = dialogView.findViewById<Button>(R.id.btn_0)
val btnOk = dialogView.findViewById<Button>(R.id.btn_ok)
btn1.setOnClickListener { editText.append("1") }
btn2.setOnClickListener { editText.append("2") }
btn3.setOnClickListener { editText.append("3") }
btn4.setOnClickListener { editText.append("4") }
btn5.setOnClickListener { editText.append("5") }
btn6.setOnClickListener { editText.append("6") }
btn7.setOnClickListener { editText.append("7") }
btn8.setOnClickListener { editText.append("8") }
btn9.setOnClickListener { editText.append("9") }
btnClear.setOnClickListener { editText.setText("") }
btn0.setOnClickListener { editText.append("0") }
btnOk.setOnClickListener { dismissKeyboardDialog() }
// 创建对话框
val dialog = AlertDialog.Builder(this)
.setView(dialogView)
.create()
// 显示对话框
dialog.show()
// 设置对话框的宽度和高度
val width = resources.displayMetrics.widthPixels * 0.8
val height = resources.displayMetrics.heightPixels * 0.4
dialog.window?.setLayout(width.toInt(), height.toInt())
// 点击对话框外部关闭对话框
dialog.setCanceledOnTouchOutside(true)
}
// 关闭数字键盘对话框
private fun dismissKeyboardDialog() {
val dialog = supportFragmentManager.findFragmentByTag("dialog")
if (dialog != null) {
(dialog as DialogFragment).dismiss()
}
}
}
```
代码解析:
1. 在 onCreate() 方法中初始化按钮和文本框,绑定按钮的点击事件。
2. 在 showKeyboardDialog() 方法中创建自定义对话框,绑定数字键盘按钮的点击事件,并设置对话框的宽度和高度。最后显示对话框。
3. 在 dismissKeyboardDialog() 方法中关闭数字键盘对话框。
4. 在 MainActivity 类中声明了两个私有成员变量 btnShowKeyboard 和 editText,这两个变量的类型分别是 Button 和 EditText。在 onCreate() 方法中通过 findViewById() 方法获取到这两个控件,并将它们赋值给对应的变量。
5. 在 showKeyboardDialog() 方法中,首先使用 LayoutInflater.from(this) 方法获取到 LayoutInflater 对象,然后使用 inflate() 方法将 dialog_keyboard.xml 布局文件解析为一个 View 实例。
6. 在解析出来的 View 实例中,获取到所有的数字键盘按钮,并对它们绑定对应的点击事件。
7. 最后,在 AlertDialog.Builder(this) 中传入 dialogView,创建一个 AlertDialog 对象。并且通过调用 setCanceledOnTouchOutside(true) 方法,使得用户点击对话框外部时自动关闭对话框。
8. 在 dismissKeyboardDialog() 方法中,通过 supportFragmentManager.findFragmentByTag() 方法获取到数字键盘对话框的 DialogFragment 实例,并调用 dismiss() 方法关闭对话框。
阅读全文