如何在Activity上方叠加一个视图?

4

有没有一种方法可以在当前 Activity 的视图顶部动态添加一个 View?需要注意的一点是,这需要从另一个只能访问 Activity context 的类中完成。

示例:

public class ActivityClass extends Activity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        …       

        PopupClass popup = new PopupClass(this);
        popup.showPopup();
    }

}


public class PopupClass
{
    Context context;

    void Popup(Context ctx)
    {
        context = ctx;
    }

    void showPopup()
    {
        // Add a view on top of the current Activity.
    }
}

有没有一种方法让PopupClass只知道上下文就能够向当前Activity添加一个视图? PopupClass对Activity不了解,也不能将视图传回给ActivityClass以供添加。

你想让PopupClass为ActivityClass添加什么样的“视图”? - Squonk
这将是一个在点击时会执行某些操作的横幅。因此,基本上是一个具有背景可绘制图像的视图,并且还与clickListener相关联。 - triad
3个回答

4

1
谢谢回复,但我不认为这解决了问题。对话框示例是一个活动,会阻止当前的活动。当前的活动应该保持焦点,并将新视图添加到其上。 - triad
对话框确实会覆盖活动,但不会阻止活动代码的执行。如果您不希望任何内容覆盖您的活动,则唯一的解决方案是为布局分配一个ID并以编程方式更新视图。这很混乱,使维护视图更加困难。有关示例,请参见:http://technicalmumbojumbo.wordpress.com/2011/12/08/android-tutorial-series-layout/ - Someone Somewhere
在那个WordPress教程中,寻找这一行For programmatic implementation refer to the LinearLayoutActivity class below,他会向你展示如何从头开始编程创建布局。然而,由于您已经有了一个布局(您只想微调它),请在XML中为布局分配一个ID,然后在活动中使用findViewById()获取对布局的引用。然后,就像在教程中一样,以编程方式创建小部件。当小部件准备好时,使用layout.addView(widget)。 - Someone Somewhere

1

0
为什么不让PopClass扩展Activity,并在AndroidManifest.xml属性中为PopupClass活动设置android:theme="@android:style/Theme.Dialog"?
然后在ActivityClass中,您可以使用示例中显示的代码而不是使用...
Intent i = new Intent("PopupClass.class");
startActivityForResult(i);

当 PopupClass activity 完成时,它可以在另一个 Intent 中设置返回数据并完成。

然后在 ActivityClass 中,您需要重写 onActivityResult(...) 方法来处理返回的 Intent。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接