【问题标题】:How to change Navigation Drawer's header layout background color dynamically?如何动态更改导航抽屉标题布局背景颜色?
【发布时间】:2016-10-13 19:00:25
【问题描述】:

如您所知,android studio 有一个 Navigation Drawer Activity,它会在布局文件夹中自行创建一堆布局。

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="android.studio@android.com" />

</LinearLayout>

我想把上图中高亮部分的背景从MainActivity.java改成这样:

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

但无论我在哪里使用它都会出现错误:

java.lang.NullPointerException

有人可以在这方面帮助我吗?

【问题讨论】:

    标签: java android android-layout layout navigation-drawer


    【解决方案1】:

    您应该扩大导航视图标题布局以访问子项

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

    【讨论】:

    • 非常感谢。我很感激帮助。不幸的是,我得到两个标题一个在另一个之上。第三行中的变量视图也从未使用过。
    • 如何删除现在位于所需标题下方的第一个标题?
    • 但它们都是在一个导航视图中实现的,对吧?所以你应该这样得到它。并更正它删除了第三个参数。我编辑了我的答案
    • 我只看到一个标题。第一个标题是什么意思?
    • 我删除了那行,多余的标题也被删除了...谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多