2012-03-02 13 views
3

私は、ユーザーのタイプに基づいて複数のテーマがあるように、私はブランドを変更しているタブレットアプリケーションを持っています。Androidアプリケーションのテーマ名を動的に見つけよう

現在適用されているテーマの名前を見つけて、そのテーマに基づいてバックエンド機能の変更を行うことができます。

イメージリソースを動的に設定する必要があります。これは、適切なテーマリソース(R.style.redtheme)を渡していれば問題ありませんが、動的に設定したいと思います。

TypedArray a = getTheme().obtainStyledAttributes(R.style.redtheme, new int[] {aTabResource.mDrawableAttrId}); 

スタイリングを行うには、カスタム属性を作成してスタイルでオーバーライドします。

テーマを取得する簡単な方法がない場合は、単に設定を保存します。

答えて

7

パッケージマネージャは、かなりのメタデータにアクセスできます。

それはこのようにアクセスすることができます。これは実行さ

int theme = 0; //0==not set 
try 
{ 
    String packageName = getClass().getPackage().getName(); 
    PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA); 
    theme = packageInfo.applicationInfo.theme; 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

した後、テーマはスタイルのリソースを持っています。

+4

これに少し問題があった場合、パッケージ名が間違っています。あなたは '文字列のpackageName = mContext.getPackageName()への最初の行を変更した場合ワークス;' 'mContext'アクティビティのコンテキストすなわち '民間ボイドcreateActivity(バンドルsavedInstanceState){ setContentView(Rです。 layout.welcome_layout); mContext = this; ' –

+3

getClass()。getPackage()は、私たちが探しているパッケージではありません。 mContext.getPackageName()を使用する必要があります。 – GetUsername

+0

getClass()。getPackage()は、アプリケーションのパッケージを返します。 mContext.getPackageName()は、現在のファイルに対応するパッケージ名を返します。 – Shellum

関連する問題