2011-02-04 24 views
0

我有一個全屏繪圖應用程序,使用Android Theme.NoTitleBar.Fullscreen主題禁用標題和狀態欄。我得到的其中一個要求是將這些UI元素設置爲自動隱藏的能力,例如用戶觸摸到他們將要到達的位置,然後顯示它們。我可以想象使用模擬標題欄的自定義Activity完成此操作的方法,但更換通知欄並不可行。Android:能夠自動隱藏標題/狀態欄?

所以,只是想知道是否有任何方法來自動隱藏操作系統的標準標題和狀態欄。我想這是NO,因爲這些元素看起來與onCreate中的Activity綁定(或者onCreate中的XML膨脹),所以一旦激活,就不可能改變他們的行爲。

回答

0

所以,只是想知道是否有任何方法來自動隱藏操作系統的標準標題和狀態欄。

沒有,我見過。

此外,您的用戶請求不能一般地完成 - 如果有一個按鈕「靠近他們將會在哪裏」會怎麼樣?

+0

是的,這是我的感覺,並且不能同意更多,但告訴他們我會研究它。 – 2011-02-05 00:14:39

4

採用了Android 3.1,可以在觸摸在狀態欄會出現在酒吧使用

View.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 

設置UI狀態欄的可見性。

您可以通過

View.setOnSystemUiVisibilityChangeListener 

方法偵聽此,然後一段時間

0

我認爲,解決問題的方法是正確的虛擬全屏項目的Android Studio有後再次隱藏了吧。檢查出來:

public class FullscreenActivity extends Activity { 
     /** 
     * Whether or not the system UI should be auto-hidden after 
     * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. 
     */ 
     private static final boolean AUTO_HIDE = true; 
     /** 
     * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after 
     * user interaction before hiding the system UI. 
     */ 
     private static final int AUTO_HIDE_DELAY_MILLIS = 3000; 

     /** 
     * If set, will toggle the system UI visibility upon interaction. Otherwise, 
     * will show the system UI visibility upon interaction. 
     */ 
     private static final boolean TOGGLE_ON_CLICK = true; 

     /** 
     * The flags to pass to {@link SystemUiHider#getInstance}. 
     */ 
     private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION; 

     /** 
     * The instance of the {@link SystemUiHider} for this activity. 
     */ 
     private SystemUiHider mSystemUiHider; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_fullscreen); 

      final View controlsView = findViewById(R.id.fullscreen_content_controls); 
      final View contentView = findViewById(R.id.fullscreen_content); 

      // Set up an instance of SystemUiHider to control the system UI for 
      // this activity. 
      mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS); 
      mSystemUiHider.setup(); 
      mSystemUiHider 
        .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() { 
         // Cached values. 
         int mControlsHeight; 
         int mShortAnimTime; 

         @Override 
         @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
         public void onVisibilityChange(boolean visible) { 
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
           // If the ViewPropertyAnimator API is available 
           // (Honeycomb MR2 and later), use it to animate the 
           // in-layout UI controls at the bottom of the 
           // screen. 
           if (mControlsHeight == 0) { 
            mControlsHeight = controlsView.getHeight(); 
           } 
           if (mShortAnimTime == 0) { 
            mShortAnimTime = getResources().getInteger(
              android.R.integer.config_shortAnimTime); 
           } 
           controlsView.animate() 
             .translationY(visible ? 0 : mControlsHeight) 
             .setDuration(mShortAnimTime); 
          } else { 
           // If the ViewPropertyAnimator APIs aren't 
           // available, simply show or hide the in-layout UI 
           // controls. 
           controlsView.setVisibility(visible ? View.VISIBLE : View.GONE); 
          } 

          if (visible && AUTO_HIDE) { 
           // Schedule a hide(). 
           delayedHide(AUTO_HIDE_DELAY_MILLIS); 
          } 
         } 
        }); 

      // Set up the user interaction to manually show or hide the system UI. 
      contentView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if (TOGGLE_ON_CLICK) { 
         mSystemUiHider.toggle(); 
        } else { 
         mSystemUiHider.show(); 
        } 
       } 
      }); 

      // Upon interacting with UI controls, delay any scheduled hide() 
      // operations to prevent the jarring behavior of controls going away 
      // while interacting with the UI. 
      findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); 
     } 

     @Override 
     protected void onPostCreate(Bundle savedInstanceState) { 
      super.onPostCreate(savedInstanceState); 

      // Trigger the initial hide() shortly after the activity has been 
      // created, to briefly hint to the user that UI controls 
      // are available. 
      delayedHide(100); 
     } 


     /** 
     * Touch listener to use for in-layout UI controls to delay hiding the 
     * system UI. This is to prevent the jarring behavior of controls going away 
     * while interacting with activity UI. 
     */ 
     View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       if (AUTO_HIDE) { 
        delayedHide(AUTO_HIDE_DELAY_MILLIS); 
       } 
       return false; 
      } 
     }; 

     Handler mHideHandler = new Handler(); 
     Runnable mHideRunnable = new Runnable() { 
      @Override 
      public void run() { 
       mSystemUiHider.hide(); 
      } 
     }; 

     /** 
     * Schedules a call to hide() in [delay] milliseconds, canceling any 
     * previously scheduled calls. 
     */ 
     private void delayedHide(int delayMillis) { 
      mHideHandler.removeCallbacks(mHideRunnable); 
      mHideHandler.postDelayed(mHideRunnable, delayMillis); 
     } 
}