5

Theme限られた数のテーマをプリコンパイルする代わりに ( OS 出荷のテーマとリソース xml の両方を意味する)を作成することは可能ですか? テーマは、ユーザー構成に基づいてアプリケーションの起動中に適用されます (値は実行時に変更されますが、スタイル設定されたアクティビティが作成される前に、値はセットではなく広範囲の http サービスから取得されます)。

カスタマイズされた View クラスをどこでも使用する必要があるまでは、他のソリューションを歓迎します。

私が今必要としているのは、グローバルなデフォルトの TextView テキストの色を設定することです。もちろん、どこでもサブクラスを使用したくありません。最適化を失うことによる大きな災害はないと思います。または、少なくともパフォーマンスの違いを確認することは素晴らしいことです。 .

4

2 に答える 2

1

アクティビティのContextThemeWrapper.getTheme()をオーバーライドし、独自のテーマを提供します。

または、super.onCreateを呼び出す前に、Activity.onCreateで事前定義されたテーマを適用し、独自のテーマリソースIDを指定します。

@Override
public void onCreate(Bundle si){
   setTheme(R.style.MyTheme);
   super.onCreate(si);
}

xmlスタイルファイルでテーマを使用することをお勧めします。一部のシステムテーマを継承し、必要な属性のみをオーバーライドできます。style.xmlの例:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="MyTheme" parent="android:Theme.Holo">
      <item name="android:textColorPrimary">#0f0</item>
   </style>
</resources>

スタイリングとテーマは強力ですが、詳細なドキュメントがなく、高レベルのツールもありません。

于 2012-08-07T08:53:37.553 に答える
1

これは少しハックすぎるかもしれませんが、ここにショットがあります。

public class BaseActivity extends Activity{

    @Override
    public void onResume() {
        ViewGroup root = ((ViewGroup)findViewById(android.R.id.content));
        applyTheme(root);
    }

    private void applyTheme(View view){
        if (view instanceof ViewGroup && ((ViewGroup) view).getChildCount() !=0){
            for (int i = 0; i< ((ViewGroup) view).getChildCount(); i++){
                applyTheme(((ViewGroup) view).getChildAt(i));
            }
        } else {
            if (view instanceof TextView){
                ((TextView) view).setTextColor(your_color_from_server_here);
            }
        }
    }
}

そして、すべてのアクティビティで BaseActivity を拡張します。

于 2012-08-13T13:10:46.420 に答える