2016-10-13 2 views
2

ご存じのように、アンドロイドスタジオには、ナビゲーションドローバーアクティビティがあり、レイアウトフォルダ内に複数のレイアウトを作成します。ナビゲーション・ドロワーのヘッダー・レイアウトの背景色を動的に変更するにはどうすればいいですか?

enter image description here

nav_header_main.xml NavigationViewヘッダの成分を含有するレイアウトです。私は、上の写真でそれを強調しているし、それは次のコードを持っています

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/sideNavLayout" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/nav_header_height" 
    android:background="@drawable/side_nav_bar" 
    android:gravity="bottom" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark"> 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/nav_header_vertical_spacing" 
     android:src="@android:drawable/sym_def_app_icon" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/nav_header_vertical_spacing" 
     android:text="Android Studio" 
     android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="[email protected]" /> 

</LinearLayout> 

私はそうのようMainActivity.javaから上記写真のハイライト部の背景を変更したい:

LinearLayout sideNavLayout; 
sideNavLayout = (LinearLayout) findViewById(R.id.sideNavLayout); 
sideNavLayout.setBackgroundResource(R.drawable.my_side_nav_bar); 

しかし、私はそれを使用したところどこでエラーが発生するのですか?

java.lang.NullPointerException

この点についてお手伝いできますか?

答えて

3

あなたが子供

NavigationView navView= (NavigationView) findViewById(R.id.nav_view); 
View header=navView.getHeaderView(0); 
LinearLayout sideNavLayout = (LinearLayout)header.findViewById(R.id.sideNavLayout); 
sideNavLayout.setBackgroundResource(R.drawable.my_side_nav_bar); 
+0

おかげで多くのことをアクセスするためにnavviewヘッダーレイアウトを膨らませる必要があります。私は助けに感謝します。残念ながら私は2つのヘッダーを上下に1つずつ取得しています。また、3行目の変数ビューは使用されません。 – Darush

+0

必要なヘッダーの下にある最初のヘッダーを削除するにはどうすればよいですか? – Darush

+0

しかし、それらはすべて1つのnavview権限で実装されていますか?だからあなたはこのようにしなければなりません。 3番目のパラメータを削除して修正します。私は私の答えを編集 – uguboz

関連する問題