[英]Android: programmatically added layout ignores theme
我有由SuperActivity
继承的抽象UltraSuperActivity
继承的抽象MyActivity
。 在SuperActivity
OnCreate
,我调用setContentView(R.layout.activity_super);
其中包含HorizontalScrollLayout
,我在其中添加当前活动的布局
我在MyActivity
中的OnCreate
中添加这样的布局:
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
在UltraSuperActivity
设置为静态:
if(inflater == null){
inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.setFactory(CustomViewFactory.getInstance()); // we add our factory for our views
}
我正在使用MyButton
样式,它作为主题被赋予每个按钮。 这适用于activity_super
布局,但它在activity_layout
不起作用,并且显示为常用的Android按钮。 主题在AndroidManifest.xml
设置。 如果我将activity_layout
中的MyButton
样式添加到按钮它可以工作,但我不明白它为什么不使用设置主题。
我猜你没有得到你的活动主题,而是你得到了应用程序主题,在这种情况下很可能是默认的。 尝试用getContext()(或“this”)替换getApplicationContext()。 一个常见的错误是认为应用程序上下文和活动上下文是一回事。
你没有使用正确的inflate
方法。 您应该使用ViewGroup不为null的inflate inflate(int, ViewGroup, boolean)
。 阅读本文以获取有关此事的更多信息:
http://www.doubleencore.com/2013/05/layout-inflation-as-intended/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.