Android - 以编程方式创建按钮

时间:2016-05-06 14:24:00

标签: android button

我有一个名为GameLoop的Activity(扩展Activity的类)。 但是我没有使用xml文件进行布局,而是使用了一个类,因为我希望能够绘制到画布。 (我在某些教程中看到过这是你应该做的事情)

布局类名为GameLoopLayout。

我在布局类中运行了一个游戏循环,我可以将位图渲染到屏幕并控制FPS,一切都很好。 但现在我想添加一个按钮,但由于我没有使用xml布局文件,我不知道该怎么做。有人可以帮帮我吗?

我正在做什么:

GameLoopLayout:

Button button;
Canvas canvas;
SurfaceHolder surfaceHolder;

public GameLoopActivityLayout(Context context) {
    //all necessary initializations here...
    button = new Button(context);
    button.setEnabled(true);
    button.setLeft(10);
    button.setTop(20);
}

//render function called during game loop
private void render() {
    if (!surfaceHolder.getSurface().isValid())
        return;
    canvas = surfaceHolder.lockCanvas();
    //draw all game objects to canvas...
    button.draw(canvas);
    surfaceHolder.unlockCanvasAndPost(canvas);
}

2 个答案:

答案 0 :(得分:4)

尝试以下代码:

LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout2);

// add button
Button b = new Button(this);
b.setText("Button added dynamically!");
b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
b.setId(MY_BUTTON);
b.setOnClickListener(this);
ll.addView(b);

答案 1 :(得分:1)

创建自定义视图不会阻止您使用XML布局。例如:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.yourpackage.GameLoopLayout
        android:id="@+id/game_loop_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ... />

</FrameLayout>

您可以使用边距和android:layout_gravity将按钮放在任意位置。

在代码中,您可以像访问任何其他视图一样访问GameLoopLayout

// inside of onCreate()
mGameLoopLayout = (GameLoopLayout) findViewById(R.id.game_loop_layout);
// do setup with GameLoopLayout