【问题标题】:adding a button to activity WITHOUT any layout在没有任何布局的情况下向活动添加按钮
【发布时间】:2012-07-09 06:52:20
【问题描述】:

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

我的问题是:

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

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

或者您可能建议做其他事情?

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

提前谢谢大家!!!

【问题讨论】:

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


    【解决方案1】:

    使用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) {  
    
                }  
    
            });  
      }  
    

    【讨论】:

    • tnx 很多我是 android 世界的新手,它确实有助于更好地理解一些概念,所以谢谢!但我会使用 fdreger 答案,因为它更适合我的代码
    • 这是更好的答案
    【解决方案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>
    

    【讨论】:

    • 我不知道我可以在 xml 布局中添加一个对我非常有用的 surfaceView 非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多