Android切り替えアプリケーションテーマスタイル
6046 ワード
Androidには、夜間モードというシステムのグローバル機能があることをずっと望んでいます.
設定にToggleButtonを提供し、夜間モードをオンまたはオフにします.同時に新しいAPIにインタフェースを提供し,夜間モードをサポートするすべてのアプリケーションを統一的にスケジューリングする.総スイッチをオンにすると、デフォルトでは他のサードパーティアプリケーションの夜間モードがオンになります.次に、ソフトウェアを無視するルールも設定します.さらに自動化すると、夜間モードがデフォルトでオンになっている時間帯を設定できます.
このFeatureの実現には必ずサードパーティ開発者のサポートが必要です.夜間モードはあってもなくてもいい場合もありますが、寝る前にスマホをいじるのが好きな人にとっては、人間的な機能ですね.
もちろん、Android APIにはまだこれがありませんが、自分のアプリケーションでユーザーにインタフェースを与えたり、夜間モードを選択したり、時間帯を設定して機能をトリガーしたりすることができます.
小さなDemoを書いて、簡単に夜間モードの切り替えを実現しました.まとめてみます.
プロジェクトディレクトリres/values/の下にattrsを新規作成します.xml、内容は以下の通りです.
次にstyleで2つのトピックを定義します.各トピックには、少なくとも以上のattrsのいくつかのプロパティが含まれます.
トピックは定義され、レイアウトファイルで参照されます.中には?番号の場所は、上記のlabelを参照します.
下面就是在Activiy中定义要使用那种主题了:
注意すべきは、onClickListener Imp()クラスの
これにより,夜間モードを実現する小さなDemoを簡単なテーマ切り替えを実現した.
分からないところがあったら、交流を歓迎します.
SharedPreferenceフラグを追加すると、前回選択したスタイルを記憶し、次回起動時にリセットする必要がなくなります.
転載は出典を明記してください:周木水のCSDNブログhttp://blog.csdn.net/zhoumushui
設定にToggleButtonを提供し、夜間モードをオンまたはオフにします.同時に新しいAPIにインタフェースを提供し,夜間モードをサポートするすべてのアプリケーションを統一的にスケジューリングする.総スイッチをオンにすると、デフォルトでは他のサードパーティアプリケーションの夜間モードがオンになります.次に、ソフトウェアを無視するルールも設定します.さらに自動化すると、夜間モードがデフォルトでオンになっている時間帯を設定できます.
このFeatureの実現には必ずサードパーティ開発者のサポートが必要です.夜間モードはあってもなくてもいい場合もありますが、寝る前にスマホをいじるのが好きな人にとっては、人間的な機能ですね.
もちろん、Android APIにはまだこれがありませんが、自分のアプリケーションでユーザーにインタフェースを与えたり、夜間モードを選択したり、時間帯を設定して機能をトリガーしたりすることができます.
小さなDemoを書いて、簡単に夜間モードの切り替えを実現しました.まとめてみます.
プロジェクトディレクトリres/values/の下にattrsを新規作成します.xml、内容は以下の通りです.
次にstyleで2つのトピックを定義します.各トピックには、少なくとも以上のattrsのいくつかのプロパティが含まれます.
トピックは定義され、レイアウトファイルで参照されます.中には?番号の場所は、上記のlabelを参照します.
下面就是在Activiy中定义要使用那种主题了:
public class MainActivity extends Activity {
private boolean blFlag = false;
private ImageView ivBook;
private Button btnSet;
private Button btnGet;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTheme(R.style.MyThemeDefault);
setContentView(R.layout.main);
btnSet = (Button) findViewById(R.id.btnSet);
btnGet = (Button) findViewById(R.id.btnGet);
ivBook = (ImageView) findViewById(R.id.ivBook);
btnSet.setOnClickListener(new onClickListenerImp());
btnGet.setOnClickListener(new onClickListenerImp());
ivBook.setOnClickListener(new onClickListenerImp());
}
class onClickListenerImp implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v == btnSet || v == ivBook) {
if (blFlag) {
setTheme(R.style.MyThemeDefault);
blFlag = false;
} else if (!blFlag) {
setTheme(R.style.MyThemeNight);
blFlag = true;
}
setContentView(R.layout.main);
btnSet = (Button) findViewById(R.id.btnSet);
btnGet = (Button) findViewById(R.id.btnGet);
ivBook = (ImageView) findViewById(R.id.ivBook);
btnSet.setOnClickListener(new onClickListenerImp());
btnGet.setOnClickListener(new onClickListenerImp());
ivBook.setOnClickListener(new onClickListenerImp());
} else if (v == btnGet) {
Toast.makeText(MainActivity.this, "blFlag: " + blFlag,
Toast.LENGTH_SHORT).show();
}
}
}
}
注意すべきは、onClickListener Imp()クラスの
setContentView(R.layout.main);
という文の後に、各コンポーネントとそのリスナーを再バインドします.そうしないと、一度だけリスニングできます.これはsetContentViewの後、コンポーネントが前のコンポーネントではないためです.これにより,夜間モードを実現する小さなDemoを簡単なテーマ切り替えを実現した.
分からないところがあったら、交流を歓迎します.
SharedPreferenceフラグを追加すると、前回選択したスタイルを記憶し、次回起動時にリセットする必要がなくなります.
sharedPreferences = getSharedPreferences("UseStyle", Context.MODE_WORLD_READABLE);
isNight = sharedPreferences.getBoolean("isNight", false);
if (isNight) {
this.setTheme(R.style.MyThemeNight);
} else {
this.setTheme(R.style.MyThemeDefault);
}
public void onClick(View v) {
if (v == btnSet) {
Editor editor = sharedPreferences.edit();
if (isNight) {
setTheme(R.style.MyThemeDefault);
isNight = false;
} else {
setTheme(R.style.MyThemeNight);
isNight = true;
}
editor.putBoolean("isNight", isNight);
editor.commit();
setContentView(R.layout.main);
btnSet = (Button) findViewById(R.id.btnSet);
btnGet = (Button) findViewById(R.id.btnGet);
btnSet.setOnClickListener(new onClickListenerImp());
btnGet.setOnClickListener(new onClickListenerImp());
} else if (v == btnGet) {
Toast.makeText(Main.this, "isNight: " + isNight, Toast.LENGTH_SHORT).show();
}
}
転載は出典を明記してください:周木水のCSDNブログhttp://blog.csdn.net/zhoumushui