简介:
Dailog 可以在当前的界面弹出一个对话框,这个对话框是置于所有界面元素之上的,能够屏蔽掉其他的交互能力,因此 Dialog 一般都是用于提示一些非常重要的内容或者警告信息。比如为了防止用户误删重要的内容,在删除前弹出一个确认对话框。
AlertDialog 对话框
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("提示");
dialog.setCancelable(false);
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
ProgressDialog
ProgressDialog和 AlertDialog 有点类似,都可以在界面上弹出一个对话框,都能够屏蔽掉其他控件的交互能力。不同的是,ProgressDialog会在对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心等待。
private void progressDialog() {
ProgressDialog.Builder progressDialog = new ProgressDialog.Builder(this);
progressDialog.setTitle("提示");
progressDialog.setMessage("加载中.......");
progressDialog.setIcon(R.drawable.ic_launcher_background);
progressDialog.setCancelable(true);
progressDialog.show();
}
Activity 作为 Dialog
<activity android:name=".activity.MyDialogActivity"
android:theme="@style/dialogStyle"
/>
调用:
public static void launch(SecondActivity secondActivity) {
Intent intent = new Intent(secondActivity,MyDialogActivity.class);
secondActivity.startActivity(intent);
}
dialogStyle的代码
<style name="dialogStyle" parent="Theme.AppCompat.Light.Dialog">
<!--没有标题-->
<item name="windowNoTitle">true</item>
<!--背景透明-->
<item name="android:windowIsTranslucent">true</item>
<!--是否有覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!--是否浮动-->
<item name="android:windowIsFloating">true</item>
<!--边框-->
<item name="android:windowFrame">@null</item>
<!--背景:透明-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--dialog的整个屏幕的背景是否有遮障层-->
<item name="android:backgroundDimEnabled">true</item>
<!--dialog的高度-->
<item name="android:height">200dp</item>
<!--dialog的宽度,设置值超过最大宽度,就是屏幕的最大宽度-->
<item name="android:width">500dp</item>
</style>
XML 代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#FFFFFF"
>
<TextView
android:layout_marginTop="10dp"
android:id="@+id/tv_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Dialog页面"
android:gravity="center"
android:textColor="#FF0000"
android:textSize="20dp"
/>
<LinearLayout
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_weight="1"
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
/>
<Button
android:layout_weight="1"
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"
/>
</LinearLayout>
</LinearLayout>
注意:
1.若提示这个错误:Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.有两种修改方法。
方法一:把android:theme="@style/AlertDialog.AppCompat"改成android:theme="@style/Theme.AppCompat.Dialog"。
方法二:把AppCompatActivity改成 Activity
自定义Dialog
//获取屏幕对象
WindowManager windowManager = (WindowManager) getContext()
.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
// 获取Dialog布局
View view = LayoutInflater.from(getContext()).inflate(R.layout.service_dialog_show_stop,null);
// 获取自定义Dialog布局中的控件
LinearLayout container = (LinearLayout) view.findViewById(R.id.container);
TextView tv_confirm = (TextView) view.findViewById(R.id.tv_confirm);
TextView tv_back = (TextView) view.findViewById(R.id.tv_back);
TextView tv_content = view.findViewById(R.id.tv_content);
String str = getString(R.string.service_stop)+"<font color='#FF0000'>"+ memberBean.getVipName() +"</font>"+getString(R.string.service_service);
tv_content.setText( Html.fromHtml(str));
// 定义Dialog布局和参数
dialog = new Dialog(getContext(), com.burgeon.damai.loginmodule.R.style.AlertDialogStyle);
dialog.setContentView(view);
// 调整dialog背景大小
container.setLayoutParams(new FrameLayout.LayoutParams((int) (display.getWidth() * 0.4), (int) (display.getHeight() * 0.32)));
//确定
tv_confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//清空本地数据//隐藏布局
SPUtils.getInstance(SpConstant.MEMBERSINSERVICE).put(SpConstant.MEMBERSINSERVICE, "");
rlout_member_service.setVisibility(View.GONE);
//发送一个消息
EventBus.getDefault().post(new CloseVipService());
dialog.dismiss();
}
});
//取消
tv_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
Dialog 样式
<!-- 自定义仿IOS的AlertDialog的样式 -->
<style name="AlertDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
</style>
声明一个 Style 样式:
<style name="ActivityDialogStyle" parent="Theme.AppCompat.NoActionBar">
<!--设置dialog的背景-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--设置Dialog的windowFrame框为无-->
<item name="android:windowFrame">@null</item>
<!--设置无标题-->
<item name="android:windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--设置窗口内容不覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!--设置动画-->
<item name="android:windowAnimationStyle">@style/DialogScaleAnim</item>
<!--背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
</style>
网友评论