web-dev-qa-db-ja.com

実行時にテーマをアクティビティに設定するにはどうすればよいですか? onCreateおよびsetContentViewの前にsetThemeを呼び出しても機能しません

実行時にアクティビティにsetThemeを割り当てたいのですが、Googleでいくつかのソリューションを検索しています。誰かがonCreateとsetContentViewが機能する前にsetThemeを呼び出すと言った

public void onCreate(Bundle savedInstanceState) {
    setTheme(Android.R.style.Theme_Translucent_NoTitleBar);
    super.onCreate(savedInstanceState);
    ...
    setContentView(...)
}

動作しません、知りたいのですが、テーマをアクティビティに設定できる別のソリューションはありますか?

21
herman brain

ちょうどこれを試してください-super.onCreate(savedInstanceState);の後でsetContentView(...)の前にテーマを設定してください

以下のコードのように-

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setTheme(Android.R.style.Theme_Translucent_NoTitleBar); // Set here
    setContentView(...)
}
18
Praveenkumar

実際、これは私がsuper.onCreate(savedInstanceState);を呼び出す前に設定した場合にのみ機能しました

public void onCreate(Bundle savedInstanceState)
{
    final int themeRes = getIntent().getIntExtra(EXTRA_THEME_ID, 0);
    if (themeRes != 0) setTheme(themeRes);
    super.onCreate(savedInstanceState);
    //ect...
}
7
Chris.Jenkins
setContentView(...);
setTheme(R.style.MyTheme);
setContentView(...);

うまくいくはずです。

テーマの詳細については、こちらをご覧ください http://entertheinfinity.blogspot.in/2016/06/designing-Android-interface-themes.html

3
Umesh

実行時にテーマを設定し、「黒い背景」の問題を修正するには:

  1. テーマはonCreate()の前に設定する必要があります。

    public void onCreate(Bundle savedInstanceState) {
        setTheme(Android.R.style.Theme_Translucent_NoTitleBar);
        super.onCreate(savedInstanceState);
        ...
        setContentView(...)
    }
    
  2. Androidマニフェストの透明なアクティビティのテーマは、透明な背景を持つ任意のテーマ(ダイアログのテーマなど)に設定する必要があります。

    • これにより、Android OSは透明なアクティビティの背後にアクティビティを描画し続けるので、背景が黒くならないようになります。

    • 私はAppCompatActivityを使用しています。 AppCompatテーマを使用する必要があります:

      <?xml version="1.0" encoding="utf-8"?>
      <manifest
          xmlns:Android="http://schemas.Android.com/apk/res/Android"
          package="com.example.app">
          ...
          <application
              ...>
              ...
              <activity
                  Android:name=".TranslucentActivity"
                  Android:theme="@style/Theme.AppCompat.DayNight.Dialog"
                  .../>
              ...
          </application>
      </manifest>
      
1
Eric