在没有任何布局的情况下向活动添加按钮

时间:2012-07-09 20:15:56

标签: android android-layout android-widget android-view

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

我的问题是:

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

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

或者你建议做别的事情?

所有我关心的是我的屏幕上会有按钮,我可以实现像OnClickListener(...)....

先谢谢!

2 个答案:

答案 0 :(得分:8)

使用setOnClickListener添加为活动按钮而不使用xml:

@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(tv, params);  
            // setContentView(tv);  
            button.setOnClickListener(new Button.OnClickListener(){  
            @Override  
            public void onClick(View v) {  

            }  

        });  
  }  

答案 1 :(得分:1)

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

  • 将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>