Pat*_*ick 27 android android-popupwindow android-5.0-lollipop
设置标高时,Android Popwindow不显示阴影.它似乎从文档中支持它.我正在使用5.0 Lollipop.
创建弹出窗口如下:
popupWindow = new PopupWindow(context);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setElevation(10);
popupWindow.setContentView(rootView);
popupWindow.showAtLocation(anchorView, Gravity.NO_GRAVITY, xPos, yPos);
Run Code Online (Sandbox Code Playgroud)
Mar*_*ues 24
正如Android开发人员所回答的那样.
如果膨胀的视图没有背景设置,或者弹出窗口本身没有背景设置(或具有透明背景),那么您将不会获得阴影.
这是我的情况,似乎是你的,因为你没有使用setBackgroundDrawable.
这对我有用
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
Run Code Online (Sandbox Code Playgroud)
我已经打开了一个新问题,建议他们更新文档(https://code.google.com/p/android/issues/detail?id=174919)
Sur*_*gch 13
对于访问此答案并错过 OP 已有内容的其他人,您应该设置高程以创建阴影:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
popupWindow.setElevation(20);
}
Run Code Online (Sandbox Code Playgroud)
根据您的内容视图是什么,您可能还需要设置背景可绘制,尽管这并不总是必要的。如果需要,您可以按照@Maragues 的建议进行操作:
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
Run Code Online (Sandbox Code Playgroud)
要支持 Lollipop 之前的设备,您可以使用包含阴影的 9-patch 或图像。
这是上图的代码。
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);
Run Code Online (Sandbox Code Playgroud)
笔记:
在代码中设置时,高程以像素为单位,但在 xml 中设置时通常以 dp 为单位。在代码中设置时,您应该将 dp 值转换为像素。
归档时间: |
|
查看次数: |
14956 次 |
最近记录: |