0

我在當前的Android項目中很頭疼。我想檢測當前頁面的變化。例如,有一個TextView來顯示每秒更新的設備時間。如何檢測這種變化?我搜索了很多(謝謝),但沒有爲我工作。Android - onGlobalLayout不被ViewTreeObserver調用

更多信息:我不使用標準的活動來創建頁面。我的方法是: 所有小部件都創建爲View對象,然後用它來創建容器對象。之後,我只是處理這個容器,以定期繪製一個帶有VSYNC回調Choreographer.FrameCallback的畫布。

事實上,它可以繪製。一切都好。除了:我只想在頁面內容改變時畫畫布。回到我的開始問題,如何檢測這個「變化」的事件?我確信有某種回調來處理這個問題。我使用了以下解決方案,但onGlobalLayout在textview文本更改時未調用。

CanvasAppViewContainer container;//CanvasAppViewContainer extends AbsoluteLayout 
LayoutInflater li =(LayoutInflater)getService().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  

View view = li.inflate(resourceId, null);//passed a correct the layout id 
container = new CanvasAppViewContainer(getService(), view, getWidth(), getHeight(), getSurface()); 
rootView = (LinearLayout) findViewById(R.id.rootView); //root element of layout 
rootView.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() { 
    @SuppressLint("NewApi") 
    @Override 
    public void onGlobalLayout() { 
     Log.d("test", "onGlobalLayout"); 
    } 
}); 

BTW:即使我註冊視圖樹觀察員的TextView,onGlobalLayout仍然不叫。

感謝

回答

0

onGlobalLayout()只叫佈局變化時。當您想要檢測文本中的更改使用TextView.addTextChangedListener()

+0

謝謝。實際上,如果爲textview註冊視圖樹觀察者,當文本改變時,onGlobalLayout()也在正常活動中被調用。 – Vincent

+0

也許文本的改變會導致TextView改變它的大小,這會在你的「正常」活動中觸發OnGlobalLayout()? – murf

+0

我只是重複設置相同的文字。 – Vincent

相關問題