【问题标题】:Android: Ability to Auto-Hide the Title/Status Bars?Android:能够自动隐藏标题/状态栏?
【发布时间】:2011-02-04 23:43:11
【问题描述】:

我有一个使用 Android Theme.NoTitleBar.Fullscreen 主题禁用标题和状态栏的全屏绘图应用。我收到的请求之一是能够将这些 UI 元素设置为自动隐藏,例如用户触摸它们所在的位置附近,它们就会显示出来。我可以想象使用模拟标题栏的自定义 Activity 来实现此目的的方法,但是替换通知栏是不可行的。

所以,只是想知道是否有任何方法可以自动隐藏操作系统标准标题和状态栏。我想这是 NO,因为这些元素看起来与 onCreate 中的 Activity 相关联(或从 onCreate 中的 XML 膨胀),所以一旦激活,就不可能改变它们的行为。

【问题讨论】:

    标签: android animation statusbar titlebar


    【解决方案1】:

    使用android 3.1,可以使用设置UI状态栏的可见性

    View.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
    

    在触摸状态栏所在的位置时,状态栏就会出现。

    你可以通过

    View.setOnSystemUiVisibilityChangeListener 
    

    方法,然后在一段时间后再次隐藏栏

    【讨论】:

      【解决方案2】:

      所以,只是想知道是否有任何方法可以自动隐藏操作系统标准标题和状态栏。

      我没见过。

      此外,您的用户所请求的内容通常无法完成 - 如果在“他们应该在的位置附近”有一个按钮怎么办?

      【讨论】:

      • 是的,这也是我的感觉,不能再同意了,但告诉他们我会调查一下。
      【解决方案3】:

      我认为您的问题的解决方案就在 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);
              }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        • 2016-05-10
        相关资源
        最近更新 更多