如何从Activity处理自定义视图类?

时间:2014-01-20 15:56:00

标签: java android

我制作了一个自定义视图,我称之为Game.java

public class Game extends View {
    public Game(Context context, AttributeSet attrs) {
//here goes class
public void shot(){
}
//method I want to use sometime
}

这是我的Activity game.xml布局文件的一部分:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/root"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context=".GameActivity" >

    <com.vladdrummer.textmaster.Game
        android:id="@+id/game"
        android:layout_width="wrap_content"
        android:windowSoftInputMode="adjustResize"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
<View
        android:id="@+id/spareview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" />

等。 所以,在Activity中我只是做

setContentView(R.layout.game);

我将自定义的View类叫做Game.java作为屏幕的一部分

但我该如何解决呢?如果我这样做:

Game game;
game =(Game) findViewById(R.id.game);
game.shot();
它崩溃了。

当然,我可以这样做:

 Game game=new Game(this)
 setContentView(game);

并且可以访问游戏,因此它不会崩溃,但我也需要屏幕上的其他元素

请告诉我如何正确行事

1 个答案:

答案 0 :(得分:1)

您可以在xml中添加RelativeLayoutLinearLayout并将其放置在任意位置。您也可以在xml中拥有其他视图。这是一种方式

setContentView(R.layout.yourlayout); // infalte layout
RelativeLayout rl =(RelativeLayout) findViewById(R.id.relativeLayout);// initialize 
Game game=new Game(this);
rl.addView(game);  // ad view to container

但是您的布局中有自定义视图。您在GameView中缺少构造函数。你的方法也应该工作

阅读第4章通过Retro Meier Professional Android Devleopment创建用户界面