PopupWindow 以编程方式创建并设置其高度。阴影最初看起来像预期的那样,但是一旦单击文本视图,无论它具有波纹还是选择器作为背景,阴影都会发生变化。它看起来像动画成黑色,或者阴影相互叠加。
我尝试了很多替代方案,但仍然得到相同的效果。
在模拟器 v21+ Lollipop 上进行测试。我没有要测试的棒棒糖设备,但我认为这不是模拟器的问题,因为阴影适用于其他项目。
PopupWindow test_shadow.xml 的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu"
android:orientation="vertical"
android:layout_width="112dp"
android:layout_height="wrap_content">
<TextView
style="@style/TextAppearance.AppCompat.Body2"
android:id="@+id/text1"
android:layout_width="112dp"
android:layout_height="48dp"
android:textColor="@color/black"
android:background="@drawable/item_background_light"
android:gravity="bottom"
android:paddingLeft="16dp"
android:paddingBottom="16dp"
android:clickable="true"
android:stateListAnimator="@null"
android:text="menuItem1"/>
</LinearLayout>
膨胀和设置 popupWindow 的代码:
View v = getLayoutInflater().inflate(R.layout.test_shadow, null);
LinearLayout menuContainer = (LinearLayout) v.findViewById(R.id.menu);
popupWindow = new PopupWindow(menuContainer, LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT, true);
popupWindow.setOutsideTouchable(true);
float elevation = getResources().getDimension(R.dimen.menuElevation);//8dp
popupWindow.setBackgroundDrawable(getResources().getDrawable(
R.drawable.primary_background_light));// Shape Rect with solid color.
popupWindow.setElevation(elevation);
popupWindow.showAsDropDown(view, 150, 75);
item_background_light:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/blueLight">
<item android:id="@android:id/mask" >
<shape android:shape="rectangle">
<solid android:color="@color/primary_background_light"/>
</shape>
</item>
</ripple>
我一定是做错了什么,或者错误地使用带有 textview 的 PopupWindow,无法让海拔和波纹一起工作。为什么阴影会如此扭曲/过度绘制?