Vollbild-Aktivitäts-Assistenten-Aktivität. Wie kann ich die Aktionsleiste stoppen, wenn ich mit dem Gerät interagiere?

Wenn ich eine Aktivität mit dem Vollbild-Aktivitäts-Assistenten erstellen, schaffe es eine Vollbild-Aktivität, aber wann immer ich irgendwo auf dem Bildschirm klicke, zeigt die Aktionsleiste für ein paar Sekunden an. Wie kann ich es davon abhalten?

Voller Code von FullScreenActivity.java

  • Android: Wie programmgesteuert ein Thema der Aktivität zu Theme.Dialog
  • Line-Breaking Widget-Layout für Android
  • MapView in einem ScrollView?
  • Android Studio: java.io.IOException: Eine bestehende Verbindung wurde vom entfernten Host zwangsweise geschlossen
  • Android ActionBar-Element mit nur Text
  • Wie viel Speicher wird jeder Android-Prozess bekommen?
  • /** * 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); } } 

  • Android: layout_gravity funktioniert nicht wie erwartet
  • Wie man Circle Page Indicator nach vorne in Android bringt
  • Android-Kontaktfoto: Wie bekomme ich zurück (Google) Kontaktbild aus dem Internet (und so, 'abbrechen' eine ehemalige lokale Bild ändern)
  • VideoView in einem Live Wallpaper?
  • Irgendein Foto-Galerie-Bibliothek für Android?
  • Wie kann man das lösen: 'Running android lint' Problem
  • 8 Solutions collect form web for “Vollbild-Aktivitäts-Assistenten-Aktivität. Wie kann ich die Aktionsleiste stoppen, wenn ich mit dem Gerät interagiere?”

    Wenn ich es richtig verstehe, willst du nur die Aktionsleiste ausblenden?

    Wenn ja, ändern Sie diese Zeile (Änderung der flag_hide_navigation auf 0).

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

    Und füge dies dem onCreate-Aufruf hinzu:

     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); 

    Danach, wenn du die Aktionsleiste zeigen willst, ruf einfach von irgendwo in die Aktivität:

     getActionBar().show(); 

    Ich habe das Gleiche getan, indem ich 0 anstelle von 3000 einsetzte

     private static final int AUTO_HIDE_DELAY_MILLIS = 3000; 

    Aber es wird zu hartnäckig … Also, der Trick, um Änderungen in androidmanifest.xml hinzuzufügen

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

    Zu AndroidManifest.xml underApplication

    Das hat für mich gearbeitet Obwohl der Navigator nicht vollständig entfernt wird, erlaubt es nicht viel Zeit für den Benutzer zu interagieren, plus die Schaltflächensymbole sind kleine Punkte. Auch dies schneidet auf die Menge an Code benötigt überall auf der Stelle, um einen Bildschirm Vollbildschirm zu machen.

     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 } 

    Ich habe einen tiefen Blick in den Code und begann die Aktivität auf einem Android 4.2 Gerät ohne physische Navigationstasten. Die Standardkonfiguration ist so voll wie möglich. Es verbirgt Statusleiste , Aktionsleiste und Navigationsleiste . Also, wie sollte der Benutzer soll sich aus Ihrer Tätigkeit, wenn nicht mit einem Klick irgendwo auf dem Bildschirm? Alles andere wäre sehr einschränkend und schlechte Usability. Ich denke, das ist der Grund, warum dieses Verhalten nicht manipuliert werden kann.

    Was Sie stattdessen tun können, ändert das SystemUiHider so, dass es die Statusleiste und die SystemUiHider , aber nicht die Navigationsleiste. Stattdessen dimm die Navigationsleiste auf drei blasse Punkte, siehe Screenshot unten.

    Abgeblendeten Navigationsleiste

    Es muss ein besserer Weg sein, dies zu erreichen, aber die folgenden Werke. Kommentieren Sie diese Zeilen am Ende des SystemUiHiderHoneycomb() Konstruktors:

     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; } 

    Die Aktivität bleibt dann Vollbild auf Benutzerinteraktion und man kann sie bei einem bestimmten Ereignis umschalten toggle() . Natürlich musst du noch die Änderung von meiner ursprünglichen Antwort ausführen, um das Klickverhalten zu deaktivieren.


    Ursprüngliche Antwort:

    Ich denke, du musst diesen Teil kommentieren:

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

    In api19 können wir:

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

    Um die Navigationsleiste mit der Statusleiste zu verbergen

    Ändern Sie das Thema Ihrer Aktivität, um keine Aktionsleiste zu haben. Am besten ist es, von der Aktionsleiste Sherlock-Aktivität zu erben und die Aktionsleiste zu entfernen

    Obwohl es zu spät ist, um eine Antwort zu veröffentlichen, aber soweit ich die Frage verstehen kann und da ich mit der Vollbild-Aktivitätsvorlage in Android Studio arbeite, denke ich, dass die Antwort auf diese Frage ist, die Aktionsleiste zu deaktivieren, die sichtbar wird, wenn Der Benutzer interagiert mit der Benutzeroberfläche, die nur durch die Deaktivierung des OnClickListener auf contentView

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

    onClick die onClick Methodenimplementierung kommentieren

    Noch kommentieren

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

    Standardmäßig ist der Zustand ausgeschaltet. Toggle passiert, weil es einen Onclick-Listener auch hinzugefügt, die den Bildschirm umschaltet. Du könntest es einfach nicht hinzufügen und das Code-Snippet löschen.

    Der neueste Code ist // Richten Sie die Benutzerinteraktion ein, um die Systemoberfläche manuell ein- oder auszublenden.

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

    Ich habe einfach kommentiert toggle () und voila

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.