私はActionBarSherlock (ABS)を使用しており、プロジェクトが提供するABS Demos Sampleアプリケーションで確認できるように、アプリケーションにダイアログを追加したいと考えています。ダイアログのサンプルは次のようになります。
自分でアクティビティを作成しました。関連するソースコードは次のとおりです。
public class Dialog extends SherlockActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Sherlock___Theme_DarkActionBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
}
setTheme()
ABSサンプルはこれを行いませんが、何らかの理由でAndroidは私に追加を強制します. 省略すると、次のエラーが発生します。
java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.
MyAndroidManifest.xml
には次の設定があり、ABS サンプルのものと非常によく似ています。
<activity
android:name=".activities.Dialog"
android:label="@string/title_activity_dialog"
android:theme="@style/Theme.Sherlock.Dialog" >
</activity>
次のスクリーンショットは、私のダイアログ アクティビティがどのように見えるかを示しています。
マップをサポートする ActionBarSherlock 4.1.0、Android サポート ライブラリ v4 を使用しています。
質問:なぜそんなに違うように見えるのか分かりますか?
- 暗いユーザー インターフェイスと明るいユーザー インターフェイス
- 透明な背景と不透明な背景
- アクションバーあり/なし
アップデート:
ABS サンプルは、次のようにダイアログ アクティビティを開始します。
protected void onListItemClick(ListView l, View v, int position, long id) {
Map<String, Object> map = (Map<String, Object>)l.getItemAtPosition(position);
Intent intent = (Intent) map.get("intent");
startActivity(intent);
}
次のようにダイアログ アクティビティを開始します。
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(R.string.title_menuItemDialogActivtiy)
.setIcon(R.drawable.ic_action_dialog)
.setIntent(new Intent(this, Dialog.class))
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
一方、このパターンは非推奨であることがわかりました。代わりに、DialogFragmentを使用できます。ここで発生する質問: フラグメントをアクション メニュー項目と統合するにはどうすればよいですか?
代替ソリューション:
より「将来的に安全」であると推定されるため、 のDialogFragment
代わりにa を使用することにしました。Activity
私は基本的に、非常に有益なチュートリアルUsing DialogFragments (2012 年 6 月 3 日投稿)に従いました。さらに、関連する有用な投稿を追加したいと思います。