1

问题是我在我的活动中使用了一种 SurfaceView,我想在其中添加按钮。

我的问题是:

1) 如何在不调用 findViewById(...) 的情况下创建按钮实例?(因为surfaceView我没有布局)......

2) 我如何在画布上绘制这个按钮?

或者,也许您建议做其他事情?

我只关心我的屏幕上会有按钮,我可以实现类似 OnClickListener(...)....

提前感谢所有人!

4

2 回答 2

11

setOnClickListener 在没有 xml的情况下添加为 Activity 的按钮:

@Override  
        protected void onCreate(Bundle savedInstanceState) {  
            // TODO Auto-generated method stub  
            super.onCreate(savedInstanceState);  

            Button button= new Button (this);  
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(  
            FrameLayout.LayoutParams.WRAP_CONTENT,  
            FrameLayout.LayoutParams.WRAP_CONTENT);   
            params.topMargin = 0;  
            params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;  

            button.setText("dynamic Button");  
            addContentView(button, params);  
            // setContentView(tv);  
            button.setOnClickListener(new Button.OnClickListener(){  
            @Override  
            public void onClick(View v) {  

            }  

        });  
  }  
于 2012-07-09T20:25:57.723 回答
2

如果您在画布上绘制按钮(这是可能的),它将无法点击。你真正想要的是:

  • 将 SurfaceView 包装到框架布局中 - 如果您还将其他视图添加到同一布局中,它们将出现在 SurfaceView 上方;
  • 为上面提到的框架布局添加一个相对布局(这样您就可以定位按钮和可能的其他视图 - 如果您只有按钮,您可能只需设置边距就可以逃脱)。

像这样:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FrameLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <Button
            android:id="@+id/restartButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:onClick="whatever"
            android:text="look, I float above the SurfaceView!" />

    </RelativeLayout>

</FrameLayout>
于 2012-07-09T20:24:49.010 回答