PopupWindow 横向居中显示,当设置带有箭头形式的背景图时,去掉四边阴影
程序员文章站
2022-05-31 10:55:56
...
解决两个问题
- PopupWindow 横向居中显示
- 当给 popupWindow 设置背景图片时,去掉黑边
让 PopupWindow 横向居中显示在某个 View 的下面
这里我在 Activity 中放了一个横向的 TextView ,在顶部,点击的时候在其下方显示 PopupWindow,代码如下:
PopupWindow popupWindow;
private void showPop() {
View popView = View.inflate(PopWindowActivity.this, R.layout.pop_item, null);
popupWindow = new PopupWindow(getResources().getDisplayMetrics().widthPixels / 2,
getResources().getDisplayMetrics().heightPixels / 2);
popupWindow.setContentView(popView);
popupWindow.setOutsideTouchable(true);
// 如果不设置这句代码,点击 pop 以外区域是不会被 dismiss 的.
popupWindow.setBackgroundDrawable(new BitmapDrawable());
ListView listView = popView.findViewById(R.id.lv_pop);
listView.setAdapter(new ArrayAdapter<String>(PopWindowActivity.this,
android.R.layout.simple_list_item_1, arrays));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
textView.setText(arrays[i]);
popupWindow.dismiss();
}
});
// 根据 pop 占据屏幕的宽度,计算出 pop 的便宜位置,使其显示在横向正中间
popupWindow.showAsDropDown(textView, getResources().getDisplayMetrics().widthPixels / 4,
0, Gravity.CENTER);
}
这里的 pop 里面是一个 ListView,为了区分界面颜色给 ListView 设置了背景,其他设置见注释。效果图如下:
Popwindow 设置背景图片(带尖角)边缘有阴影,去掉阴影做法
在代码中给 pop 设置 backgroundDrawable 为系统的透明颜色或者下面方式都可以.
/**
* 生成一个 透明的背景图片
* @return
*/
private Drawable getDrawable(){
ShapeDrawable bgdrawable =new ShapeDrawable(new OvalShape());
bgdrawable.getPaint().setColor(MainActivity.this.getResources().getColor(android.R.color.transparent));
return bgdrawable;
}
这种的应用场景大多是:界面右上角的图标,点击的时候在其下方弹出一个带有三角箭头的 pop,如果这个三角箭头连同 pop 的背景是一张图片的时候,会出现边缘阴影。
Android 技术分享平台