Android 开发笔记:
使用布局打造任意的Dialog样式
自定义Dialog【CustomDialog.java】
public class CustomDialog extends Dialog {
//定义模板
public CustomDialog(Context context, int layout, int style) {
this(context,WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
layout,style,Gravity.CENTER); // 上下文/宽/高/布局/主题/方向
}
//定义属性
public CustomDialog(Context context, int width, int height, int layout, int style, int gravity, int anim){
super(context,style);
//设置属性
setContentView(layout);
Window window = getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.width = width;
layoutParams.height = height;
layoutParams.gravity = gravity;
window.setAttributes(layoutParams);//传入值
window.setWindowAnimations(anim);//加动画
}
//实例
public CustomDialog(Context context, int width, int height, int layout, int style, int gravity){ //anim动画统一,所以直接定义不用传值
this(context,width,height,layout,style,gravity,R.style.pop_anim_style);
}
}
.
进入的动画【pop_in.xml】
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 移动 ( 左/上/右/下 ) -->
<translate
android:duration = "@android:integer/config_shortAnimTime"
android:fromXDelta="0"
android:fromYDelta="100%"
android:toXDelta="0"
android:toYDelta="0"/>
</set>
.
退出的动画【pop_out.xml】
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 移动 ( 左/上/右/下 ) -->
<translate
android:duration = "@android:integer/config_shortAnimTime"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="100%"/>
</set>
.
背景【bg.xml】
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 灰色阴影 -->
<item
android:left="0dp"
android:top="0dp">
<shape>
<solid android:color="#808c8c8c" />
<corners android:radius="10dp" />
</shape>
</item>
<!-- 白色前景 -->
<item
android:bottom="1dp"
android:right="0dp">
<shape>
<solid android:color="#FFFFFF" />
<corners android:radius="10dp" />
</shape>
</item>
</layer-list>
.
在【styles.xml】中添加样式
<!--自定义Dialog-->
<style name="pop_anim_style">
<item name="android:windowEnterAnimation">@anim/pop_in</item> <!--进入的动画-->
<item name="android:windowExitAnimation">@anim/pop_out</item> <!--退出的动画-->
</style>
<style name="Theme_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item> <!--全透明-->
<item name="android:windowNoTitle">true</item> <!--不需要title-->
</style>
.
最后【MainActivity.java】
public class MainActivity extends AppCompatActivity {
private CustomDialog mDialog; //new一个提示框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
// 初始化 Dialog
mDialog = new CustomDialog(MainActivity.this, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
R.layout.dialog_time, R.style.Theme_dialog, Gravity.CENTER, 0);
//屏幕外点击无效
mDialog.setCancelable(false);
TextView Dialog_Cancel = mDialog.findViewById(R.id.Dialog_Cancel);
TextView Dialog_Enter = mDialog.findViewById(R.id.Dialog_Enter);
Button Button = findViewById(R.id.Button);
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.show();
}
});
Dialog_Cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
Dialog_Enter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
}
}
.
布局文件【activity_main.xml】
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/Button"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
.
布局文件【dialog_time.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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="30dp"
android:background="@drawable/bg"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="选择考试"
android:textColor="#333333"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="200dp"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#e4e3e3" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/Dialog_Cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="10dp"
android:text="取消"
android:textColor="#333333" />
<View
android:layout_width="0.5dp"
android:layout_height="25dp"
android:layout_gravity="center_vertical"
android:background="#e4e3e3" />
<TextView
android:id="@+id/Dialog_Enter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="10dp"
android:text="确定"
android:textColor="#5A9BFF" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
源码下载:https://download.csdn.net/download/erp_lxkun_jak/11539078