LayoutInflater用于使用xml和View类

时间:2013-08-16 18:03:24

标签: android xml layout view

在我问我是否应该为我的项目使用XML或View类之后,我告诉我,我应该尽一切可能使用XML并使用其他类。你告诉我,XML无法实现动画Sprite,所以我想制作一个View Class。我得到了谷歌“LayoutInflater”的提示,我做了。

关于inflaters的信息不多,所以我访问了android的开发人员数据库,并试图找出它是如何工作的。

据我所知,你必须在主游戏活动的onCreate方法中加入一些东西(setContentView必须是mainXML)。

所以现在我在mainXML中创建了一个LinearLayout并将其命名为“container”,并使其成为名为“parent”的ViewGroup。

现在我已经创建了一个全局变量“私有视图视图”并编写了这一行:

view = LayoutInflater.from(getBaseContext()).inflate(new ViewClass(this), null);

现在的问题是,你不能给这样的课程充气,我认为我这样做的事情是错误的。

我是否有任何提示和技巧让我能够在mainXML中使用LinearLayout并且能够使我的View类中的内容出现在其中?

编辑:

让它无故障地工作,但如果我现在开始游戏就没有任何反应。

如果您有任何解决方案,请使用以下代码:

    super.onCreate(savedInstanceState);

    // inflate mainXML->
    View mainView = getLayoutInflater().inflate(R.layout.activity_game, null);
    // find container->
    LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);
    // initialize your custom view->
    view = new GameLayout(this);
    // add your custom view to container->
    container.addView(view);

    setContentView(R.layout.activity_game);

我的GameLayout:

public GameLayout(Context context) 
{
    super(context);     
}

@Override
protected void onDraw(Canvas canvas)
{
    canvas.drawColor(Color.BLACK);
}

1 个答案:

答案 0 :(得分:2)

有两种方法可以解决这个问题。我会告诉你其中一个。在致电onCreate(Bundle)之前,请在setContentView(...)中执行以下操作:

// inflate mainXML
View mainView = getLayoutInflater().inflate(R.layout.mainXML, null);

// find container
LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);

// initialize your custom view
view = new ViewClass(this);

// add your custom view to container
container.addView(view);

最后:

setContentView(mainView);

或者,您可以将自定义视图放在mainXML中:

<your.package.name.ViewClass
    android:id="@+id/myCustomView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    .... />