查看通货膨胀和自定义视图

use*_*201 4 android android-layout

我在我的应用程序中有一个自定义视图,我使用视图中的onDraw()函数绘制.它还需要来自ACtivity的一些数据来绘制图形.因此,而不是使用标准setContentView(R.layout.myview)我使用以下 -

MyView mv = new MyView(this, userData);
setContentView(mv);
Run Code Online (Sandbox Code Playgroud)

这似乎有效,直到我textview在customview上面添加了一个.然后我意识到上面的代码根本没有显示textview.也onFinishInflate()永远不会被调用.在这种情况下,我是否必须自己夸大布局?如果是这样,我也必须自己调用这个onDraw()功能吗?

谢谢, - P.

Cri*_*ian 6

onFinishInflate ()

完成从XML扩展视图.在添加所有儿童观点后,这被称为通胀的最后阶段.

当您通过代码(new ...)创建视图时,您不会对其进行膨胀...另一方面,如果您在XML中声明它或使用类似的东西,getLayoutInflater().inflate(R.layout.your_view,null,null);那么您将对其进行膨胀(和onFinishInflate).

无论你怎么做,onDraw都会调用方法; 所以你不必手动调用它.

顺便说一句......将自定义视图保留在XML上总是一个好主意,即使它需要数据.所以你至少有两个选择:

setContentView(R.layout.your_layout);
YourCustom custom = (YourCustom)findViewById(R.id.custom);
custom.setUserData(userData);
Run Code Online (Sandbox Code Playgroud)

或者...您可以从自定义视图中获取该数据(不推荐):

// inside your custom view...
UserData userData = Someclass.getUserData(getContext());
// etc... so that you don't have to pass it from the activity
Run Code Online (Sandbox Code Playgroud)