43.自定义一款好看的对话框
1.下载素材。
本节无素材,如有素材,请在公众号回复获取。
2.设置样式。
在themes.xml里设置style样式。
<!-- Dialog样式-->
<style name="DialogTheme" parent="@android:style/Theme.Dialog">
<!-- 边框 -->
<item name="android:windowFrame">@null</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<!-- 背景透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 模糊 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 遮罩层 -->
<item name="android:backgroundDimAmount">0.5</item>
</style>
3.新建layout_dialog.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"
android:background="@null" >
<LinearLayout
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="250dp"
android:orientation="vertical">
<LinearLayout
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_weight="2"
android:layout_width="167dp"
android:layout_height="192dp">
<ImageView
android:layout_centerInParent="true"
android:layout_width="127dp"
android:layout_height="162dp"
android:background="@drawable/dialog_photo" />
</RelativeLayout>
<LinearLayout
android:layout_marginLeft="5dp"
android:layout_weight="6"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_marginRight="5dp"
android:layout_height="192dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="新消息"
android:textStyle="bold"
android:textAlignment="center"
android:textSize="22sp"/>
<TextView
android:id="@+id/contents"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:text="1.如果软件失效了,请等待修复。\n2.如果更新失败了,请手动更新。\n3.软件仅仅是整合搜索接口,不保存任何资源。"
android:textSize="18sp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<View
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#c0c0c0"/>
<RelativeLayout
android:id="@+id/btn_ok"
android:background="?android:attr/selectableItemBackground"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="已查阅"
android:textAlignment="center"
android:textSize="20sp"
android:textStyle="bold"
android:layout_centerInParent="true"
android:textColor="@color/purple_500"/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
4.新建MyDialog.java文件。
package jsz.nopi.firstapp;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class MyDialog extends Dialog {
//style引用style样式
public MyDialog(Context context, int width, int height, View layout, int style) {
super(context, style);
setContentView(layout);
Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.CENTER;
window.setAttributes(params);
}
}
5.修改MainActivity.java。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showMyDialog();
}
public void showMyDialog() {
View view = getLayoutInflater().inflate(R.layout.layout_dialog, null);
RelativeLayout btn_ok = view.findViewById(R.id.btn_ok);
final MyDialog mMyDialog = new MyDialog(this, 0, 0, view, R.style.DialogTheme);
mMyDialog.setCancelable(true);
mMyDialog.setCanceledOnTouchOutside(false);
mMyDialog.show();
btn_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMyDialog.dismiss();
}
});
}
}
6.素材图和效果图。
素材图
效果图