2016-04-15 3 views
0

Android Studio 2.0で新しいアプリケーションを作成しました。ナビゲーションパッドをToolbar以下にしたいと考えています。マテリアルデザインの仕様ではToolbarより上にあるはずですが、私の引き出しにはそれほど多くのエントリがなく、Googleが提供するきちんとしたアイコンアニメーションを見たいと思っています。fitsSystemWindowsを使用しているときに灰色の境界線が表示されないNavigationView

DrawerLayoutをトップレベルCoordinatorLayoutに配置することで、私が望むものを得ることができました。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    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:fitsSystemWindows="true" 
    tools:context="com.company.app.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.DrawerLayout 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:openDrawer="start"> 

     <include layout="@layout/content_main" /> 

     <android.support.design.widget.NavigationView 
      android:id="@+id/nav_view" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      app:menu="@menu/activity_main_drawer" /> 

    </android.support.v4.widget.DrawerLayout> 

</android.support.design.widget.CoordinatorLayout> 

トップレベルのレイアウトにandroid:fitsSystemWindow="true"を使用していますので、ステータスバーに色を付けることができます。しかし、私がそうするとき、ナビゲーション引き出しは灰色の上の境界線を持っています。

enter image description here

私は、国境は大丈夫だろう(ツールバー上)それをGoogleがそれを指定された方法を使用することだろうが、この方法は、それだけで見苦しいです。これを取り除く方法はありますか?

私はNavigationView.onInsetsChanged(Rect rect)を上書きして実験しましたが、上部に項目を配置できましたが、灰色の枠線は残っていました。

+0

あなたは、ステータスバーの "着色" とはどういう意味ですか:

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); if (navigationView != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { navigationView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { return insets; } }); } } } 

はあなたにこれを取得する必要?その色はあなたの 'colorPrimaryDark'から来ます – Pztar

+0

これは本当です。しかし、 'colorPrimaryDark'の色合いを得るためには、ルート要素に対して' android:fitsSystemWindow = "true" 'を使わなければなりません。そして、これは 'NavigationView'のこの灰色の境界線を引き起こします。 – Saenic

答えて

8

私は頭痛でこれを理解しようとしましたが、がどのように子どもにfitsSystemWindowsが渡されたかを示すthisが見つかりました。私は間違いなく、これはNavigationViewはすでにそれがfalseに設定されているので、バグだと思いますが、その後、私はこれを読んで:

NavigationViewはあなたのために、ステータスバーのスクリム保護の世話をする、あなたのNavigationViewがステータスと相互作用することを確実にしますAPI21 +デバイス上の適切なバー。

Android Developers Blogから。だから私はそれをどう考えるべきか分からない。私はそれがNavigationViewがこのように使用されることは決してなかったという事実のせいかもしれないと思います。

それにもかかわらず、グレーバーの問題を解決する方法はありますが、問題が発生する可能性があるかどうかはわかりません。もしそうなら、返信してください。 activity_main.xml

MainActivityクラスで

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_marginTop="100dp" 
     android:fitsSystemWindows="false"/> 

</android.support.design.widget.CoordinatorLayout> 

Screenshot

+0

うわー、' OnApplyWindowInsetsListener'は本当にトリックでした。 – Saenic

+0

うれしかったです。私は、ビューがランタイム中に後で更新されるときに問題があるかもしれないと感じています。私はそれが 'View'パラメータが渡される理由だと思います。その場合、インセットを適用するビューはインセットを返す前に 'CoordinatorLayout'だけである' if'条件を必要とします。私がまだそれほど遠くにいないので、あなたがこれに就いていれば教えてください。 – Brian

関連する問題