Проблема с обновлением представления внутри WindowManager в Android

Вот код для добавления WindowManager, чтобы оставаться поверх других представлений.

private View mainView;
private WindowManager.LayoutParams params;
windowManager = (WindowManager) getSystemService(Service.WINDOW_SERVICE);
       params = new WindowManager.LayoutParams(
               WindowManager.LayoutParams.WRAP_CONTENT,
               WindowManager.LayoutParams.WRAP_CONTENT,
               WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
               WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_FULLSCREEN,
               PixelFormat.TRANSLUCENT);

params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
windowManager.addView(mainView, params);

Это работает нормально. Раздувание макета внутри оконного менеджера и динамическое обновление макета. Но я не могу обновить представление.

LayoutInflater inflater = LayoutInflater.from(CallTimerService.this);
       mainView = inflater.inflate(R.layout.call_dialog, null);
callerNameTv = (TextView) mainView.findViewById(R.id.caller_name);
callerNameTv.setText(name);

Вызывается метод setText, и исключения нет, но представление не обновляется. Может ли кто-нибудь указать на проблему здесь?


person intrepidkarthi    schedule 28.04.2015    source источник
comment
Мне кажется, что вы раздуваете новую иерархию, в которой вы находите и обновляете R.id.caller_name. Если вы не прикрепите эту недавно расширенную иерархию представлений (с обновленным представлением) где-то еще, она никогда не будет видна.   -  person MH.    schedule 28.04.2015
comment
Не нужно снова надувать mainView, просто используйте тот же mainView, который вы добавили к windowManager.   -  person user370305    schedule 28.04.2015
comment
Проблема с SYSTEM_OVERLAY. Если типа что-то другое, то все хорошо.   -  person intrepidkarthi    schedule 29.04.2015


Ответы (1)


Обновите конкретный вид, который вы хотите изменить:

    // Get the view params
    WindowManager.LayoutParams paramNameTV = (WindowManager.LayoutParams) callerNameTv .getLayoutParams(); 
    //update the view layout
    windowManager.updateViewLayout(callerNameTv, paramNameTV);
person user465363    schedule 08.09.2015