核心思想知识点:
1)、自定义Dialog及其基本使用
效果图如下
GIF.gif
功能实现过程
1、mdialog_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<!--圆角矩形背景-->
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置背景颜色-->
<solid android:color="@color/white" />
<!--设置圆角的角度-->
<corners android:radius="16dp" />
</shape>
2、styles.xml
<resources>
<!--对话框样式-->
<style name="mdialog" parent="android:style/Theme.Dialog">
<!-- 背景透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 背景昏暗 -->
<item name="android:backgroundDimEnabled">true</item>
</style>
</resources>
3、strings.xml
<resources>
<string name="app_name">仿QQ退出当前账号</string>
<string name="text_title">再连续登陆4天,就可变身QQ达人。退出\nQQ可能会使你现有记录归零,确定退\n出?</string>
<string name="text_cancel">取消</string>
<string name="text_exit">确定退出</string>
<string name="text_exit_number">退出当前账号</string>
</resources>
4、strings.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/mdialog_bg"
>
<!--对话框标题区域-->
<RelativeLayout
android:layout_width="@dimen/layout_width"
android:layout_height="@dimen/layout_height"
android:id="@+id/layout_title"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/title"
android:text="@string/text_title"
android:textColor="@color/black"
android:gravity="center"
/>
</RelativeLayout>
<!--对话框横线-->
<View
android:layout_width="@dimen/layout_width"
android:layout_height="1dp"
android:background="@color/grey"
android:layout_below="@+id/layout_title"
android:layout_marginBottom="10dp"
/>
<!--对话框按钮区域-->
<RelativeLayout
android:id="@+id/bottomoll"
android:layout_width="@dimen/layout_width"
android:layout_height="wrap_content"
android:layout_below="@+id/layout_title"
>
<LinearLayout
android:layout_width="@dimen/layout_width"
android:layout_height="wrap_content">
<!--取消按钮-->
<Button
android:id="@+id/btn_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/text_cancel"
android:textColor="@color/blue"
android:background="@null"
android:textSize="18sp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/grey"
/>
<!--退出按钮-->
<Button
android:id="@+id/btn_exit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/text_exit"
android:textColor="@color/blue"
android:background="@null"
android:textSize="18sp"
/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
5、Mdialog.java
public class Mdialog extends Dialog {
private Button button_cancel,button_exit; //定义取消与确认按钮
private TextView tv; //定义标题文字
//自定义构造方法
public Mdialog(Context context) {
super(context, R.style.mdialog);
View view = LayoutInflater.from(getContext()).
inflate(R.layout.mdialoglayout, null); //通过LayoutInflater获取布局
tv = (TextView) view.findViewById(R.id.title); //获取显示标题的文本框控件
button_cancel = (Button) view.findViewById(R.id.btn_cancel); //获取取消按钮
button_exit = (Button) view.findViewById(R.id.btn_exit); //获取确认退出按钮
setContentView(view); //设置显示的视图
}
//设置显示的标题文字
public void setTv(String content) {
tv.setText(content);
}
//取消按钮监听
public void setOnCancelListener(View.OnClickListener listener){
button_cancel.setOnClickListener(listener);
}
//退出按钮监听
public void setOnExitListener(View.OnClickListener listener){
button_exit.setOnClickListener(listener);
}
}
6、MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//不显示系统的标题栏,
getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN );
}
/**
* 设置退出账号按钮弹出对话框
*
* @param view
*/
public void OnExitNumber(View view) {
final Mdialog mdialog = new Mdialog(this); //实例化自定义对话框
//对话框中退出按钮事件
mdialog.setOnExitListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果对话框处于显示状态
if (mdialog.isShowing()) {
mdialog.dismiss(); //关闭对话框
finish(); //关闭当前界面
}
}
});
//对话框中取消按钮事件
mdialog.setOnCancelListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mdialog != null && mdialog.isShowing()) {
mdialog.dismiss(); //关闭对话框
}
}
});
mdialog.show();
}
}
样式尝试效果
image.png
image.png
image.png
image.png
image.png
image.png