我正试图在使用旧Android操作系统的嵌入式系统的导航栏上以编程方式更改一些内容。我缩小到处理下面导航栏的班级。
这个对象好像在这里宣布:
第238行
私有NavigationBarView mNavigationBarView = null;
有没有办法以编程方式获取指向此对象的指针?我唯一能找到的代码是获取更大容器的代码,就像以编程方式隐藏导航栏一样。
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
然而,这还不够。我想深入到navbar drawables。
非常感谢任何线索。
谢谢。P.S。由于它是一个嵌入式系统,所以如果我改变操作系统就好了,因为它永远不会出现在谷歌商店。
答案 0 :(得分:1)
无法通过反射获取PhoneStatusBar中的mNavigationBarView
对象。
这个对象生活在进程com.android.systemui
中,你自己的进程无法使用反射访问另一个进程的对象。
一种可能的方法是使用Xposed框架。通过PhoneStatusBar方法中的一些挂钩,您可以访问mNavigationBarView
对象。
已经有一些模块可以修改navigationBar,例如:Xperia/AOSP NavBar Buttons 。您可以按照modify SystemUI's clock style using Xposed framework。
这个教程进行操作