关于仿ios底部向上弹出dialog的最简单方法
程序员文章站
2022-05-31 15:58:07
...
发现网上的很多方法都代码量比较大,而且很多功能都是我不需要的。那么这个时候,我就是想要一个最纯碎的弹出dialog,从底部往上弹,于是就有了我这个精简版
首先我们看下界面,非常简单(忽视我下面的Tab):
然后是dialog的布局
好,那么我们现在开始代码
首先我们把按钮实例化一下:
private void initView() {
btnShow = (Button) mView.findViewById(R.id.btn_show);
btnShow.setOnClickListener(this);
}
然后开始写PopupWindow
private void openPopupWindow(View v) {
if (popupWindow != null && popupWindow.isShowing()) {
return;
}
//设置PopupWindow的View
View view = LayoutInflater.from(getActivity()).inflate(R.layout.item_pp_bottom, null);
TextView tvCancel = (TextView) view.findViewById(R.id.tv_cancel);
TextView tvBottom1 = (TextView) view.findViewById(R.id.tv_bottom1);
TextView tvBottom2 = (TextView) view.findViewById(R.id.tv_bottom2);
TextView tvBottom3 = (TextView) view.findViewById(R.id.tv_bottom3);
tvCancel.setOnClickListener(this);
tvBottom1.setOnClickListener(this);
tvBottom2.setOnClickListener(this);
tvBottom3.setOnClickListener(this);
popupWindow = new PopupWindow(view, RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
//设置背景,不设置背景的话,点击弹窗外部不能隐藏自己
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popupWindow.setFocusable(false);//设置取消焦点
popupWindow.setOutsideTouchable(true);//设置点击弹窗外部区域隐藏自己
popupWindow.setAnimationStyle(R.style.popstyle);//设置动画
popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0);//设置位置
}
再加上点击事件:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_show:
openPopupWindow(v);
break;
case R.id.tv_bottom1:
Toast.makeText(getActivity(), "我是选择1", Toast.LENGTH_SHORT).show();
break;
case R.id.tv_bottom2:
Toast.makeText(getActivity(), "我是选择2", Toast.LENGTH_SHORT).show();
break;
case R.id.tv_bottom3:
Toast.makeText(getActivity(), "我是选择3", Toast.LENGTH_SHORT).show();
break;
case R.id.tv_cancel:
popupWindow.dismiss();
break;
}
}
这样就完成了,当然了,有时候当弹出dialog的时候,整个页面需要有一个明显的区别的话,可以加上:
popupWindow.setOnDismissListener(this);//设置消失监听
setBackgroundAlpha(0.8f);//设置背景色
//设置屏幕背景透明效果
public void setBackgroundAlpha(float alpha) {
WindowManager.LayoutParams wmlp = getActivity().getWindow().getAttributes();
wmlp.alpha = alpha;
getActivity().getWindow().setAttributes(wmlp);
}
然后加上监听事件:
@Override
public void onDismiss() {
setBackgroundAlpha(1);
}
这样一个纯碎的底部弹出dialog就出来了。
最后不要忘了style:
popstyle
<resources>
<style name="popstyle" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/pop_init</item>
<item name="@android:windowExitAnimation">@anim/pop_out</item>
</style>
</resources>
pop_init
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="100%"
android:toYDelta="0" />
</set>
pop_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="0"
android:toYDelta="100%" />
</set>
OK.基本就是这样了,纯碎底部弹出无任何添加剂