前言
今天在做到某些操作的时候需要给一个提示,刚开始只是给了一个Toast来提示的,但是效果并不太明显,于是想到自己试着一个自定义的Dialog来试试,虽然可能没有直接用Dialog那么好,但是重在参与
开始
废话说完了 我们就来开始写布局吧
dialog_item.xml
<LinearLayout android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="310dp"
android:layout_height="150dp">
<TextView
android:text="温馨提示" android:textSize="22sp"
android:background="#ff3" android:id="@+id/tv_title"
android:layout_width="match_parent" android:gravity="center"
android:layout_height="wrap_content" />
<TextView
android:text="移库成功" android:textSize="22sp"
android:background="@drawable/selector_edittext_bg"
android:layout_width="match_parent" android:gravity="center"
android:layout_height="80dp" android:id="@+id/tv_message"/>
<LinearLayout android:orientation="horizontal"
android:layout_width="wrap_content" android:layout_gravity="center"
android:layout_height="wrap_content">
<Button
android:text="确定" android:id="@+id/bt_diss"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
LinearLayout>
LinearLayout>
下面我们来写文字的背景文件
selector_edittext_bg.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_edittext_normal" android:state_window_focused="false"/>
<item android:drawable="@drawable/shape_edittext_focused" android:state_focused="true"/>
selector>
shape_edittext_normal.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<corners android:radius="8px" />
<stroke
android:width="1dp"
android:color="@color/textColor" />
shape>
shape_edittext_focused.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<corners android:radius="8px" />
<stroke
android:width="1dp"
android:color="@color/color_main_menu_bg" />
shape>
好了 到这里XML布局文件就全部写完了,接下来我们来写代码
首先我们来新建一个DialogText的类并且继承Dialog
private LayoutInflater inflater;
private TextView tvTitle,tvMessage;
private Button button;
public DialogText(@NonNull Context context) {
super(context);
inflater = LayoutInflater.from(context);
initview();
}
}
接下来我们就来写初始化布局和控件
/**
* 初始化布局
*/
private void initview() {
View view = inflater.inflate(R.layout.dialog_item,null);
tvTitle = view.findViewById(R.id.tv_title);
tvMessage = view.findViewById(R.id.tv_message);
button = view.findViewById(R.id.buttton);
}
我们在initview里初始化控制之后就写赋值方法
/**
* 设置标题信息
* @param title
*/
public void setTvTitle(String title) {
tvTitle.setText(title);
}
/**
* 设置信息信息
* @param message
*/
public void setTvMessage(String message) {
tvMessage.setText(message);
}
/**
* 设置按钮的点击事件
* @param clickListener 点击事件
*/
public void setOncile(View.OnClickListener clickListener){
button.setOnClickListener(clickListener);
}
/**
* 设置启动弹窗
* @param context 上下文
*/
public void showDialog(Context context){
show();
//设置Dialog大小
WindowManager windowManager = (WindowManager)
context.getSystemService(Context.WINDOW_SERVICE);
Display d = windowManager.getDefaultDisplay();
android.view.WindowManager.LayoutParams p = getWindow().getAttributes();
p.width = (int) (d.getWidth() * 0.5);
getWindow().setAttributes(p);
}
我们写了四个方法 分别是设置标题、内容、按钮的点击事件、显示DIalog方法
接下来我们把咱们初始化的布局设置进Dialog,在initview方法中新加入两项
/**
* 初始化布局
*/
private void initview() {
View view = inflater.inflate(R.layout.dialog_item,null);
tvTitle = view.findViewById(R.id.tv_title);
tvMessage = view.findViewById(R.id.tv_message);
button = view.findViewById(R.id.buttton);
setCancelable(false);//点击外面是否关闭
setContentView(view);//设置布局进入Dialog
}
好了 类我们写完了,现在来看看怎么用,我们新建一个Activity
布局文件
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.crackgmkey.ht.Main2Activity">
<Button
android:id="@+id/buttoon" android:text="弹窗"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android.support.constraint.ConstraintLayout>
里面只有一个按钮
JAva代码
package com.crackgmkey.ht;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class Main2Activity extends AppCompatActivity {
private DialogText dialogText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//new对象
dialogText = new DialogText(this);
//设置标题
dialogText.setTvTitle("Crackgmkey提醒您");
//设置内容
dialogText.setTvMessage("你好,欢迎观看我的博客");
//使用接口回调实现点击事件
dialogText.setOncile(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogText.dismiss();//关闭弹窗
}
});
//启动显示
dialogText.showDialog(this);
}
}
我们来运行看一下效果
最好整体代码贴一下
package com.crackgmkey.ht;
import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
/**
* Created by huitao on 2018/3/7.
*/
public class DialogText extends Dialog{
private LayoutInflater inflater;
private TextView tvTitle,tvMessage;
private Button button;
private Context context;
public DialogText(@NonNull Context context) {
super(context);
this.context = context;
initview();
}
/**
* 初始化布局
*/
private void initview() {
View view = LayoutInflater.from(context).inflate(R.layout.adialog_item,null);
tvTitle = (TextView) view.findViewById(R.id.tv_title);
tvMessage = (TextView)view.findViewById(R.id.tv_message);
button = (Button) view.findViewById(R.id.buttton);
setCancelable(false);//点击外面是否关闭
setContentView(view);//设置布局进入Dialog
}
/**
* 设置标题信息
* @param title
*/
public void setTvTitle(String title) {
tvTitle.setText(title);
}
/**
* 设置信息信息
* @param message
*/
public void setTvMessage(String message) {
tvMessage.setText(message);
}
/**
* 设置按钮的点击事件
* @param clickListener 点击事件
*/
public void setOncile(View.OnClickListener clickListener){
button.setOnClickListener(clickListener);
}
/**
* 设置启动弹窗
* @param context 上下文
*/
public void showDialog(Context context){
show();
//设置Dialog大小
WindowManager windowManager = (WindowManager)
context.getSystemService(Context.WINDOW_SERVICE);
Display d = windowManager.getDefaultDisplay();
android.view.WindowManager.LayoutParams p = getWindow().getAttributes();
p.width = (int) (d.getWidth() * 0.5);
getWindow().setAttributes(p);
}
}