1

私のアプリでは、ユーザーが背景色、フォント サイズを選択できるようにしています。これらを選択すると、この新しい背景色がアクティビティとアプリケーションの各ビューに適用されます。

では、この背景色を変更してアクティビティのすべてのビューに適用するにはどうすればよいでしょうか?

これをアプリケーションのテーマ プロパティとして実現したいと考えています。つまり、変更された色は、アプリが起動されるたびに、アプリの各アクティビティのビューに反映される必要があります。

これを行う簡単な方法はありますか?それ以外の場合は、ビューごとに個別に背景色のプロパティを設定する必要があります。

この質問に関連するすべての投稿では、既存のテーマ間の変更について説明しています。

4

1 に答える 1

0

ユーザーが選択した背景色を取得したら、それを共有設定に保存できます。次に、各アクティビティのonCreateで、sharedpreference値を受け取り、背景色を設定できます。

背景色の設定は簡単です。

view.setBackgroundColor(Color.GREEN);

sharedpreferencesを操作するには:

SharedPreferences sp = getSharedPreferences("color", MODE_PRIVATE);

String color = sp.getString("colorChoice", "BLACK");

上記のコードは、sharedpreferences型の変数を宣言しています。「color」はグループのようなものです。次に、sp.getString()を呼び出すString変数を宣言します。「BLACK」がデフォルト値です。

共有設定に保存するには:

Editor edit = sp.edit();
edit.putString("colorChoice", "Whatever the user selects here");
edit.commit();

上記のコードは、ユーザーが背景の色を選択するときに使用できます。

ここで、アクティビティ内のすべてのビューで機能させたい場合は、引数としてビューを持つメソッドを作成するか(ビューごとにこのメソッドを呼び出す必要があります)、ビューグループを使用してその子を呼び出します。このようなもの:

    private void unbindDrawables(View view){
    if (view.getBackground() != null){
        view.getBackground().setCallback(null);
    }
    if (view instanceof ViewGroup){
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++){
            unbindDrawables(((ViewGroup) view).getChildAt(i));

        }//for loop
        try {
            ((ViewGroup) view).removeAllViews();
        } catch (UnsupportedOperationException e) {
            e.printStackTrace();
        }
    }

この方法では背景色が設定されないことに注意してください。これは、viewgroupを使用し、各ビューを再帰的に呼び出す例にすぎません。上記の方法は、特にビットマップのビューをクリアするために使用されます。

于 2012-11-02T23:15:16.967 に答える