Android はテキスト入力ダイアログ ボックスをどのようにカスタマイズしますか?

0 まえがき

  著者の研究テーマは Android ソフトウェアの開発ですが、その開発過程で、通常のメッセージ ダイアログ ボックスの表示は Android パッケージを呼び出すことで実現できるが、テキスト ボックスの入力インタラクションでは簡単に実現できないことがわかりました。ネットワーク情報を参照して、カスタムテキスト入力ダイアログボックスの機能を実現します この記事では、カスタムテキスト入力ダイアログボックスを実現するまでの過程を記録します。

1. サンプルプロジェクトを作成する

  (1) TestInputDialogプロジェクトを作成する
  ここに画像の説明を挿入

  (2) メインプログラムの生成
  ここに画像の説明を挿入

  (3) 新しい入力テキスト ダイアログ ボックスのレイアウト (.xml) および関数 (.java) ファイル
  ここに画像の説明を挿入

2. 文字入力ダイアログのレイアウトと機能設計

  (1) 新しいシェイプファイル(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) ダイアログスタイルの追加(主題.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) 新規ダイアログレイアウトファイル(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) ダイアログボックス関数コードファイル(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. メインプログラムはテキスト入力ダイアログボックスを呼び出します。

  (1) メインプログラムレイアウトの実装
  ここに画像の説明を挿入

<?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) メインプログラムの機能実現
  ここに画像の説明を挿入

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) 結果表示
  ここに画像の説明を挿入

参考資料:
[1] yuan_fang_yan. android カスタム通常ダイアログ ボックス、入力ボックス ダイアログ ボックス; 2017-09-27 [アクセス 2023-05-20].
[2] Xiaoyan 大学院入学試験. android はボタンをクリックして入力をポップアップしますボックス、アンドロイド ポップアップ ボックス (入力ボックスと選択ボックス) ; 2021-05-26 [アクセス 2023-05-20].
[3] Li Yi-_-. Android パスワード入力ボックス; 2017-11-06 [アクセス 2023] -05-20] .
[4] Android_xiong_st. (オリジナル) Android カスタム形状メソッド; 2023-03-21 [2023-05-20 にアクセス]。

おすすめ

転載: blog.csdn.net/qq_40640910/article/details/130781847