标签归档:v21

【Android】AppCompat-v21下ActionBar的Overflow弹出菜单遮挡ActionBar问题解决

v7 support库更新到v21(Lollipop)之后,使用Overflow弹出的菜单(popup menu)会遮挡住ActionBar,一般情况下应该是菜单的顶部与ActionBar的下端平齐的,具体效果可以参考微信。

本身也不是啥大事情,但是强迫症泛起来了老是想解决他。由于v21比较新 ,能查到的资料比较少,着实折腾了不少功夫。废话少说:

<resources>
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light" />

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="actionOverflowMenuStyle">@style/OverflowMenu</item>
    </style>

    <style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
        <!--兼容Api 21之前的版本 -->
        <item name="overlapAnchor">false</item>

        <!-- Api 21-->
        <item name="android:overlapAnchor">false</item>
    </style>

</resources>

注意红字部分的内容,第二句可能会报错,提示android:overlapAnchor需要Api21,这种情况下可以分拆成两个style,一个放在value文件夹下:

    <style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
        <!--兼容Api 21之前的版本 -->
        <item name="overlapAnchor">false</item>
    </style>

然后新建一个value-v21文件夹,并新建style.xml,这里定义一个style:

    <style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
        <!-- Api 21-->
        <item name="android:overlapAnchor">false</item>
    </style>

同时,如果想改变菜单的位置或者宽度,可以按照以下修改:

    <style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
        <!--兼容Api 21之前的版本 -->
        <item name="overlapAnchor">false</item>
        <!-- Api 21-->
        <item name="android:overlapAnchor">false</item>
        <!-- 修改竖直方向上与屏幕顶端的距离为20dp -->
        <item name="android:">20dp</item>
    </style>

其他的属性自己按需去定义就好了。