android– 具有标准图标,标题和按钮的平台版本独立自定义对话框

android– 具有标准图标,标题和按钮的平台版本独立自定义对话框,第1张

概述我想要存档的内容:我想要一个带有自定义视图的对话框,但我想要AlertDialog中的标准图标,标题,按钮.我正在做的是这个自定义对话框类:publicclassCustomDialogextendsAlertDialog.Builder{privateActivityactivity;privateViewroot;publicCustomDialog(

我想要存档的内容:我想要一个带有自定义视图的对话框,但我想要AlertDialog中的标准图标,标题,按钮.

我正在做的是这个自定义对话框类:

public class CustomDialog extends AlertDialog.Builder {    private Activity activity;    private VIEw root;    public CustomDialog(Activity context) {        super(context);        this.activity = context;    }    public voID setVIEw(int layoutResID) {        LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        root = inflater.inflate(layoutResID, (VIEwGroup) activity.findVIEwByID(R.ID.dialog_root), false);        ScrollVIEw scroller = new ScrollVIEw(activity);        scroller.addVIEw(root);        setVIEw(scroller);    }    public voID setCustomVIEw(VIEw v) {        ScrollVIEw scroller = new ScrollVIEw(activity);        scroller.addVIEw(v);        setVIEw(scroller);    }    public VIEw getRoot() {        return root;    }    @OverrIDe    public AlertDialog create() {        AlertDialog dialog = super.create();        dialog.getwindow().getAttributes().wIDth = LayoutParams.MATCH_PARENT;        return dialog;    }}

这非常好,期望在Honeycomb和Honeycomb设备上TextVIEw颜色不正确.我正在使用Holo.light主题,因此标准文本颜色为黑色,但也是预蜂窝设备上对话框的背景颜色.在Honeycomb设备上,对话框背景为白色.所以我做的是,我在values文件夹的styles.xml中添加了dialogTextcolor = white,在values-v11文件夹中添加了dialogTextcolor = black.然后我必须将style属性添加到我在自定义对话框中使用的每个TextVIEw.这个问题一直持续到ICS,而且很清楚为什么 – > V11.我可以改变它,但是我希望有一个自定义对话框,它可以完成所有 *** 作:基于应用程序主题,对话框的宽度,预蜂窝,Honeycomb,ICS(以及将来会出现的任何内容)的文本颜色, AlertDialog中的标准按钮,标题,图标.

解决方法:

这里的诀窍是Context与主题相关联.该主题决定了各种事物,如默认文本颜色等.

在Honeycomb Dialogs之前总是有相同的主题,无论它们是从浅色或深色主题活动生成的,除了列表对话框是深色背景,浅色前景.在Honeycomb和Forward中,Dialogs具有不同的主题,这些主题由生成它们的Activity确定.

在对话框中膨胀内容时,请始终使用Dialog#getContext()方法返回的Context,而不是生成Dialog的Activity.而不是用于获取上面的LayoutInflater的代码行,请尝试:

LayoutInflater inflater = LayoutInflater.from(getContext());

编辑:看起来你正在使用AlertDialog.Builder而不是Dialog. AlertDialog.Builder在API 11(AndroID 3.0,a.k.a.Honeycomb)中为此目的添加了一个getContext()方法,但在此之前它不存在.您可以使用ContextthemeWrapper为旧设备构建自己的主题上下文.只是确保你永远不会尝试在旧版本的平台上调用该方法.您可以通过简单的检查来保护它:

Context themedContext;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {    themedContext = getContext();} else {    themedContext = new ContextthemeWrapper(activity, androID.R.style.theme_Dialog);}LayoutInflater inflater = LayoutInflater.from(themedContext);
总结

以上是内存溢出为你收集整理的android – 具有标准图标,标题和按钮的平台版本独立自定义对话框全部内容,希望文章能够帮你解决android – 具有标准图标,标题和按钮的平台版本独立自定义对话框所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1116350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存