Directorio de artículos
0 Prefacio
El tema de investigación del autor involucra el desarrollo de software Android.Durante el proceso de desarrollo, descubrí que el cuadro de diálogo de mensaje de visualización normal generalmente se puede realizar llamando al paquete de Android, pero no se puede realizar fácilmente a través de la interacción de entrada del cuadro de texto. Después de consultar la información de la red, se realiza la función del cuadro de diálogo de texto de entrada personalizado.Este artículo registra el proceso de realización del cuadro de diálogo de texto de entrada personalizado.
1. Crea un proyecto de muestra
(1) Crear un proyecto TestInputDialog
(2) Generar el programa principal
(3) Nuevo diseño de cuadro de diálogo de entrada de texto (.xml) y archivos de función (.java)
2. Diseño del cuadro de diálogo de texto de entrada y diseño de la función
(1) Cree un nuevo archivo de forma (myshape.xml)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置圆角-->
<corners android:radius="0dp" />
<!--设置边框-->
<stroke
android:width="0.1dp"
android:color="#d7d7db" />
<!--设置填充色-->
<solid android:color="#f8f8f8" />
</shape>
(2) Agregar estilo de diálogo (themes.xml)
<style name="CustomInputStyle" parent="@android:style/Theme.Dialog">
<!--这个说明提示框是否有边框-->
<item name="android:windowFrame">@null</item>
<!--这个说明提示框是否是浮动的-->
<item name="android:windowIsFloating">true</item>
<!--这个说明提示框是滞是透明的-->
<item name="android:windowIsTranslucent">false</item>
<!--这个说明提示框是否有标题-->
<item name="android:windowNoTitle">true</item>
<!--这个说明提示框的背景颜色是什么-->
<item name="android:windowBackground">@drawable/myshape</item>
<!--这个说明是否充许对话框的背景变暗。为true则充许变暗-->
<item name="android:backgroundDimEnabled">false</item>
</style>
(3) Cree un nuevo archivo de diseño de diálogo (input_dialog.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="270dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:gravity="center_horizontal"
android:text="输入对话框"
android:textSize="19sp" />
<EditText
android:id="@+id/et_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="10dp"
android:gravity="center_horizontal"
android:hint="输入内容"
android:lineSpacingExtra="5dp"
android:textSize="17sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DFDFDF" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_ok"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="确认"
android:textSize="17sp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#DFDFDF" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="取消"
android:textSize="17sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
(4) Cree un nuevo archivo de código de función de cuadro de diálogo (CustomInputDialog.java)
package com.example.testinputdialog;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
public class CustomInputDialog extends Dialog{
Context mContext;
private TextView btn_ok;
private TextView btn_cancel;
private TextView title;
private EditText editText;
public CustomInputDialog(@NonNull Context context) {
super(context, R.style.CustomInputStyle);
this.mContext = context;
initView();
}
@SuppressLint("MissingInflatedId")
public void initView() {
View view = LayoutInflater.from(mContext).inflate(R.layout.input_dialog, null);
title = (TextView) view.findViewById(R.id.title);
editText = (EditText) view.findViewById(R.id.et_input);
btn_ok = (TextView) view.findViewById(R.id.btn_ok);
btn_cancel = (TextView) view.findViewById(R.id.btn_cancel);
super.setContentView(view);
}
public CustomInputDialog setTile(String s) {
title.setText(s);
return this;
}
//获取当前输入框对象
public View getEditText() {
return editText;
}
//传递数据给输入框对象
public CustomInputDialog setEditText(String s) {
editText.setText(s);
return this;
}
//确定键监听器
public void setOnSureListener(View.OnClickListener listener) {
btn_ok.setOnClickListener(listener);
}
//取消键监听器
public void setOnCanlceListener(View.OnClickListener listener) {
btn_cancel.setOnClickListener(listener);
}
}
3. El programa principal llama al cuadro de diálogo de texto de entrada
(1) Implementación del diseño del programa principal
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击,显示输入对话框,可显示输入值"
android:onClick="showInput"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
(2) Realización de la función del programa principal
package com.example.testinputdialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showInput(View view) {
final CustomInputDialog customDialog = new CustomInputDialog(this);
final EditText editText = (EditText) customDialog.getEditText();//方法在CustomDialog中实现
customDialog.setOnSureListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "你点击了确定,输入的值为:"+editText.getText().toString(), Toast.LENGTH_SHORT).show();
customDialog.dismiss();
}
});
customDialog.setOnCanlceListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
customDialog.dismiss();
}
});
customDialog.setTile("请输入内容");
customDialog.show();
}
}
(3) Visualización de resultados
Materiales de referencia:
[1] yuan_fang_yan. Cuadro de diálogo ordinario personalizado de Android, cuadro de diálogo de cuadro de entrada ; 2017-09-27 [consultado el 20 de mayo de 2023].
[2] Examen de ingreso de posgrado de Xiaoyan. Android hace clic en el botón para mostrar la entrada Android aparece Box (cuadro de entrada y cuadro de selección) ; 2021-05-26 [consultado el 20 de mayo de 2023].
[3] Li Yi-_-. Cuadro de entrada de contraseña de Android ; 2017-11-06 [consultado el 2023 -05-20].
[4] Android_xiong_st. (Original) Método de forma personalizada de Android ; 2023-03-21 [consultado el 2023-05-20].