¿Cómo personaliza Android el cuadro de diálogo de entrada de texto?

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
  inserte la descripción de la imagen aquí

  (2) Generar el programa principal
  inserte la descripción de la imagen aquí

  (3) Nuevo diseño de cuadro de diálogo de entrada de texto (.xml) y archivos de función (.java)
  inserte la descripción de la imagen aquí

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)
  inserte la descripción de la imagen aquí

<?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)
  inserte la descripción de la imagen aquí

<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)
  inserte la descripción de la imagen aquí

<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)
  inserte la descripción de la imagen aquí

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
  inserte la descripción de la imagen aquí

<?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
  inserte la descripción de la imagen aquí

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
  inserte la descripción de la imagen aquí

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].

Supongo que te gusta

Origin blog.csdn.net/qq_40640910/article/details/130781847
Recomendado
Clasificación