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仍然不叫。
感謝
謝謝。實際上,如果爲textview註冊視圖樹觀察者,當文本改變時,onGlobalLayout()也在正常活動中被調用。 – Vincent
也許文本的改變會導致TextView改變它的大小,這會在你的「正常」活動中觸發OnGlobalLayout()? – murf
我只是重複設置相同的文字。 – Vincent