当包含 textview 具有波纹或选择器并被单击时,PopupWindow 高度变为 distorted/darker

PopupWindow elevation becomes distorted/darker when containing textview has ripple or selector and is clicked

以编程方式创建 PopupWindow 并设置其高度。阴影最初看起来像预期的那样,但是一旦单击文本视图,无论它是否具有波纹或选择器作为背景,阴影都会发生变化。它看起来像变黑或阴影相互叠加。

我尝试了很多替代方案,但仍然得到相同的效果。

正在模拟器 v21+ Lollipop 上进行测试。我没有用于测试的 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>

膨胀并设置弹出窗口的代码:

    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>

我一定是做错了什么,或者不正确地使用 PopupWindow 和 textview,无法让高度和波纹一起工作。影子为什么会这样distorted/overdraw?

Image of the effect

popupWindow 的可绘制背景似乎必须具有至少为 1 的角半径值。以前这个值被遗漏导致了问题。

primary_background_light:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/primary_background_light"/>
    <corners android:radius="1dp"/>
</shape>