S-Pen强制菜单列表跳回顶部

S-Pen forces menu list to jump back to the top

当按下工具栏上的 OverflowMenuButton 时,S-Pen 在创建后无法使用 MenuDropDownListView 正确滚动(请参见下面的 gif)。

当 S-Pen 接触时,菜单会强制返回顶部。

这个问题似乎并不是 MenuDropDownListView 独有的。当从 AndroidX 库 (androidx.appcompat.widget.PopupMenu) 滚动 PopupMenu 时也会发生这种情况。但是,在使用标准 Android 库 (android.widget.PopupMenu) 时,此行为 会按预期工作 PopupMenu 场景对我遇到的问题不太重要,但它可能仍然相关。

下面的 gif 是在三星 Galaxy Note20(Android 11,标准 ROM)上记录的使用 S-Pen 尝试滚动到列表底部的示例:

以下 gif 是尝试滚动到每个 PopupMenu 的底部,记录在 Samsung Galaxy Note20(Android 11,stock ROM)上:

Android PopupMenu Scrolling Behaviour (working)

AndroidX PopupMenu Scrolling Behaviour (not working)

溢出菜单的代码如下:

res/menu/example_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
>
    <item android:id="@+id/item1"
          android:icon="@drawable/ic_5g"
          android:title="Item 1"
          app:showAsAction="ifRoom"
    />

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

    <item android:id="@+id/item3"
          android:title="Item 3"
          app:showAsAction="never">
        <menu>
            <item android:title="TOP ITEMS HERE" />
            <item android:title="TOP ITEMS HERE" />
            <item android:title="TOP ITEMS HERE" />
            <item android:title="TOP ITEMS HERE" />
            <item android:title="TOP ITEMS HERE" />
            <item android:title="TOP ITEMS HERE" />
            <item android:title="TOP ITEMS HERE" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />
            <item android:title="Sub Item" />

             <!--  REPEATING...  -->

        </menu>
    </item>


</menu>

MainActivity.java

package com.example.popupmenutest;

import android.view.Menu;
import android.view.MenuInflater;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.example_menu, menu);
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

如果在我的 Galaxy Note 20 Ultra (Android 12) 上使用真正的 USB 鼠标,行为相同,所以我认为这是使用指针时导致的错误(鼠标或手写笔在悬停项目时是相同的) .

这可能是由三星实现或 androidx 库引起的,但很难说是哪一个.....我认为这对我们来说是无法解决的。