2015-09-19 34 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出现在我的设备上。所以,这个观点显然存在,它只是最初没有在设备上显示。尽管如此,但至少这证明我并不疯狂。 –