0

我有一個動態可見的透明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> 

回答

1

答案是還添加FLAG_NOT_FOCUSABLE的LayoutParams標誌。當DialogFragment可見時,添加它可以充分利用溢出菜單。