Android - Material 设计 - NavigationView 滚动条和拇指颜色
Android - Material Design - NavigationView ScrollBar and Thumb Color
有什么方法可以自定义 NavigationView 滚动条和拇指颜色。
现在它被报告为错误并且不能是 customized.Link 因为错误是 here
有没有人在navigationview的滚动视图中做过定制,分享一下。
经过几个小时的 RnD 我发现这个解决方案有助于动态改变拇指颜色而不是 xml
private void navigationViewScrollThumbColor(NavigationView navigationView) {
if (navigationView != null) {
NavigationMenuView navigationMenuView = (NavigationMenuView) navigationView.getChildAt(0);
if (navigationMenuView != null) {
try {
Field mScrollCacheField = View.class.getDeclaredField("mScrollCache");
mScrollCacheField.setAccessible(true);
Object mScrollCache = mScrollCacheField.get(navigationMenuView);
Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar");
scrollBarField.setAccessible(true);
Object scrollBar = scrollBarField.get(mScrollCache);
Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class);
method.setAccessible(true);
method.invoke(scrollBar, getResources().getDrawable(R.drawable.color_of_your_Choice));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
有什么方法可以自定义 NavigationView 滚动条和拇指颜色。
现在它被报告为错误并且不能是 customized.Link 因为错误是 here
有没有人在navigationview的滚动视图中做过定制,分享一下。
经过几个小时的 RnD 我发现这个解决方案有助于动态改变拇指颜色而不是 xml
private void navigationViewScrollThumbColor(NavigationView navigationView) {
if (navigationView != null) {
NavigationMenuView navigationMenuView = (NavigationMenuView) navigationView.getChildAt(0);
if (navigationMenuView != null) {
try {
Field mScrollCacheField = View.class.getDeclaredField("mScrollCache");
mScrollCacheField.setAccessible(true);
Object mScrollCache = mScrollCacheField.get(navigationMenuView);
Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar");
scrollBarField.setAccessible(true);
Object scrollBar = scrollBarField.get(mScrollCache);
Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class);
method.setAccessible(true);
method.invoke(scrollBar, getResources().getDrawable(R.drawable.color_of_your_Choice));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}