我想使用非root设备的应用程序更改Android设备的状态栏高度。 我找到了一种使用xPosed安装程序修改它的方法,但它适用于root设备。 我还尝试使用java反射技术在运行时获取状态栏的高度,并且能够设置新的高度,但新高度不会反映到状态栏UI。
以下是我尝试过的代码段:
field = c.getDeclaredField("status_bar_height");
field.setAccessible(true);
field.setInt("status_bar_height", 2000 & ~Modifier.FINAL);
我是否也需要修改dimens.xml文件,或者可以直接反映status_bar_height的值。 请让我知道我必须做出的任何改变。
提前致谢
答案 0 :(得分:0)
从这个方面来说,我正在尝试设置它,但它不受UI影响。最后,当我获得状态栏高度,然后它给出默认高度。
private void getApplicationStatusBar(){
Class<?> c = null;
Object object = null;
Field field = null;
try {
Log.v("TESTING_STATUS_BAR", "Before starting process");
try {
c = Class.forName("com.android.internal.R$dimen");
Log.v("C", "C bar: " + c);
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
Log.v("TESTING_STATUS_BAR", "After getting class");
try {
object = c.newInstance();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
Field[] declaredFields = object.getClass().getDeclaredFields();
try {
field = c.getDeclaredField("status_bar_height");
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
}
Log.v("TESTING_STATUS_BAR", "After getting status_bar_height_field");
field.setAccessible(true);
try {
field.setInt("status_bar_height", 80);
Log.v("field.getInt(\"status_bar_height\")", "Test: " + field.getInt("status_bar_height"));
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
Log.v("TESTING_STATUS_BAR", "After setting field");
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
Log.v("TESTING_STATUS_BAR", "Status bar: " + result);
}catch(Exception e){
}