2015-09-19 33 views
3

在這裏輸了。搜索了很遠,無法找到這個問題的答案...動態添加時不顯示自定義視圖

我有一個XML佈局,我有一個相對佈局,我用作不同視圖的佔位符。

<RelativeLayout 
    android:id="@+id/relVariableLayoutPlaceHolder" 

    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 

    android:background="@color/white" 
    > 

</RelativeLayout> 

在我的活動,我對用戶操作的按鈕按下,當他們按下它,我想自定義ClockView創建和動態添加。需要注意的是_variableLayoutonCreate方法完全設置:

public void onStartTimeClick(View view) 
{ 
    //Clean up any left over views 
    _variableLayout.removeAllViews(); 

    //Add clock view 
    ClockView clockView = new ClockView(_context); 
    _variableLayout.addView(clockView); 
} 

問題是,當按下按鈕時,沒有任何反應在屏幕上。但是,當我點擊屏幕上的TextView時,我可以看到它。

我上傳了一些圖片在這裏的前和點擊TextView後: http://imgur.com/a/9lebv

我可以想象這有什麼做的時鐘視圖後沒有被刷新屏幕畫,但我想盡組合invalidate()requestLayout()我能想到。有任何想法嗎?

回答

2

由於歷史的目的,我覺得我應該指出,大量的調試後,我想通了,我的問題是在ClockViewonMeasureonLayout功能。基本上他們形成得不好,並且沒有正確地測量子視圖以正確處理onLayout函數。

一旦我解決了這些問題,一切都按預期工作。

1

你試過設置LayoutParams嗎?

public void onStartTimeClick(View view) 
{ 
    //Clean up any left over views 
    _variableLayout.removeAllViews(); 

    //Add clock view 
    ClockView clockView = new ClockView(_context); 
    RelativeLayout.LayoutParams layout_params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    clockView.setLayoutParams(layout_params); 
    _variableLayout.addView(clockView); 
} 
+0

感謝您的建議。我實際上在ClockView對象中聲明瞭佈局參數,但是我刪除了這個參數,並且試圖用你的方式來確保。同樣的結果。 –

+0

您可以在Android設備上啓用一些調試選項以查看正在呈現的內容。還有Android工具中的Hierarchy Viewer來檢查它:http://developer.android.com/tools/help/hierarchy-viewer.html –

+0

有趣的...當我點擊Android工具中的Dump Hierarchy Button窗口中,ClockView出現在我的設備上。所以,這個觀點顯然存在,它只是最初沒有在設備上顯示。儘管如此,但至少這證明我並不瘋狂。 –