2015-05-27 3 views
-1

Я хочу получить текущую тему и имя темы для каждого отдельного действия. Я использовал этот кодКак получить атрибуты темы (имя и идентификатор) используются для каждого отдельного действия в android

int theme = 0; 
     String themeName = null; 

     try { 
      String packageName = context.getPackageName(); 
      PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA); 
      theme = packageInfo.applicationInfo.theme; 
      themeName = getResources().getResourceEntryName(theme); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

код Manifest File

<application 
     android:name="com.ext.MyApp" 
     android:allowBackup="true" 
     android:icon="@drawable/launcher" 
     android:theme="@style/AppSoundOnTheme" > 

     <activity 
      android:name="com.ext.SplashActivity" 
      android:screenOrientation="portrait" > 
     </activity> 

    <activity 
      android:name="com.ext.HomeActivity" 
      android:screenOrientation="portrait" > 
     </activity> 
</application> 

styles.xml код

<style name="AppSoundOffTheme" parent="AppBaseTheme"> 

     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowBackground">@android:color/white</item> 
     <item name="android:soundEffectsEnabled">false</item> 
    </style> 

    <style name="AppSoundOnTheme" parent="AppBaseTheme"> 

     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowBackground">@android:color/white</item> 
     <item name="android:soundEffectsEnabled">true</item> 
    </style> 

и возвращает ту же тему идентификатор и имя для всех видов деятельности. Я думаю, что это дает атрибуты темы класса приложения. Как я могу найти различные атрибуты темы для всех действий отдельно.

+0

отправьте свой AndroidManifest.xml – Shahzeb

+0

Проверьте обновленный вопрос –

+0

определите тему в каждом действии отдельно, а затем получите доступ к теме id – Shahzeb

ответ

2

Вот быстрый способ я нашел:

String packageName = getPackageName(); 
     PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES|PackageManager.GET_META_DATA);   //Changed flags to fetch activies as well 
     ActivityInfo[] activities = packageInfo.activities;                        //retrieve activities in the app 
     for (ActivityInfo activityInfo : activities) { 
      try {                                  //Traverse for every activity 
       Log.d("theme", "Checking for " + activityInfo.name); 
       int theme = activityInfo.getThemeResource();                       //retrieve 'int' resource ID 
       String themeName = getResources().getResourceEntryName(theme); 
       Log.d("theme", themeName);                            //Retrieve theme name 
      } catch (Exception e) {  
       e.printStackTrace(); 
      } 
     } 

Это в значительной степени использует блок кода, который вы использовали, с немного подправить. Казалось, работа для меня, дайте мне знать, если у вас все еще есть проблемы.

PS: Вы можете поместить этот блок в блок try-catch.

+0

Спасибо за ваш ответ, она отлично работает, когда тема установлена ​​в файл манифеста, но когда она удалена из манифеста и установлена ​​во время выполнения при действии он возвращает идентификатор темы 0. В этом случае, как определить тему id. –

+0

Это будет зависеть от того, где вы размещаете звонок для этой проверки. Это нужно сделать после установки темы во время выполнения. – SlashG

+0

@SlashG Я вызываю 'setTheme (android.R.style.Theme_Holo_Light_Dialog);' перед 'setContentView' и пытается использовать ваш код в методе' onResume'. Но все же я получаю 'AppTheme' вместо' Theme_Holo_Light_Dialog' –

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