针对“属于自己的Android对话框(Dialog)自定义集合”的完整攻略,下面将进行详细讲解。
1.前言
Dialog是Android开发中常用的一个组件,一般情况下系统已经提供了许多定制化的Dialog,但这些Dialog并不能直接满足我们的业务需求,因此需要自定义Dialog,本攻略将用实例来展示如何编写属于自己的Dialog组件。
2.思路分析
自定义Dialog的基本思路是创建一个继承自Dialog类的自定义类,在该类中编写自定义的样式和行为,最终将该类实例化并显示出来。
具体步骤如下:
-
创建一个类继承自Dialog;
-
在该类中编写自己的样式和行为,比如:添加控件和设置布局等;
-
在Activity中实例化自定义类,然后调用show()方法呈现出来。
3.示例解析
下面以“自定义登录对话框”和“自定义日期选择对话框”两个实例来分别展示自定义Dialog的详细步骤。
3.1 自定义登录对话框
3.1.1 创建布局文件
首先需要创建一个布局文件dialog_login.xml,用于设置对话框的布局样式。该文件代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#ffd700"
android:gravity="center_horizontal|center_vertical"
android:text="登录"
android:textSize="20dp" />
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="请输入用户名"
android:paddingLeft="10dp" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="请输入密码"
android:paddingLeft="10dp" />
<Button
android:id="@+id/btn_confirm"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="登录"
android:background="#ffd700" />
</LinearLayout>
该布局文件采用了线性布局的形式,包含了一个TextView和两个EditText控件以及一个Button控件。
3.1.2 创建自定义类
接着需要创建一个自定义类LoginDialog,继承自Dialog类,用于实现自定义的登录对话框,代码如下:
public class LoginDialog extends Dialog {
public EditText username, password;
public Button btnConfirm;
public LoginDialog(Context context) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_login);
setCanceledOnTouchOutside(false);
initView();
}
private void initView() {
username = findViewById(R.id.username);
password = findViewById(R.id.password);
btnConfirm = findViewById(R.id.btn_confirm);
}
public void setPositiveListener(View.OnClickListener listener) {
btnConfirm.setOnClickListener(listener);
}
}
该自定义类LoginDialog继承自Dialog类,构造函数中使用requestWindowFeature方法请求不显示标题,然后设置布局文件为dialog_login.xml,并且设置对话框可点击外部取消。同时,该类中包含了三个公共属性:username、password和btnConfirm,分别对应了布局文件中的两个EditText控件和一个Button控件。除此之外,还提供了一个公共方法setPositiveListener,用于设置确认登录按钮的点击事件监听器。
3.1.3 在Activity中使用
最后在Activity中实例化自定义类LoginDialog,并设置确认登录按钮的点击事件监听器,代码如下:
public class MainActivity extends AppCompatActivity {
private Button mBtnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initView() {
mBtnLogin = findViewById(R.id.btn_login);
}
private void initListener() {
mBtnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginDialog dialog = new LoginDialog(MainActivity.this);
dialog.setPositiveListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = dialog.username.getText().toString();
String password = dialog.password.getText().toString();
Toast.makeText(MainActivity.this, "用户名:" + username + " ,密码:" + password, Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
dialog.show();
}
});
}
}
在Activity的onCreate()方法中,首先找到登录按钮控件mBtnLogin,然后为该控件设置点击事件监听器。监听器中,实例化LoginDialog类并为其设置确认登录按钮的点击事件监听器,并在该监听器中获取输入的用户名和密码,并显示一个Toast提示信息,最后调用dismiss方法关闭对话框。
一旦点击了登录按钮,就会显示一个自定义的登录对话框,用户可以在该对话框中输入用户名和密码,然后点击确认按钮,即可触发保存操作和关闭对话框。
3.2 自定义日期选择对话框
3.2.1 创建布局文件
同样需要先创建一个布局文件dialog_date_picker.xml,该文件用于设置对话框的布局样式。该文件代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<DatePicker
android:id="@+id/date_picker"
android:layout_width="match_parent"
android:layout_height="240dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp"
android:gravity="right">
<Button
android:id="@+id/btn_confirm"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:background="#ffd700"
android:text="确认" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:background="#ffd700"
android:text="取消" />
</LinearLayout>
</LinearLayout>
该布局文件采用了线性布局的形式,包含了一个DatePicker控件以及两个Button控件。
3.2.2 创建自定义类
接着需要创建一个自定义类DatePickerDialog,继承自Dialog类,用于实现自定义的日期选择对话框,代码如下:
public class DatePickerDialog extends Dialog {
private DatePicker datePicker;
private Button btnCancel;
private Button btnConfirm;
public DatePickerDialog(Context context, int themeResId) {
super(context, themeResId);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_date_picker);
datePicker = findViewById(R.id.date_picker);
btnCancel = findViewById(R.id.btn_cancel);
btnConfirm = findViewById(R.id.btn_confirm);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
public void setDate(int year, int month, int day) {
datePicker.updateDate(year, month, day);
}
public void setPositiveButton(View.OnClickListener listener) {
btnConfirm.setOnClickListener(listener);
}
}
该自定义类DatePickerDialog继承自Dialog类,构造函数中同样使用requestWindowFeature方法请求不显示标题,然后设置布局文件为dialog_date_picker.xml。此外,在该类中还提供了两个自定义方法:setDate和setPositiveButton。setDate方法用于设置DatePicker控件的初始日期,setPositiveButton方法用于设置确认日期选择按钮的点击事件监听器。
3.2.3 在Activity中使用
最后在Activity中实例化自定义类DatePickerDialog,并将其显示出来,代码如下:
public class MainActivity extends AppCompatActivity {
private Button mBtnDatePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initView() {
mBtnDatePicker = findViewById(R.id.btn_date_picker);
}
private void initListener() {
mBtnDatePicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialog dialog = new DatePickerDialog(MainActivity.this, R.style.dialog);
dialog.setDate(2021, 2, 6);
dialog.setPositiveButton(new View.OnClickListener() {
@Override
public void onClick(View v) {
int year = dialog.datePicker.getYear();
int month = dialog.datePicker.getMonth();
int day = dialog.datePicker.getDayOfMonth();
Toast.makeText(MainActivity.this, year + "-" + (month + 1) + "-" + day, Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
dialog.show();
}
});
}
}
在Activity中,首先找到日期选择按钮控件mBtnDatePicker,然后为该控件设置点击事件监听器。监听器中,实例化DatePickerDialog类并为其设置日期和确认日期选择按钮的点击事件监听器,并在该监听器中获取选择的日期,并显示一个Toast提示信息,最后调用dismiss方法关闭对话框。
一旦点击了日期选择按钮,就会显示一个自定义的日期选择对话框,用户可以在该对话框中选择日期,然后点击确认按钮,即可触发保存操作和关闭对话框。
4.总结
以上就是自定义Dialog完整攻略的详细步骤和示例展示,自定义Dialog可以满足不同业务场景的需要,也为用户提供更便捷的操作。在自定义Dialog时需要注意样式和行为的一致性,并尽可能保持统一的风格和交互方式,以便于用户使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:属于自己的Android对话框(Dialog)自定义集合 - Python技术站