2014-07-02 73 views
1

我正在開發一個應用程序,使用haxe/openfl和flashdevelop ide。新項目的默認設置帶有正確配置的Android清單,以便Android菜單欄不顯示。但是,當我觸摸設備上的任何地方時,它們就會彈出。我怎樣才能防止這種情況發生。Haxe:我怎樣才能讓android菜單欄保持隱藏

好了,所以我發現系統使用生成的應用程序代碼模板GameActivity.java文件,並修改它包括:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    if(hasFocus) { 
     hideSystemUi(); 
    } 
} 

private void hideSystemUi() { 
    View decorView = this.getWindow().getDecorView(); 

    if (Float.valueOf(android.os.Build.VERSION.RELEASE.substring(0, 3))>=4.4){ 

    decorView.setSystemUiVisibility(
     View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
     | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
     | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
     | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
     | View.SYSTEM_UI_FLAG_FULLSCREEN 
     | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 
    } 
    else 
    { 
    decorView.setSystemUiVisibility(
     View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
     | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
     | View.SYSTEM_UI_FLAG_FULLSCREEN); 
    } 
} 

現在一切都很好地工作。將這張帖子當作8小時後的答案

+1

不幸的是,它可能無法在Manifest文件中設置。看看[設置沉浸模式](https://developer.android.com/training/system-ui/immersive.html)。它被添加到一個相當新的Android API(〜4.4) – aProperFox

+0

'菜單欄'你的意思是與主頁按鈕欄? –

+0

是的,我想隱藏所有的菜單,包括主頁按鈕 – user2765977

回答

2

您在Immersive Sticky Mode之後隱藏了Android 4.4+上的manu bars和軟件按鈕。您已通過View.setSystemUiVisibility方法設置標誌正確。

但是,有一點需要記住的是,在Immersive Sticky Mode中,如果使用硬件音量按鈕,則菜單欄將重新出現。爲了防止它,你將不得不使用延遲Runnable,再次設置Immersive Sticky Mode。您正在使用OpenFL,因此下面是我在GameActivity中使用的一組修改:

private void setSystemUiVisibility() { 
    ::if WIN_FULLSCREEN:: 
    ::if (ANDROID_TARGET_SDK_VERSION >= 19):: 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     getWindow().getDecorView().setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
      View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | 
      View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | 
      View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | 
      View.SYSTEM_UI_FLAG_FULLSCREEN | 
      View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
     ); 
    } 
    ::elseif (ANDROID_TARGET_SDK_VERSION >= 16):: 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
     getWindow().getDecorView().setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | 
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
      View.SYSTEM_UI_FLAG_LOW_PROFILE | 
      View.SYSTEM_UI_FLAG_FULLSCREEN 
     ); 
    } 
    ::end:: 
    ::end:: 
} 

private final Runnable activateImmersiveMode = new Runnable() { 
    @Override 
    public void run() { 
     setSystemUiVisibility(); 
    } 
}; 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     mHandler.postDelayed(activateImmersiveMode, 500); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Override protected void onResume() { 
    super.onResume(); 
    setSystemUiVisibility(); 
    // rest of onResume() 
} 

@Override protected void onStart() { 
    super.onStart(); 
    setSystemUiVisibility(); 
    // rest of onStart() 
}