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 库引起的,但很难说是哪一个.....我认为这对我们来说是无法解决的。
当按下工具栏上的 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 库引起的,但很难说是哪一个.....我认为这对我们来说是无法解决的。