android 自定义Dialog---1
首先在app\src\main\res\values\styles.xml中定义dialog的style样式
<style name="NoTitleDialog" parent="Theme.AppCompat.Light.Dialog">
<!--没有标题-->
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</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>
<!--是否全屏显示-->
<item name="android:windowFullscreen">true</item>
<!--动画-->
<!--<item name="android:windowAnimationStyle">@style/AnimSlideBottom</item>-->
</style>
第二部:编写自己想要的dialog的页面内容:
相关代码如下(dialog_bt_exit.xml):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000">
<!-- android:layout_width="338dp"
android:layout_height="280dp"-->
<LinearLayout
android:layout_width="338dp"
android:layout_height="280dp"
android:layout_centerInParent="true"
android:background="@drawable/bg_bt_exit_dialog"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tvShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:lineSpacingExtra="6px"
android:text="您的蓝牙已断开,是否重新\n连接蓝牙设备"
android:textColor="@color/color_ffffff"
android:textSize="20sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="45px"
android:orientation="horizontal">
<com.wdjr.bluetoothphone.view.CustomImageView
android:id="@+id/btnOk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:bg_normal_pic="@mipmap/btn_bt_connect_yes_n"
app:bg_press_pic="@mipmap/btn_bt_connect_yes_p" />
<com.wdjr.bluetoothphone.view.CustomImageView
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="26px"
app:bg_normal_pic="@mipmap/btn_bt_connect_no_n"
app:bg_press_pic="@mipmap/btn_bt_connect_no_p" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
bg_bt_exit_dialog.xml内容如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp"></corners>
<solid android:color="@android:color/black" />
<stroke
android:width="3dp"
android:color="@android:color/white" />
</shape>
相关的java代码如下:
(BTExitDialog.java)
package com.lym.bluetoothphone.view;
import android.app.ActivityManager;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import com.wdjr.bluetoothphone.R;
/**
* @content: 蓝牙退出提示
* @author: liyanmei
* @time: 2018/12/29
* @email: [email protected]
*/
public class BTExitDialog extends Dialog {
private static final String TAG = "BTExitDialog";
private boolean cancelable = true;
private View mParentView;
private CustomImageView btnOk;
private CustomImageView btnCancel;
public BTExitDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
}
public BTExitDialog(@NonNull Context context, int themeResId, boolean cancelable) {
super(context, themeResId);
this.cancelable = cancelable;
}
public BTExitDialog(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
initView();
}
private void initView() {
// setContentView(R.layout.dialog_usb_ext);
mParentView = getLayoutInflater().inflate(R.layout.dialog_bt_exit, null);
setContentView(mParentView);
setCancelable(cancelable);
btnOk = mParentView.findViewById(R.id.btnOk);
btnCancel = mParentView.findViewById(R.id.btnCancel);
btnOk.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
dismiss();
Intent settintIntent = new Intent(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
getContext().startActivity(settintIntent);
}
return false;
}
});
btnCancel.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
dismiss();
com.wcy.coreliberay.utils.ActivityManager.getActivityManager().destroyAllActivity();
}
return false;
}
});
}
@Override
public void dismiss() {
super.dismiss();
}
}
相关的调用如下:
exitDialog = new BTExitDialog(this, R.style.NoTitleDialog, false);
// 显示弹窗
if (exitDialog != null && !exitDialog.isShowing()) {
exitDialog.show();
}
// 关闭弹窗
if (exitDialog != null && exitDialog.isShowing()) {
exitDialog.dismiss();
}