Android(安卓)自定义Dialog 的使用
16lz
2021-01-24
单个Dialog 自定义布局 ,这个只能算半自定义,就是一个弹框布局插入到AlertDialog 中 使用setView 即可
代码如下
AlertDialog.Builder builder = new AlertDialog.Builder(InflateActivity.this); View view = getLayoutInflater().inflate(R.layout.bottom__pop_item, null); builder.setView(view); final AlertDialog dialog = builder.create(); dialog.show(); TextView textView = view.findViewById(R.id.photo); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); Toast.makeText(InflateActivity.this, "点击了", Toast.LENGTH_SHORT).show(); } }); }
监听事件也添加了, 布局更具自己的需求添加即可 。。。。。。。。。
假如是写一个 android 中间弹框,使用上面的代码完全没有问题。。
自定义弹框
1 先创建一个Dialog 类
public class CommDialog extends Dialog implements View.OnClickListener { private Context context;//上下文 private int layoutResID;//布局文件id private int[] listenedItem;//监听的控件id public CommDialog(Context context, int layoutResID, int[] listenedItem) { super(context); this.context = context; this.layoutResID = layoutResID; this.listenedItem = listenedItem; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window dialogWindow = getWindow(); dialogWindow.setGravity(Gravity.CENTER); setContentView(layoutResID); WindowManager windowManager = ((Activity) context).getWindowManager(); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.width = display.getWidth() * 4 / 5;// 设置dialog宽度为屏幕的4/5 getWindow().setAttributes(lp); setCanceledOnTouchOutside(true);//点击外部Dialog消失 //遍历控件id添加点击注册 for (int id : listenedItem){ findViewById(id).setOnClickListener(this); } } OnClickListener listener; public void setClickListener(OnClickListener listener) { this.listener = listener; } public interface OnClickListener { void OnItemClick(CommDialog dialog, View view); } @Override public void onClick(View v) { dismiss(); listener.OnItemClick(this,v); }}
然后在Activity 中使用这个CommDialog的方法
public class InflateActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.inflate_activity_layout); textView = findViewById(R.id.txt); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CommDialog dialog = new CommDialog(InflateActivity.this, R.layout.bottom__pop_item, new int[]{R.id.photo, R.id.camera, R.id.cancel}); dialog.setClickListener(new CommDialog.OnClickListener() { @Override public void OnItemClick(CommDialog dialog, View view) { switch (view.getId()) { case R.id.photo: Toast.makeText(InflateActivity.this, "11111", Toast.LENGTH_SHORT).show(); break; case R.id.camera: Toast.makeText(InflateActivity.this, "22222", Toast.LENGTH_SHORT).show(); break; case R.id.cancel: Toast.makeText(InflateActivity.this, "33333", Toast.LENGTH_SHORT).show(); break; } } }); dialog.show(); } }); }}
自定义呢就是 样式就自己随意写了, 需要注意的就是id的次数 使用几次,记得写几次呢。。。。。。。。
这里自定义Dialog 就结束了,。。。
下篇文章将介绍android 分屏播放知识。。
更多相关文章
- Android(安卓)Notification基础知识
- Android一行代码 搞定图片太多,太大OOM(内存溢出)
- Android开发:定制Activity的标题栏(Titlebar)
- setTheme问题2
- Android加载网络图片
- Android(安卓)Studio 配置多个代码仓库(maven)
- android -------- ConstraintLayout 宽高比和偏移量比(三)
- android设置wallpaper
- 读取SIM卡信息