我试图在全屏(沉浸式模式)下打开下拉微调器,但问题是当下拉打开时它会在底部显示半透明的导航栏。选择一个选项时,导航栏会隐藏,但只要下拉菜单可见,导航栏就会保持可见。
我能够在对话框 fragment 中删除此行为,因为我有 show(FragmentManager manager, String tag)
方法来覆盖和添加此
getDialog().getWindow().getDecorView().setSystemUiVisibility(getActivity()
.getWindow().getDecorView().getSystemUiVisibility());
// Make the dialogs window focusable
again.getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
但微调器中没有与此类似的方法。我尝试使用父级中的监听器实现将这些方法放在 performClick()
中,但仍然没有成功。
这个问题的任何解决方案。
最佳答案
为java用户创建这个静态类
import android.widget.ListPopupWindow;
import android.widget.PopupWindow;
import android.widget.Spinner;
public static void avoidSpinnerDropdownFocus(Spinner spinner) {
try {
Field listPopupField = Spinner.class.getDeclaredField("mPopup");
listPopupField.setAccessible(true);
Object listPopup = listPopupField.get(spinner);
if (listPopup instanceof ListPopupWindow) {
Field popupField = ListPopupWindow.class.getDeclaredField("mPopup");
popupField.setAccessible(true);
Object popup = popupField.get((ListPopupWindow) listPopup);
if (popup instanceof PopupWindow) {
((PopupWindow) popup).setFocusable(false);
}
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Kotlin 用户使用此扩展功能
import android.widget.ListPopupWindow
import android.widget.PopupWindow
import android.widget.Spinner
fun Spinner.avoidDropdownFocus() {
try {
val listPopup = Spinner::class.java
.getDeclaredField("mPopup")
.apply { isAccessible = true }
.get(this)
if (listPopup is ListPopupWindow) {
val popup = ListPopupWindow::class.java
.getDeclaredField("mPopup")
.apply { isAccessible = true }
.get(listPopup)
if (popup is PopupWindow) {
popup.isFocusable = false
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
您需要在 OnCreate
方法中从您的 spinner
调用该方法,或者当您的 Spinner
充气时或在使用它之前的任何时间.
spinner.avoidSpinnerDropdownFocus()
感谢 kakajika GitHub 用户 kakajika https://gist.github.com/kakajika/a236ba721a5c0ad3c1446e16a7423a63
关于Android:全屏微调下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45817144/