2015-04-28 24 views
0

下面是添加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方法被調用,並且沒有例外,但視圖沒有更新。任何人都可以在這裏指出問題嗎?

+0

它看起來對我像你在膨脹您查找和更新'R.id.caller_name'一個新的層次。除非你在其他地方附加了新增的視圖層次結構(更新視圖),否則它將永遠不可見。 –

+0

不需要再次對'mainView'進行膨脹,只需使用已添加到'windowManager'中的'mainView'。 – user370305

+0

問題出在SYSTEM_OVERLAY上。如果類型是別的,一切都很好。 – intrepidkarthi

回答

0

更新你希望的特定視圖來修改:

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