2

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,无法让海拔和波纹一起工作。为什么阴影会如此扭曲/过度绘制?

效果图

4

1 回答 1

1

似乎 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>
于 2015-08-11T09:21:32.733 回答