NormalDiglog,DiyDiglog,PopupWindow
Demo
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//按钮点击事件
public void myClick(View view) {
switch (view.getId()) {
case R.id.normal_dialog_btn:
showNormalDiglogOne();//普通对话框1
showNormalDiglogTwo();//普通对话框2
break;
case R.id.diy_dialog_btn:
//自定义对话框
MainActivity.MyDiaglog md = new MainActivity.MyDiaglog(this, R.style.mydialog);
md.show();
break;
case R.id.show_btn:
//弹出菜单
showPopupWindow(view);
break;
case R.id.adapter_btn:
//数组适配器+对话框
showArrayDialog();
break;
}
}
/*
普通对话框(第一种方法)
*/
private void showNormalDiglogOne() {
//1.实例化一个Builder对象
//AlerDialog的构造方法是protected用修饰 所以new它的内部类
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//2.设置对话框样式
builder.setTitle("欢迎来到ikun俱乐部");//设置标题
builder.setMessage("你确定选择获得唱、跳、rap技能吗?");//设置内容
builder.setIcon(R.mipmap.ic_launcher);//设置标题图标
//2.1设置监听事件
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "恭喜你获得ikun技能", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", null);
//3.展示
builder.show();
//↑等价于
// AlertDialog dialog = builder.create();
// dialog.show();
}
/*
普通对话框(第二种方法)
*/
public void showNormalDiglogTwo() {
AlertDialog dialog = new AlertDialog.Builder(this).show();
dialog.setTitle("欢迎来到ikun俱乐部");
dialog.setMessage("你确定选择获得唱、跳、rap技能吗?");
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
}
});
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "你点击了取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
}
/*
显示弹出菜单
*/
private void showPopupWindow(View view) {
//1.实例化对象
/*
*准备弹窗所需要的视图对象*
获取view或控件,往常都是使用findView获取view
将整个布局变成一个view是需要调用LayoutInflater()
.from()从哪块空间获取
.inflater()去找这个布局
*/
//两种获取方法
View v = LayoutInflater.from(this).inflate(R.layout.popup_layout, null);
// View v = ActivityChooserView.InnerLayout.inflate(this,R.layout.popup_layout,null);
final PopupWindow window = new PopupWindow(v, 400, 70, true);
//2.设置
//去除背景色
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//设置能响应事件
window.setOutsideTouchable(true);
//①创建动画资源 ②创建一个style应用动画资源 ③对当前弹窗的动画风格设置为第二部的资源索引
window.setAnimationStyle(R.style.translate_anim);//测试
//响应事件
v.findViewById(R.id.chooes_all).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "你点击了全选", Toast.LENGTH_SHORT).show();
window.dismiss();//关闭对话框
}
});
//3.显示
//参数1(anchor) 锚 参数2、3:相对于锚在x、y方向上的偏移量
window.showAsDropDown(view, -190, 0);
}
/*
自定义布局(图标+文本)+数组适配器的选择列表
*/
private void showArrayDialog() {
final String[] items = {"JAVA", "Mysql", "Android", "HTML", "C++", "JavaScript"};
//数组适配器
//参数1:环境
//参数2:布局资源索引,指的是每一项数据所呈现的演示android.R.layout
//参数3:数据源
// ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,items);
//参数3:int textviewId.指定文本㤇放在布局中对应id文本控制的位置
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.array_item_layout, R.id.item_txt, items);
AlertDialog.Builder builer = new AlertDialog.Builder(this)
.setTitle("请选择")
//参数1:适配器对象(对数据显示样式的规则制定器)
//参数2:监听器
.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {//i从0开始
switch (i) {
case 0:
Toast.makeText(MainActivity.this, items[i] + "111", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(MainActivity.this, items[i] + "222", Toast.LENGTH_SHORT).show();
break;
}
// Toast.makeText(MainActivity.this,items[i],Toast.LENGTH_SHORT).show();
// dialogInterface.dismiss();
}
});
builer.show();
}
/*1.设计自定义对话框样式-->dialog_layout.xml
*2.设置style(去标题,去背景)
*3.将第一步的布局应用到当前自定义对话框
*4.实例化对话框(参数1:环境上下文 参数2:第二步创建的style R.style.mydialog),并展示show()
*/
public class MyDiaglog extends Dialog {
public MyDiaglog(Context context, int themeResId) {
super(context, themeResId);
//为对话框设置布局
setContentView(R.layout.dialog_layout);
//监听事件
findViewById(R.id.yes_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.exit(0);//结束程序
}
});
findViewById(R.id.no_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
}
}
}
activity_main.xml
<androidx.constraintlayout.widget.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=".MainActivity">
<Button
android:id="@+id/normal_dialog_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="85dp"
android:layout_marginLeft="85dp"
android:layout_marginTop="89dp"
android:onClick="myClick"
android:text="显示一个普通对话框"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/diy_dialog_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:onClick="myClick"
android:text="显示一个自定义对话框"
app:layout_constraintStart_toStartOf="@+id/normal_dialog_btn"
app:layout_constraintTop_toBottomOf="@+id/normal_dialog_btn" />
<Button
android:id="@+id/show_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="62dp"
android:onClick="myClick"
android:text="显示菜单"
app:layout_constraintStart_toStartOf="@+id/diy_dialog_btn"
app:layout_constraintTop_toBottomOf="@+id/diy_dialog_btn" />
<Button
android:id="@+id/adapter_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="84dp"
android:layout_marginLeft="84dp"
android:layout_marginTop="76dp"
android:onClick="myClick"
android:text="数据适配器"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/show_btn" />
</androidx.constraintlayout.widget.ConstraintLayout>
array_item_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/star"/>
<TextView
android:gravity="center_vertical"
android:id="@+id/item_txt"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="我是一个小可爱"
android:layout_marginLeft="20dp"/>
</LinearLayout>
diglog_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/dialog_bg"
android:gravity="center_horizontal"
android:padding="40dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="36sp"
android:text="你真的要退出吗?"
android:textColor="#ff0000"
android:textStyle="bold"
android:layout_marginTop="400dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<Button
android:id="@+id/yes_btn"
android:layout_width="120dp"
android:layout_height="50dp"
android:background="@mipmap/yes_btn"/>
<Button
android:id="@+id/no_btn"
android:layout_width="120dp"
android:layout_height="50dp"
android:background="@mipmap/no_btn"
android:layout_marginLeft="20dp"/>
</LinearLayout>
</LinearLayout>
popup_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="2dp"
android:background="#00ff00">
<TextView
android:id="@+id/chooes_all"
android:layout_width="60dp"
android:layout_height="30dp"
android:gravity="center"
android:text="全选"
android:textColor="#FFF"
android:background="#000"/>
<TextView
android:id="@+id/chooes"
android:layout_width="60dp"
android:layout_height="30dp"
android:gravity="center"
android:text="选择"
android:textColor="#FFF"
android:background="#000"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"/>
<TextView
android:id="@+id/copy"
android:layout_width="60dp"
android:layout_height="30dp"
android:gravity="center"
android:text="复制"
android:textColor="#FFF"
android:background="#000"/>
</LinearLayout>