自定义警报对话框-android.R.id.Custom存在问题

自定义警报对话框-android.R.id.Custom存在问题,android,Android,我肯定我没有抓住要点,所以我希望有人能解释一下 我想在用户触摸ImageView时创建一个弹出窗口。我看了一下AlertDialog,文档上说 如果要显示更复杂的视图,请查找名为“自定义”的FrameLayout并将视图添加到其中: …使用以下代码 FrameLayout fl = (FrameLayout) findViewById(android.R.id.custom); fl.addView(myView, new LayoutParams(MATCH_PARENT, W

我肯定我没有抓住要点,所以我希望有人能解释一下

我想在用户触摸
ImageView
时创建一个弹出窗口。我看了一下
AlertDialog
,文档上说

如果要显示更复杂的视图,请查找名为“自定义”的FrameLayout并将视图添加到其中:

…使用以下代码

    FrameLayout fl = (FrameLayout) findViewById(android.R.id.custom);
    fl.addView(myView, new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
因此,作为测试,我在onCLick()方法中尝试了以下内容

    TextView tv = new TextView(this);
    tv.setText("Hello World");
    FrameLayout customFrameLayout = (FrameLayout) findViewById(android.R.id.custom);
    customFrameLayout.addView(tv, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
上面我调用的
addView
的最后一行抛出了一个
NullPointerException
,这让我觉得
android.R.id.custom
有问题

因此,问题是,上面的问题是什么,还有没有更好的方法来创建自定义弹出窗口(可能通过使用
对话框
类或扩展它)


注意:在本例中,我仅使用
TextView
作为测试,我想为实际弹出窗口添加更复杂的内容。

一个选项是创建
活动
,并使用对话框主题设置其样式:

<activity android:theme="@android:style/Theme.Dialog">

了解更多信息。

我认为您的问题是因为您没有“充气”布局。对于框架布局,您需要使用
LayoutInflater

使用以下代码:

LayoutInflater.from(context).inflate(android.R.id.custom, this, true)
这应该适用于FrameLayout。请在网站上阅读更多关于此的信息

也请查看


编辑:我也注意到这里也有一篇关于这个问题的文章:

检查Mossila的AlertDialog定制示例。我发现它们比谷歌的例子更有用

我将Mossila的代码直接剪切粘贴到我的项目中,它就成功了:-),然后我做了一些调整以满足我的需要


有趣的想法我来看看。使用startActivityForResult()这似乎是一种更好的方法来完成我需要的任务-谢谢。谢谢-我无法使用AlertDialog按我想要的方式工作,但我现在知道如何正确处理框架布局。您不能膨胀ID。您需要R.layout值才能工作。使用AlertDialog.setView(视图视图)向AlertDialog添加自定义视图。退房