Как изменить яркость из окна диспетчера окон?

Я добавил представление в диспетчере окон внутри onCrate(). В этом представлении я использую панель поиска, и когда панель поиска изменяется, я хочу соответственно изменить яркость на низкий или высокий уровень. Но если я помещу панель поиска в любой другой вид, кроме диспетчера окон, я могу изменить яркость, но требуется изменить яркость из оконного менеджера. Пожалуйста, помогите мне.

Проблема может заключаться в использовании двух оконного менеджера. Один для добавления оконного менеджера, а второй для изменения атрибута яркости оконного менеджера. Когда я использую тот же объект оконного менеджера и пытаюсь переместить панель поиска. Я получаю исключение, поскольку окно уже добавлено, мы не можем изменить его свойство после добавления оконного менеджера.

manager = ((WindowManager) getApplicationContext().getSystemService(
                Context.WINDOW_SERVICE));

        localLayoutParams = new WindowManager.LayoutParams();
        localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
        localLayoutParams.gravity = Gravity.TOP;
        localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
        localLayoutParams.flags = 0x80000000 | localLayoutParams.flags;
        localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        localLayoutParams.height = (int) (80 * getResources()
                .getDisplayMetrics().scaledDensity);
        localLayoutParams.format = PixelFormat.TRANSPARENT;
        LayoutInflater inflater = getLayoutInflater();
        Constant.lp = localLayoutParams;
        overlay = inflater.inflate(R.layout.systembar_overlay, null);
        linearLayout = new LinearLayout(getApplicationContext());
        linearLayout.setLayoutParams(new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        linearLayout.addView(overlay);
        Animation animation = AnimationUtils.loadAnimation(
                getApplicationContext(), R.anim.fade_in);
        overlay.startAnimation(animation);
        mSeekBarRedLine = (ImageView) overlay.findViewById(R.id.seekbarredline);
        initLayout(overlay);
        manager.addView(linearLayout, localLayoutParams);



@Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            localLayoutParams.screenBrightness = progress / 750.0f;
            getWindow().setAttributes(localLayoutParams);
        }

person user3732498    schedule 15.06.2015    source источник
comment
Попробуйте перейти по следующей ссылке: c-sharpcorner.com/UploadFile/1e5156/   -  person Rajan Bhavsar    schedule 15.06.2015
comment
Привет, это решение не работает для Android ниже 5.0. Это означает, что оно не работает ниже леденца на палочке. Не могли бы вы дать мне еще несколько способов решить эту проблему.   -  person user3732498    schedule 16.06.2015


Ответы (1)


Если вы определяете WindowManager, linearLayout и localLayoutParams как поля, вы можете использовать следующий метод:

 @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        localLayoutParams.screenBrightness = progress / 750.0f;
        manager.updateViewLayout(linearLayout, localLayoutParams);
    }
person yshahak    schedule 21.10.2015