如何在android中更改/修改状态栏的高度。我们可以通过反射来做,还是可以修改android中的dimen.xml文件

时间:2016-05-12 17:01:06

标签: android

我想使用非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的值。 请让我知道我必须做出的任何改变。

提前致谢

1 个答案:

答案 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){

    }