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

Posted

技术标签:

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

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

我的问题是:

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

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

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

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

提前谢谢大家!!!

【问题讨论】:

【参考方案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_
    android:layout_ >

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_
        android:layout_ />

    <RelativeLayout
        android:layout_
        android:layout_ >

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

    </RelativeLayout>

</FrameLayout>

【讨论】:

我不知道我可以在 xml 布局中添加一个对我非常有用的 surfaceView 非常感谢!!

以上是关于在没有任何布局的情况下向活动添加按钮的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 有没有办法在不覆盖子视图的任何手势的情况下向视图添加手势?

如何在没有预先确定的 ViewContainerRef 的情况下向 DOM 动态添加角度组件?

如何在不替换旧文本的情况下向 TextView 添加文本?

如何在不覆盖现有样式的情况下向 WPF 自定义控件添加触发器?

在 Swift 3.0 中实现滑动以在没有导航栏的情况下向后导航

如何在不影响周围文本的情况下向 div 添加文本?