2017-04-11 34 views
0

ルートビューが全画面表示され、ステータス/ナビゲーションバーの下に描画されるレイアウトを作成しようとしています。大きなポップアップウィンドウが表示されるまでは、すべてがうまくいきます(画像内には60個のアイテムがあります)。ウィンドウはウィンドウのすぐ下に伸び、スクロールできません。ポップアップウィンドウが画面を越えて広がることを許さずに、ナビゲーションバーの下にレイアウトを広げる方法を教えてください。Androidナビゲーションバーの下に画像を描画

犯人が

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 

ある問題は、そのフラグなしで、私は、ナビゲーションバーの下の私の見解を描くように見えることはできませんということです。代わりに、android:windowBackground(緑色と表示されている)だけを設定できます。ここで

は、私が使用しているレイアウトです:

<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorAccent" 
    android:fitsSystemWindows="false" 
    tools:context="com.example.fullscreendemo.MainActivity"> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent"/> 

    <android.support.v7.widget.AppCompatSpinner 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:entries="@array/spinner_values" 
     android:clipChildren="true" 
     app:layout_constraintTop_toBottomOf="@+id/text" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent"/> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="48dp" 
     android:background="@drawable/bg_nav_bar" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent"/> 

</android.support.constraint.ConstraintLayout> 

主な活動:

class MainActivity extends AppCompatActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().getDecoreView().setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
       View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 
     setContentView(R.layout.activity_main); 
    } 
} 

No limits setWith limits

+0

どのようなスタイルのアクティビティを使用していますか?あなたはこの旗なしで透明なバーを達成することができますあなたはない理由はありますか? –

+0

私は 'Theme.AppCompat.Light.NoActionBar'を使用しています。バーはフラグがなくても透明ですが、問題は、' android:windowBackground'を使って色またはdrawableで描画することができないことです。画像から、バーの下の色が緑で、ウインドウの背景であり、ナビゲーションバーの背景ではないことが分かります。 <項目名= "アンドロイド:windowTranslucentStatus">真 <項目名= "アンドロイド:windowTranslucentNavigation">偽: – TheHebrewHammer

+0

<= "AppBaseTheme" 親= "Theme.Holo.Light.NoActionBar.TranslucentDecorアンドロイド" スタイル名> 私はこれをアンドロイド19のスタイルとして使用しています。これを試しておきたい場合は同じ効果があります。 –

答えて

0

OK、私は何が起こっているかを把握するので、明確に権利これを掲示した後、 。 Window.setFlagsのドキュメントでは、setContentViewまたは​​を呼び出すときにFLAG_LAYOUT_IN_SCREENFLAG_LAYOUT_INSET_DECORが使用されます。それは私の活動の底を「持ち上げ」させるインセットでした。私は単に私の活動のコードの大部分を除去することによって、このすべてを避けることができたとだけEDIT

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
に残して上記のすべてに対応するために、ソフトなナビゲーションバーなしでデバイスを使用する際には十分ではありませんデバイスは次のものを使用します:

private void setFullScreenFlags() { 
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
    if (!hasSoftNavigationBar()) { 
     getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
       View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
    } 
    AndroidBug5497Workaround.assistActivity(this); 
} 

private boolean hasSoftNavigationBar() { 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point realSize = new Point(); 
    Point displaySize = new Point(); 

    display.getRealSize(realSize); 
    display.getSize(displaySize); 
    return !realSize.equals(displaySize); 
} 
関連する問題