- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 NavigationView,里面有很多项目。
我正在尝试更改所选(已选中)项目的背景。我有一个选择器可以更改 itemTextColor 并且工作正常。
我有一个可绘制资源:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/selected_item_accent"/>
</shape>
还有我的选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/nav_view_background" android:state_checked="true" />
<item android:drawable="@drawable/nav_view_background" android:state_pressed="true" />
<item android:drawable="@android:color/transparent" />
</selector>
最后是 NavigationView
<android.support.design.widget.NavigationView
android:id="@+id/navView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/window_background"
app:itemTextColor="@drawable/selector_nav_view_text"
app:itemBackground="@drawable/selector_nav_view_background"
app:headerLayout="@layout/app_nav_header" />
按下状态按预期工作,但所选项目背景没有改变。
我想知道我在这里做错了什么。谢谢。
最佳答案
Change the color of a checked menu item in a navigation drawer
但我不认为它会工作,因为在源代码中,它从未设置 RecyclerView 的真实项目(不是菜单项目)检查。这意味着当您单击该项目时,只有菜单项被选中。所以背景当然不会变。
NavigationView 似乎不是为你想要的设计的。设计者可能认为,当用户单击 NavigationView 中的项目时,它应该关闭,应用程序会将用户导航到另一个页面。所以不需要setChecked()
;
但是有一个使用反射的解决方法。核心代码是这样的
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_menu_item_1:
// find out the position of the menu item in Adapter
// in my test demo, positionInAdapter = positionInMenu + 2
int positionInAdapter = NUMBER;
try {
Field presenterField = mNavigationSpan.getClass().getDeclaredField("mPresenter");
presenterField.setAccessible(true);
// get NavigationMenuPresenter from your NavigationView
NavigationMenuPresenter presenter = (NavigationMenuPresenter) presenterField.get(mNavigationSpan);
Field menuViewField = presenter.getClass().getDeclaredField("mMenuView");
menuViewField.setAccessible(true);
// get NavigationMenuView from NavigationMenuPresenter, it is a RecyclerView which contains the real items user seen
NavigationMenuView menuView = (NavigationMenuView) menuViewField.get(presenter);
// using RecyclerView.findViewHolderForAdapterPosition() to get the ViewHolder, then you can get the itemView
menuView.findViewHolderForAdapterPosition(positionInAdapter).itemView.setSelected(true);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
break;
}
return false;
}
});
setChecked
方法的 View ,所以我们使用 selected 而不是 checked;所以你需要要更改背景可绘制 xml,只需将 android:state_checked
更改为 android:state_selected
关于Android:itemBackground 的 NavigationView 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402150/
我一直试图在状态栏下方绘制 NavigationView header ,但它停留在状态栏后面。 我已经为我的 DrawerLayout 和 NavigationView 设置了属性 android:
我有以下 xml: 但我得到的错误是 no such class android.support.design.widget.NavigationView 这是我在 gradl
有一个两侧固定内容的简单 NavigationView。左 Pane 仅显示几个按钮,右 Pane 显示使用 NSView 包装在 NSViewRepresentable 中的图形。在 iPad 上以
我在我的应用程序中实现了抽屉,这是有限的项目。 但我可以在底部看到一些黑条。 这是代码 activity_main_drawer.xml
我知道不建议更改 NavigationView 项目高度。 但我需要稍微减少它,以便所有项目都适合而不滚动。 我试图创造一种风格: 16sp 30dp
我试图弄清楚为什么旋转设备会使内容消失。 这是我正在运行的确切代码: struct ContentView: View { @State private var selection = 0
我在 SwiftUI 中使用 NavigationView 时遇到了以下问题。 我在 TabView 中嵌入了一个 NavigationView,如下所示: var body: some View {
第一次启动应用程序后,我遇到了 NavigationView 问题。也就是说,当我展开导航 View 并单击“常规”时,您可以看到出现了红色背景的 fragment ,但导航 View 并没有自动消失
我有一个代码并制作了 NavigationLink 按钮,我写了文本和图像,但我的图像看不到。请帮助我。 VStack{ Image("Coachs") .re
我想在 NavigationView ( https://learn.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/navi
当我用作系统图像时,一切正常,但我有一个大小为 512x512 的 png 图像,我想让它适合在 navigationBarItem 内。图像几乎占据了整个屏幕,代码如下: var body: som
我制作了这个包含我的 navigationView 项目的 .xml。
我有一个图标问题,即它们不显示,只显示一个灰色方 block 。我该如何解决? 这是我的 navigation_menu.xml:
我想通过右滑动打开导航 View ,无论右滑动在哪里。默认情况下,您必须在侧面向右滑动,但我想从中间滑动以打开导航 View 最佳答案 您可以使用类似这样的方式增加抽屉的滑动边缘 public sta
我正在将我的 Android 应用程序从 SDK 22 升级到 SDK 23。 我刚刚将库版本更改为较新版本,我的 NavigationView 也发生了变化。选择项目时出现两个方 block ,我不
我有一个带有 NavigationView 和两个选项卡 a 和 b 的应用程序。 NavigationView 中的两个 MenuItem 对应于选项卡 a 和 b 因此,当选择选项卡 a 时,Na
我想用 checkbox 或 switch 创建一个 NavigationView,我只想在我的导航到项目切换中有这个功能,它应该像这样工作:我将一个开关转到另一个开关,它变为关闭状态。我做了一个开关
昨天我按照 2 个教程为我的抽屉实现了 NavigationView 组件,而不是使用 ListView。由于它更智能,我想知道是否有一种集成的方式来跟踪选择了哪个项目,以及当您选择一个新项目时,旧的
为什么将我的设备旋转到纵向模式时,我的 NavigationView 消失了。我已经为我的应用启用了所有方向。 import SwiftUI struct Stocks: Identifiable{
我在 UWP 应用程序中使用导航 View 控件,问题是当我单击后退按钮时,焦点元素不会更改为内容框架中显示的项目。例如,单击的元素是 camara、store、musica,然后按两次后退按钮以在
我是一名优秀的程序员,十分优秀!