Активность мастера полноэкранного действия. Как отключить отображение панели действий при взаимодействии с устройством?

Когда я создаю действие с помощью полноэкранного мастера действий, он создает полноэкранную активность, но всякий раз, когда я нажимаю в любом месте экрана, панель действий отображается в течение нескольких секунд. Как я могу остановить это от этого?

Полный код FullScreenActivity.java

/** * An example full-screen activity that shows and hides the system UI (ie * status bar and navigation/system bar) with user interaction. * * @see SystemUiHider */ 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); } } 

Если я правильно понимаю, вы просто хотите скрыть панель действий?

Если да, измените эту строку (изменив flag_hide_navigation на 0).

 private static final int HIDER_FLAGS = 0;// SystemUiHider.FLAG_HIDE_NAVIGATION; 

И добавьте это в вызов onCreate:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTION_BAR); //new getActionBar().hide(); //new getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_fullscreen); 

После этого, если вы хотите показать панель действий, просто звоните из любой точки деятельности:

 getActionBar().show(); 

Я пробовал то же самое, поставив 0 вместо 3000

 private static final int AUTO_HIDE_DELAY_MILLIS = 3000; 

Но он становится слишком лагги … Итак, трюк и внести изменения в androidmanifest.xml add

 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 

AndroidManifest.xml underApplication

Это сработало для меня. Несмотря на то, что навигатор не полностью удален, он не позволяет пользователю много времени взаимодействовать, а кнопки – небольшие точки. Кроме того, это сокращает количество кода, необходимого во всем, чтобы сделать экран в полноэкранном режиме.

 SystemUiHider hider = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //go full screen with no title this.requestWindowFeature(Window.FEATURE_PROGRESS); //show progress on loadup this.requestWindowFeature(Window.FEATURE_NO_TITLE); //hide the title bar this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //go fullscreen setContentView(R.layout.activity_main); //hide the navigation controls final RelativeLayout mainLayout = (RelativeLayout)this.findViewById(R.id.mainLayout); hider = SystemUiHider.getInstance(this, mainLayout, SystemUiHider.FLAG_HIDE_NAVIGATION); hider.setup(); hider.setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() { @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) public void onVisibilityChange(boolean visible) { if (visible) { //will make navigator into small dots hider.hide(); //must use delayed to force navigator to disappear completely final Handler mHideHandler = new Handler(); final Runnable mHideRunnable = new Runnable() { @Override public void run() { hider.hide(); } }; mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, 1000); //min 1 sec to work } } }); hider.hide(); //do the rest of your onCreate stuff here } 

Я глубоко изучил код и начал работу на устройстве Android 4.2 без кнопок физической навигации. Конфигурация по умолчанию максимально полно. Он скрывает строку состояния, панель действий и панель навигации . Итак, как пользователь должен был выйти из вашей деятельности, если бы не щелкнул нигде на экране? Все остальное было бы очень ограничивающим и плохим юзабилити. Я думаю, что именно по этой причине это поведение невозможно манипулировать.

Вместо этого вы можете изменить SystemUiHider чтобы он SystemUiHider строку состояния и панель действий, но не панель навигации. Вместо этого тускнет навигационную панель до трех бледных точек, см. Снимок экрана ниже.

Затемненная панель навигации

Должен быть лучший способ достичь этого, но следующие работы. Прокомментируйте эти строки в конце конструктора SystemUiHiderHoneycomb() :

 if ((mFlags & FLAG_HIDE_NAVIGATION) != 0) { // If the client requested hiding navigation, add relevant flags. mShowFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; mHideFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; mTestFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; } 

Затем активность остается в полноэкранном режиме при взаимодействии с пользователем, и вы можете toggle() на конкретное событие. Разумеется, вам все равно придется внести изменения из моего первоначального ответа, чтобы отключить поведение кликов.


Оригинальный ответ:

Я думаю, вы должны прокомментировать эту часть:

 // 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(); } } }); 

В api19 мы можем использовать:

 getWindow().getDecorView() .setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

Скрыть навигационную панель вместе со строкой состояния

Измените тему своей деятельности, чтобы не было панели действий. Лучше всего наследовать от действия действия Шерлока и удалить панель действий

Хотя его слишком поздно, чтобы опубликовать ответ, но насколько я могу понять этот вопрос, и поскольку я работаю с использованием шаблона Full Screen Activity, представленного в Android Studio , я думаю, что ответ на этот вопрос заключается в отключении панели действий, которая становится видимой, когда Пользователь взаимодействует с пользовательским интерфейсом, что может быть достигнуто только путем отключения OnClickListener в contentView т. contentView

 contentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (TOGGLE_ON_CLICK) { mSystemUiHider.toggle(); } else { mSystemUiHider.show(); } } }); 

Т.е. прокомментировать реализацию метода onClick .

Просто закомментируйте

 if (TOGGLE_ON_CLICK) { mSystemUiHider.toggle(); } else { mSystemUiHider.show(); } 

По умолчанию состояние выключено. Toggle происходит потому, что также добавлен прослушиватель onclick, который переключает экран. Вы просто не можете добавить его и удалить фрагмент кода.

Новейший код: // Настройте взаимодействие пользователя, чтобы вручную отобразить или скрыть системный интерфейс.

 mContentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // toggle(); } 

Я просто прокомментировал toggle () и вуаля