在没有任何布局的情况下向活动添加按钮
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 动态添加角度组件?
如何在不覆盖现有样式的情况下向 WPF 自定义控件添加触发器?