启用 FLAG_LAYOUT_NO_LIMITS 时选项子菜单不在屏幕上

Options sub-menu goes off-screen when enabling FLAG_LAYOUT_NO_LIMITS

我正在设置 WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 标志以使状态栏与 ActionBar 重叠,并且我有一个带有子菜单的选项菜单。当我点击子菜单时出现问题-菜单项,然后它显示在屏幕外(几乎看不到它的左边缘)。

当我删除下面的标志时,子菜单正常显示。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
                           WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

这是菜单

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:title="Items"
        app:showAsAction="never">
        <menu>
            <item
                android:id="@+id/item2"
                android:title="item 2"
                app:showAsAction="never" />
            <item
                android:id="@+id/item3"
                android:title="item 3"
                app:showAsAction="never" />

        </menu>
    </item>
    
    <item
        android:id="@+id/item1"
        android:title="Item 1"
        app:showAsAction="never" />

</menu>

还有 activity 如果有帮助的话

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
                                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

如何在保持状态栏与 ActionBar 重叠的情况下解决此问题?

试试这个:

设置setFlags的第二个参数为:

WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 

而不是

WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

或者简单地用这个替换你的代码:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);