6

Androidアプリケーションを実行するとき、次を使用してアプリがタブレットで実行されているかどうかを確認するメソッドを呼び出しています。

public boolean isTablet(Context context){
  boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
  boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)== Configuration.SCREENLAYOUT_SIZE_MASK);
  return(xlarge || large);
} 

メソッドがtrueを返した場合(つまり、デバイスがこれらの条件の1つを満たしている場合)

次の方法でテーマをダイアログテーマに設定しました。

setTheme(R.style.MyTheme);

MyTheme親から継承するテーマはどこですかTheme.Holo.Light.Dialog

このロジックは正常に機能しますが、バックグラウンドで奇妙な効果が得られます。Callingインテントは完全に黒く塗りつぶされていますが、マニフェストでテーマを設定しただけでは、背景はわずかに灰色になります。

更新-コードが追加されました

 private Context mClassContext = this;
 @Override
 public void onCreate(Bundle savedInstanceState){
     if(isTablet(mClassContext)){
       setTheme(R.style.MyTheme);
     }
  super.onCreate(savedInstanceState);
  setContentView(R.layout.myLayout);
}

これを複製するにはどうすればよいですか?

4

1 に答える 1

11

私は自分の質問に対する答えを見つけたようです。

黒の背景を避けるには:

Androidマニフェストで、ダイアログ(タブレットの場合)である可能性のあるすべてのアクティビティをダイアログテーマに設定します。

次に、onCreateこのelseケースを追加して、タブレット以外のデバイス(つまり電話)用に変更します

if(isTablet(mContext)){
setTheme(R.style.myDialogTheme);}
else{ 
  setTheme(R.style.MyTheme);
}
于 2012-11-16T20:02:56.160 に答える