ボタンのクリック時にアプリのデフォルトテーマを変更する方法があることを知っています。 Blackmart開発者はそれを行いました。私はすでに1000ページのようにGoogleを検索しましたが、これだけが見つかりました(動作していません)
getApplication().setTheme(Theme.Holo)
Res/values/styles.xmlに新しいスタイルを既に作成しているため、動的に変更する他の方法はありますか?アプリケーションを再起動しますか?
次のブログで問題を解決できます。
http://mrbool.com/how-to-change-the-layout-theme-of-an-Android-application/25837
クイックリファレンスのためにブログコードをコピーします。
XMLファイルで次の3つのテーマを既に定義しているとしますR.style.FirstTheme
、R.style.SecondTheme
およびR.style.ThirdTheme
import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
public class ChangeThemeActivity extends Activity implements OnClickListener
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Utils.onActivityCreateSetTheme(this);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
switch (v.getId())
{
case R.id.button1:
Utils.changeToTheme(this, Utils.THEME_DEFAULT);
break;
case R.id.button2:
Utils.changeToTheme(this, Utils.THEME_WHITE);
break;
case R.id.button3:
Utils.changeToTheme(this, Utils.THEME_BLUE);
break;
}
}
}
「Utils」ファイルに次のコードを記述しましょう。
import Android.app.Activity;
import Android.content.Intent;
public class Utils
{
private static int sTheme;
public final static int THEME_DEFAULT = 0;
public final static int THEME_WHITE = 1;
public final static int THEME_BLUE = 2;
/**
* Set the theme of the Activity, and restart it by creating a new Activity of the same type.
*/
public static void changeToTheme(Activity activity, int theme)
{
sTheme = theme;
activity.finish();
activity.startActivity(new Intent(activity, activity.getClass()));
}
/** Set the theme of the activity, according to the configuration. */
public static void onActivityCreateSetTheme(Activity activity)
{
switch (sTheme)
{
default:
case THEME_DEFAULT:
activity.setTheme(R.style.FirstTheme);
break;
case THEME_WHITE:
activity.setTheme(R.style.SecondTheme);
break;
case THEME_BLUE:
activity.setTheme(R.style.Thirdheme);
break;
}
}
}
それが役に立てば幸い...
編集1:
AlertDialog
がカスタムテーマを使用しない理由は次のとおりです。
Builder.create()の実装は次のとおりです。
public AlertDialog create() {
final AlertDialog dialog = new AlertDialog(P.mContext);
P.apply(dialog.mAlert);
[...]
}
次のようなAlertDialogの「テーマ非対応」コンストラクターを呼び出します。
protected AlertDialog(Context context) {
this(context, com.Android.internal.R.style.Theme_Dialog_Alert);
}
AlertDialogには、テーマを変更するための2番目のコンストラクターがあります。
protected AlertDialog(Context context, int theme) {
super(context, theme);
[...]
}
builderは呼び出しません。
関連する修正については、次の投稿をご覧ください。
最も投票された答えは次のとおりです。
new AlertDialog.Builder(
new ContextThemeWrapper(context, Android.R.style.Theme_Dialog))