我有一個動態可見的透明ActionBar在我的應用程序(使用v4兼容性),出現和消失時,用戶長按屏幕。這是工作的罰款,我能夠使用動作條通過public boolean onOptionsItemSelected(MenuItem item)
Android ActionBar溢出菜單選項不工作時,碎片可見
然而,要執行我的行動,當我在屏幕上顯示一個DialogFragment
,只有可見的(那些不溢出)動作條措施火onOptionsItemSelected.
溢出菜單像以前一樣出現,但我無法點擊它們。他們的行爲就像他們被禁用。
的DialogFragments
的設置,使背景運動事件觸發
final Window w = getDialog().getWindow();
w.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
我動作條XML是不是太複雜,但在這裏它是。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:showAsAction="ifRoom" android:id="@+id/settings" android:title="@string/settings" android:icon="@android:drawable/ic_menu_preferences"/>
<item android:showAsAction="ifRoom" android:id="@+id/history" android:title="@string/menu_history" android:icon="@drawable/ic_menu_archive"/>
<item android:showAsAction="ifRoom" android:id="@+id/new_game" android:title="@string/new_game" android:icon="@android:drawable/ic_menu_add"/>
<item android:showAsAction="ifRoom" android:id="@+id/stats" android:title="@string/menu_stats" android:icon="@android:drawable/ic_menu_agenda"/>
<item android:showAsAction="ifRoom" android:id="@+id/help" android:title="@string/help" android:icon="@android:drawable/ic_menu_help"/>
</menu>
除此之外,我在我的應用程序中沒有做任何奇怪的事情。顯示DialogFragment
時溢出菜單無法工作的任何想法?
我的DialogFragment類調用setHasOptionsMenu(true)
,我可以看到onCreateOptionsMenu(Menu menu, MenuInflater inflater)
被調用,但我的onOptionsItemSelected
沒有被調用溢出項。
編輯 我決定拋棄ActionBar的實現,併爲我的應用程序使用Navigation Drawer滑塊。在我執行了所有的事情之後,我遇到了同樣的問題。沒有可見的DialogFragments,我可以使用導航抽屜,並做出選擇。但是,當我的DialogFragment可見時,我可以拖放抽屜,但我無法在ListView上進行任何選擇。
這是我的孩子對話框的代碼。 public class CChildDialog extends DialogFragment {
public interface DialogDismissHandler {
abstract public void onDismiss(CChildDialog dlg);
}
protected Game m_game;
protected DialogDismissHandler m_dismissListener;
public CChildDialog() {
super();
}
public boolean isDialogShowing() {
Dialog d = getDialog();
if (d != null)
return d.isShowing();
else
return false;
}
public void setGame(Game g) {
m_game = g;
}
public void setOnDismissHandler(DialogDismissHandler dismissListener) {
m_dismissListener = dismissListener;
}
public void onDismiss(DialogInterface dlg) {
super.onDismiss(dlg);
if (m_dismissListener != null) {
m_dismissListener.onDismiss(this);
m_dismissListener = null;
}
m_game = null;
}
public void onPreferencesChanged(Game game) {
}
@Override
public void onStart() {
final Window w = getDialog().getWindow();
w.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
WindowManager.LayoutParams lp = w.getAttributes();
if (m_game.isAdVersion()) {
// move it up 25 pixels
lp.y = -25;
}
// check for super small screens
if (UIUtil.GetWindowSize(m_game.getWindowManager()).y < 400) {
lp.y -= 30; // move it up a little more
}
super.onStart();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE,R.style.Theme_CustomDialog);
}
這裏是我的自定義主題
<style name="Theme.CustomDialog" parent="@android:style/Theme.Holo.Dialog">
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowNoTitle">true</item>
</style>