Android中制作自定义dialog对话框的实例分享,具体步骤如下:
一、创建新的xml布局文件
首先,在res文件夹下创建一个名为dialog_custom.xml的新的xml布局文件。接着在xml文件中添加需要展示的view,可以自由设计布局样式、添加TextView、EditText、Button等控件,并设置好控件的ID和属性。
例如,下面的代码实现了一个带有标题和两个按钮的对话框:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp">
<TextView
android:id="@+id/dialog_title"
android:text="标题"
android:textSize="20dp"
android:textColor="@android:color/holo_blue_dark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"/>
<EditText
android:id="@+id/dialog_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入内容"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="right">
<Button
android:id="@+id/dialog_cancel_btn"
android:text="取消"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/dialog_confirm_btn"
android:text="确定"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"/>
</LinearLayout>
</LinearLayout>
二、创建自定义Dialog
接下来,在Activity中创建自定义Dialog类,并在其中绑定XML布局文件中定义的控件,实现对话框的功能逻辑。
例如,下面的代码实现了一个自定义对话框类CustomDialog,在其中绑定了XML布局中的控件,当用户点击确定按钮时弹出Toast显示用户输入的内容:
public class CustomDialog extends Dialog {
private String title;
private EditText editText;
private Button confirmButton;
public CustomDialog(Context context, String title) {
super(context);
this.title = title;
init();
}
private void init() {
setContentView(R.layout.dialog_custom);
setTitle(title);
editText = findViewById(R.id.dialog_edit_text);
confirmButton = findViewById(R.id.dialog_confirm_btn);
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String content = editText.getText().toString();
Toast.makeText(getContext(), content, Toast.LENGTH_SHORT).show();
dismiss();
}
});
}
}
三、在Activity中调用自定义Dialog
最后,在Activity中调用自定义Dialog,并设置好dialog的相关属性和逻辑。例如,可以在按钮点击事件中调用自定义Dialog:
public class MainActivity extends AppCompatActivity {
private Button showDialogButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showDialogButton = findViewById(R.id.show_dialog_button);
showDialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CustomDialog dialog = new CustomDialog(MainActivity.this, "自定义对话框");
dialog.setCancelable(true);
dialog.show();
}
});
}
}
上面的代码中,首先通过findViewById获取到了按钮对象showDialogButton,并给按钮设置了一个点击事件监听器。当用户点击按钮时,会创建一个CustomDialog对象,并调用dialog.show()方法展示对话框。
示例1:根据用户输入动态更改布局
下面是一个示例,让用户输入一个数字,然后根据数字动态添加EditText控件:
public class CustomDialog extends Dialog {
// ...
public CustomDialog(Context context, String title) {
// ...
}
private void init() {
setContentView(R.layout.dialog_custom);
setTitle(title);
editText = findViewById(R.id.dialog_edit_text);
confirmButton = findViewById(R.id.dialog_confirm_btn);
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num = Integer.parseInt(editText.getText().toString());
addEditTexts(num);
dismiss();
}
});
}
private void addEditTexts(int num) {
LinearLayout layout = findViewById(R.id.dialog_edit_text_layout);
layout.removeAllViews();
for (int i = 0; i < num; i++) {
EditText editText = new EditText(getContext());
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.setHint("EditText " + (i + 1));
layout.addView(editText);
}
}
}
上面的代码中,我们新增了一个方法addEditTexts,用于动态添加EditText控件。当用户点击确定按钮时,会根据用户输入的数字创建相应数量的EditText控件,并添加到XML布局文件中的LinearLayout中。
同时,需要在XML布局文件中添加一个id为dialog_edit_text_layout的LinearLayout控件,用于动态添加EditText控件。
<LinearLayout
android:id="@+id/dialog_edit_text_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
示例2:自定义带有图片的对话框
下面是一个示例,创建一个自定义的带有图片和两个按钮的对话框:
public class CustomDialog extends Dialog {
// ...
public CustomDialog(Context context, String title, int imageResId) {
super(context, R.style.CustomDialogTheme);
this.title = title;
this.imageResId = imageResId;
init();
}
private void init() {
setContentView(R.layout.dialog_custom2);
setCancelable(true);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
TextView titleTextView = findViewById(R.id.dialog_title);
ImageView imageView = findViewById(R.id.dialog_image);
Button cancelButton = findViewById(R.id.dialog_cancel_btn);
Button confirmButton = findViewById(R.id.dialog_confirm_btn);
titleTextView.setText(title);
imageView.setImageResource(imageResId);
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "确认", Toast.LENGTH_SHORT).show();
dismiss();
}
});
}
}
上面的代码中,我们创建了一个新的style,用于设置对话框的背景和圆角。同时,在CustomDialog中的构造函数中,还新增了一个参数imageResId,用于指定对话框中显示的图片资源。
<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@drawable/ic_dialog_bg</item>
<item name="android:background">@drawable/dialog_bg_shape</item>
<item name="android:windowMinWidthMajor">90%</item>
<item name="android:windowMinWidthMinor">90%</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowAnimationStyle">@style/DialogAnimation</item>
</style>
此外,我们在XML布局文件中引入了一个ImageView控件,用于展示图片。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp">
<TextView
android:id="@+id/dialog_title"
android:text="自定义对话框"
android:textSize="20dp"
android:textColor="@android:color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"/>
<ImageView
android:id="@+id/dialog_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="20dp"
android:src="@drawable/ic_dialog_image"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="right">
<Button
android:id="@+id/dialog_cancel_btn"
android:text="取消"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/dialog_confirm_btn"
android:text="确认"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"/>
</LinearLayout>
</LinearLayout>
上面的代码中,我们在LinearLayout中新增了一个ImageView控件,并将图片资源设置为ic_dialog_image,用于展示在对话框中的图片。
这样,我们就成功自定义了一个带有图片和两个按钮的对话框。在调用该对话框时,只需要传入对应的参数,即可相应地展示对应的图片和标题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中制作自定义dialog对话框的实例分享 - Python技术站