2013-07-06 3 views
0

У меня есть аннотация UltraSuperActivity унаследовано от абстрактного унаследовано MyActivity. В OnCreate из я называю setContentView(R.layout.activity_super);, который содержит HorizontalScrollLayout, в котором я добавить макет текущей деятельностиAndroid: программно добавленный макет игнорирует тему

добавить макет, как это в OnCreate в 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); 

Inflater устанавливается в 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. Если я добавлю MyButton стиль в activity_layout к кнопке, она работает, но я не понимаю, почему она не использует настроенную тему.

ответ

2

Я предполагаю, что вы не получаете вашу тему деятельности, а вы получаете тему приложения, которое в данном случае является, скорее всего, по умолчанию. Попробуйте заменить getApplicationContext() на getContext() (или «this»). Общей ошибкой является мысль о том, что контекст приложения и контекст активности - одно и то же.

+1

inflater = (LayoutInflater) getBaseContext(). GetSystemService (Context.LAYOUT_INFLATER_SERVICE); сделал волшебство :) спасибо – Ragnar

0

Вы не используете надлежащий метод inflate. Вы должны использовать inflate(int, ViewGroup, boolean), где ViewGroup не имеет значения NULL. Прочитайте эту статью для получения дополнительной информации по этому вопросу:

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

+0

Я изменил надув для использования LinearLayout activity_layout = (LinearLayout) inflater.inflate (R.layout.activity_layout, (ViewGroup) findViewById (R.id.application_contents), false); но это не имеет никакого эффекта, я делаю это неправильно? – Ragnar

Смежные вопросы