Android:以编程方式添加布局忽略主题

时间:2013-07-06 11:31:15

标签: android android-layout android-theme

我有UltraSuperActivity继承的抽象SuperActivity继承的抽象MyActivity。在OnCreate的{​​{1}}中,我致电SuperActivity,其中包含setContentView(R.layout.activity_super);,我在其中添加了当前活动的布局

我在HorizontalScrollLayout的{​​{1}}中添加了这样的布局:

OnCreate

Inflater在MyActivity中设置为静态:

LinearLayout activity_layout = (LinearLayout)inflater.inflate(R.layout.activity_layout, null);
HorizontalScrollView application_contents = (HorizontalScrollView)findViewById(R.id.application_contents);
HorizontalScrollView.LayoutParams cp = new HorizontalScrollView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
some more code...
application_contents.addView(activity_layout, cp);

我使用的是UltraSuperActivity样式,每个按钮都有一个主题。这适用于if(inflater == null){ inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.setFactory(CustomViewFactory.getInstance()); // we add our factory for our views } 布局,但它在MyButton中不起作用,并且显示为常用的Android按钮。主题在activity_super中设置。如果我在activity_layout中将AndroidManifest.xml样式添加到按钮,则可以使用,但我不明白它为什么不使用设置主题。

2 个答案:

答案 0 :(得分:4)

我猜你没有得到你的活动主题,而是你得到了应用程序主题,在这种情况下很可能是默认的。尝试用getContext()(或" this")替换getApplicationContext()。一个常见的错误是认为应用程序上下文和活动上下文是一回事。

答案 1 :(得分:0)

您没有使用正确的inflate方法。您应该使用ViewGroup不为null的inflate(int, ViewGroup, boolean)。阅读本文以获取有关此事的更多信息:

http://www.doubleencore.com/2013/05/layout-inflation-as-intended/