对于访问此答案并错过了 OP 已有内容的其他人,您应该设置高程以创建阴影:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
popupWindow.setElevation(20);
}
根据您的内容视图是什么,您可能还需要设置背景可绘制对象,尽管这并不总是必要的。如果需要,您可以按照@Maragues 的建议进行操作:
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
要支持棒棒糖之前的设备,您可以使用包含阴影的 9 补丁或图像。
代码
这是上图的代码。
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(R.layout.popup_window, null);
int width = LinearLayout.LayoutParams.WRAP_CONTENT;
int height = LinearLayout.LayoutParams.WRAP_CONTENT;
boolean focusable = true;
final PopupWindow popupWindow = new PopupWindow(popupView, width, height, focusable);
popupView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
popupWindow.dismiss();
return true;
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
popupWindow.setElevation(20);
}
popupWindow.showAtLocation(anyView, Gravity.CENTER, 0, 0);
笔记:
在代码中设置时高程以像素为单位,但在 xml 中设置时通常以 dp 为单位。在代码中设置它时,您应该将 dp 值转换为像素。