自定义Dialog样式
在项目中经常会用到自定义的dialog,今天写一个总结。
Dialog对话框,一个对话就是一个小窗口,并不会填满屏幕,是一种模态,必须要求用户取消关闭窗口后才能进行下一步操作。
Dialog有四种常用的对话框:
1.AlertDialog:警告对话框,使用最广泛功能最丰富的对话框。
2.ProgressDialog:进度条对话框,只是对进度条进行简单的封装。
3.DatePickDialog:日期对话框
4.TimePickerDialog:时间对话框
下边介绍自定义一个dialog
1.在styles.xml定义自己想要的样式
<style name="dialog04" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@android:color/transparent</item>
<!-- 边框 -->
<item name="android:windowIsFloating">false</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 半透明 -->
<item name="android:windowNoTitle">true</item>
<!-- 无标题 -->
<item name="android:windowBackground">@color/black_three</item>
<!-- 背景透明 -->
<item name="android:windowAnimationStyle">@null</item>
<!-- 设置屏幕变暗 -->
<item name="android:backgroundDimEnabled">false</item>
</style>
2.新建一个dialog_layout.xml
<?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:gravity="center"
android:id="@+id/linlean_finshbike"
android:background="@color/transparent"
>
<LinearLayout
android:layout_width="240dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/white"
android:gravity="center"
android:layout_marginTop="100dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="30dp"
android:text="骑行完成"
android:gravity="center"
android:textColor="@color/black"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="200dp"
android:background="@drawable/picture_show_finshbike"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显示"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:textColor="@color/black"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="谢谢观看"
android:layout_marginTop="15dp"
android:gravity="center"
android:textColor="@color/black"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text=""
android:textColor="@color/black"
android:gravity="center"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/dialog_ll_fishbtn"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
>
<Button
android:id="@+id/dialog_btn_finsh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cross_btn"
/>
</LinearLayout>
</LinearLayout>
3.创建一个ShowDialog.class
public class ShowDialog extends Dialog{
Context context;
public ShowDialog(Context context) {
super(context);
this.context = context;
this.setContentView(R.layout.dialog_bike_finsh);
}
public ShowDialog(Context context, int themeResId) {
super(context, themeResId);
this.context = context;
this.setContentView(R.layout.dialog_bike_finsh);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
3.在Activity中点击显示
public class MainActivity extends AppCompatActivity {
private final static String TAG=MainActivity.class.getSimpleName();
private Button show;
private ShowDialog mDialog;
//设备屏幕宽高
int widthPixels;
int heightPixels;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WindowManager wm = (WindowManager) this
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
widthPixels = dm.widthPixels;
heightPixels = dm.heightPixels;
show = (Button) findViewById(R.id.bt_showDilaog);
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setCostomMsg();
}
});
}
private void setCostomMsg(){
mDialog = new ShowDialog(this,R.style.dialog);
Button finshDialog = (Button) mDialog.findViewById(R.id.dialog_btn_finsh);
LinearLayout finshdialog = (LinearLayout) mDialog.findViewById(R.id.dialog_ll_fishbtn);
Window dialogWindow = mDialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
dialogWindow .setGravity(Gravity.CENTER);
lp.x = widthPixels/2; // 新位置X坐标
lp.y = heightPixels/2; // 新位置Y坐标
dialogWindow.setAttributes(lp);
// dialogWindow.onWindowAttributesChanged(wl);
mDialog.show();
finshDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDialog.isShowing()){
mDialog.dismiss();
Log.e(TAG,"关闭dialog");
}
}
});
finshdialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDialog.isShowing()){
mDialog.dismiss();
Log.e(TAG,"关闭dialog");
}
}
});
}
}
运行效果如下: