3

回來後,我使用Android Studio創建全屏應用程序偏移。 我使用由Android Studio提供的FullScreenActivity模板。安卓:內容高度是由一些像素從全屏

它可以完美地切換全屏模式不同的是活動內容的頂部被一些像素(類似於狀態欄的高度)向上偏移時,從全屏幕的回報。

這裏是屏幕在不同階段的屏幕截圖:全屏幕前,在全屏幕,並從全屏返回。當我打開佈局邊界設置的顯示時,可以看到紅色矩形是視圖邊界。

全屏之前,界限是明確的:動作條的底部重疊內容的頂級 Screenshot: before full screen

在全屏 Screenshot: at full screen

從全屏返回之後:動作條的底部是重疊內容的頂部,這裏是問題,看起來內容的頂部向上移動。 Screenshot: return from full screen

爲什麼會出現這種情況,我怎麼能解決呢? 請給我一隻手,感謝

FullScreenActivity.java

import android.annotation.SuppressLint; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.MotionEvent; 
import android.view.View; 

/** 
* An example full-screen activity that shows and hides the system UI (i.e. 
* status bar and navigation/system bar) with user interaction. 
*/ 
public class FullscreenActivity extends AppCompatActivity { 
    /** 
    * 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; 

    /** 
    * Some older devices needs a small delay between UI widget updates 
    * and a change of the status and navigation bar. 
    */ 
    private static final int UI_ANIMATION_DELAY = 300; 
    private final Handler mHideHandler = new Handler(); 
    private View mContentView; 
    private final Runnable mHidePart2Runnable = new Runnable() { 
     @SuppressLint("InlinedApi") 
     @Override 
     public void run() { 
      // Delayed removal of status and navigation bar 

      // Note that some of these constants are new as of API 16 (Jelly Bean) 
      // and API 19 (KitKat). It is safe to use them, as they are inlined 
      // at compile-time and do nothing on earlier devices. 
      mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE 
        | View.SYSTEM_UI_FLAG_FULLSCREEN 
        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
     } 
    }; 
    private View mControlsView; 
    private final Runnable mShowPart2Runnable = new Runnable() { 
     @Override 
     public void run() { 
      // Delayed display of UI elements 
      ActionBar actionBar = getSupportActionBar(); 
      if (actionBar != null) { 
       actionBar.show(); 
      } 
      mControlsView.setVisibility(View.VISIBLE); 
     } 
    }; 
    private boolean mVisible; 
    private final Runnable mHideRunnable = new Runnable() { 
     @Override 
     public void run() { 
      hide(); 
     } 
    }; 
    /** 
    * 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. 
    */ 
    private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      if (AUTO_HIDE) { 
       delayedHide(AUTO_HIDE_DELAY_MILLIS); 
      } 
      return false; 
     } 
    }; 

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

     setContentView(R.layout.activity_fullscreen); 

     mVisible = true; 
     mControlsView = findViewById(R.id.fullscreen_content_controls); 
     mContentView = findViewById(R.id.fullscreen_content); 


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

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

    private void toggle() { 
     if (mVisible) { 
      hide(); 
     } else { 
      show(); 
     } 
    } 

    private void hide() { 
     // Hide UI first 
     ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      actionBar.hide(); 
     } 
     mControlsView.setVisibility(View.GONE); 
     mVisible = false; 

     // Schedule a runnable to remove the status and navigation bar after a delay 
     mHideHandler.removeCallbacks(mShowPart2Runnable); 
     mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); 
    } 

    @SuppressLint("InlinedApi") 
    private void show() { 
     // Show the system bar 
     mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); 
     mVisible = true; 

     // Schedule a runnable to display UI elements after a delay 
     mHideHandler.removeCallbacks(mHidePart2Runnable); 
     mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); 
    } 

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

activity_fullscreen.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#0099cc" 
    tools:context=".FullscreenActivity"> 

    <!-- The primary full-screen view. This can be replaced with whatever view 
     is needed to present your content, e.g. VideoView, SurfaceView, 
     TextureView, etc. --> 
    <TextView 
     android:id="@+id/fullscreen_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:keepScreenOn="true" 
     android:text="@string/dummy_content" 
     android:textColor="#33b5e5" 
     android:textSize="50sp" 
     android:textStyle="bold" /> 

    <!-- This FrameLayout insets its children based on system windows using 
     android:fitsSystemWindows. --> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true"> 

     <LinearLayout 
      android:id="@+id/fullscreen_content_controls" 
      style="?metaButtonBarStyle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|center_horizontal" 
      android:background="@color/black_overlay" 
      android:orientation="horizontal" 
      tools:ignore="UselessParent"> 

      <Button 
       android:id="@+id/dummy_button" 
       style="?metaButtonBarButtonStyle" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:text="@string/dummy_button" /> 

     </LinearLayout> 
    </FrameLayout> 

</FrameLayout> 

的manifest.xml

... 
<application 
    android:name=".MyApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    ... 
    <activity 
     android:name=".FullscreenActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:label="@string/title_activity_fullscreen" 
     android:theme="@style/FullscreenTheme"></activity> 
    ... 
</application> 
... 
+0

我遇到同樣的問題。當解僱全屏對話框中,將容器內的滾動視圖的尺寸略微增大導致受了一點移所有兒童的意見。 您是否找到了解決方案? – KoreanDude

回答

0

刪除android:fitsSystemWindows="true",一切都應該罰款

相關問題