だから、Activity
(たとえばTestActivity
)があり、これは通常のテーマのないActivity
およびTheme.Dialog
他の場所。両方のタスクで同じTestActivity
を再利用しようとしています。
テーマを動的に設定することを探しています。コードは簡単です:黒の背景で動作する私のアクティビティのonCreate
は次のとおりです。
public void onCreate(Bundle icicle) {
if (Utility.isDialog == true)
setTheme(Android.R.style.Theme_Dialog);
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_NO_TITLE);
.....
ここにマニフェストエントリがあります
<activity Android:name=".TestActivity"/>
それまでの間、ここではできないという投稿を見つけました http://code.google.com/p/Android/issues/detail?id=4394 しかし、それができるという強い気持ちがあります。
すべての提案を歓迎します。
この問題の回避策を提供したいと思います。
問題:ダイアログと全画面ベースの両方として同じアクティビティを使用する方法。
解決策:
@Android:style/Theme.Dialog
を使用して、AndroidManifest.xmlでアクティビティを定義します.Java
ファイルで、intent
モードを定義するdialog
extraを確認します。Theme
をAndroid.R.style.Theme
に設定します。これはデフォルトのtheme
で、テーマを定義しない場合に適用されます。コード:
boolean fDialogMode = getIntent().hasExtra("dialog_mode");
if( ! fDialogMode ) {
super.setTheme(Android.R.style.Theme);
}
代替ソリューション:
より複雑な解決策は、以下のようにAlertDialog
を使用することです。
ListAdapter
から拡張されたArrayAdapter
クラスを定義します。getCount
関数の1
を返します
@Override
public int getCount() { return 1; }
getView
関数で、必要なinflate
のlayout
activity
で、view
を返す前にカスタマイズを行います。
@Override
public View getView( int position, View view, ViewGroup group ) {
View v = view;
if( v == null ) {
v = getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate( <layout res id>, null );
}
... Do any customization here ....
return v;
}
activity
class
であまり多くの処理を行っていない場合、これは間違いなく2番目の選択オプションです。
このソリューションを検討する唯一の理由は、dialog
でそれを表示するロジックが、ダイアログとして使用される場所に隔離されていることです。
両方のオプションが機能しましたが、明らかな理由で最初のオプションを選択しています。 :-)
setTheme(..)
とsetContentView(...)
を呼び出す前にsuper.oncreate()
を使用できます。
他のいくつかのように、onCreateでのsetThemeの呼び出し(super.onCreateの呼び出しの前後)は機能しませんでした。ただし、setThemeをオーバーライドすることで、Manifest.xmlに記載されているテーマ以外のテーマを指定することができました。具体的には、以下は問題なく機能しました。
@Override
public void setTheme(int resid) {
boolean changeTheme = true;
super.setTheme(changeTheme ? Android.R.style.Theme_Dialog : resid);
}
次のディスカッションで上記を見つけました: https://code.google.com/p/Android/issues/detail?id=4394
Activity.setTheme()
を呼び出す前に、onCreate()
で setContentView()
を呼び出します。
super.onCreate(savedInstance)
を呼び出す前にsetTheme
を使用します
デフォルトのテーマライブラリ呼び出し:
super.setTheme(Android.R.style.Theme);
私の場合、私はAppCompatテーマを使用していたので、IDで適切なライブラリ(つまり)を参照していることを確認してください:
super.setTheme(Android.support.v7.appcompat.R.style.Theme_AppCompat_NoActionBar);
これはあなたの状況には当てはまらないかもしれませんが、テーマを使用できます:
Theme.Holo.DialogWhenLarge
また、画面が大きい場合はアクティビティをダイアログとして表示し、画面が小さい場合は通常のアクティビティとして表示します。これはAndroid Dialogs のドキュメントで説明されています。また、Sunをフルスクリーンフラグメントとして使用できるDialogのプログラミングに関する情報も含まれています。