首页 文章

android studio中的nav_header_main

提问于
浏览
0

[这是截图] [1]你可以帮我吗,找不到 Headers (电子邮件和profil的图像),这个代码为nav_header_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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/profil" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"         
        android:src="@drawable/profil" />

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

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="aaaa.com" />

</LinearLayout>`

main_pro.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout          
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:context=".tracking.MainPro">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer"/>
    </android.support.v4.widget.DrrawerLayout>

错误:错误:(2)在包'com ....中找不到属性'context'的资源标识符

08-12 16:57:52.849 5438-5438 / .gps.tracking E / AndroidRuntime:FATAL EXCEPTION:main进程:gps.tracking,PID:5438 java.lang.RuntimeException:无法启动活动ComponentInfo {.gps.tracking /.gps.tracking.MainPro}:android.view.InflateException:二进制XML文件行#15:在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)处输入类android.support.design.widget.NavigationView时出错android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)在android.app.ActivityThread.access $ 900(ActivityThread.java:175)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1308)在android . android.app.Looper.loop(Looper.java:146)的os.Handler.dispatchMessage(Handler.java:102)位于android.app.ActivityThread.main(ActivityThread.java:5602)的java.lang.reflect.Method位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)的com.a上的java.lang.reflect.Method.invoke(Method.java:515)中的.invokeNative(Native Method) nalroid.internal.os.ZygoteInit.main(ZygoteInit.java:1099)at dalvik.system.NativeStart.main(Native Method)引起:android.view.InflateException:二进制XML文件行#15:错误膨胀类android.support Android.view.LayoutInflater.rInflate(LayoutInflater.java:761)中android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)的android.view.LayoutInflater.createView(LayoutInflater.java:626)中的.design.widget.NavigationView )在android.view.LayoutInflater.inflate(LayoutInflater.java:498)的android.view.LayoutInflater.inflate(LayoutInflater.java:398)android.view.LayoutInflater.inflate(LayoutInflater.java:358)android.support .v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)位于gps.tracking.MainPro.onCreate(MainPro.java:31)的android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) Android.app.Instrumentation.callActivityOnCreate(Instrumentation)上的android.app.Activity.performCreate(Activity.java:5451) .java:1093)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)android.app.ActivityThread.access $ 900(ActivityThread.java:175) )android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1308)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:146)在android .app.ActivityThread.main(ActivityThread.java:5602)位于java.lang.reflect.Method.invokeNative(Native Method),位于com.android.internal的java.lang.reflect.Method.invoke(Method.java:515)位于dalvik.system.NativeStart.main(本地方法)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)中的.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)引起:java位于android.view.LayoutInflater.createView(L的java.lang.reflect.Constructor.newInstance(Constructor.java:423)的java.lang.reflect.Constructor.constructNative(Native Method)的.lang.reflect.InvocationTargetException ayoutInflater.java:600)在android.view.LayoutInflater.inflate(LayoutInflater.java:761)的android.view.LayoutInflater.inflate(LayoutInflater.java:498)的android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) )android.view.LayoutInflater.inflate(LayoutInflater.java:398)android.view.LayoutInflater.inflate(LayoutInflater.java:354)android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)在Android.app.Activity.performCreate(Activity.java:5451)的gps.tracking.MainPro.onCreate(MainPro.java:31)上的android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) Android.app.A活动中的android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)android.app.ActivityThread的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) .access $ 900(ActivityThread.java:175)在android.app.ActivityThread $ H.handleMessage(Activ) ityThread.java:1308)在android.os.Handler.dispatchMessage(Handler.java:102)的android.os.Looper.loop(Looper.java:146)atandroid.app.ActivityThread.main(ActivityThread.java:5602)位于com.android的java.lang.reflect.Method.invoke(Method.java:515)的java.lang.reflect.Method.invokeNative(Native Method)中 . 在dalvik.system.NativeStart.main(本地方法)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)中的internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)引起: android.view.InflateException:二进制XML文件行#14:在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView的android.view.LayoutInflater.createView(LayoutInflater.java:626)中输出类android.widget.ImageView时出错(PhoneLayoutInflater.java:56)位于android.view.LayoutInflater.RC中的android.view.LayoutInflater.onCreateView(LayoutInflater.java:675),android.view.LayoutInflater.rInflate(LayoutInflater.java: 761)在Android.view.LayoutInflater.inflate(LayoutInflater.java:498)android.view.LayoutInflater.inflate(LayoutInflater.java:398)android.support.d . esign.internal.NavigationMenuPresenter.inflateHeaderView(NavigationMenuPresenter.java:184)位于android.support.design.widget.NavigationView的android.support.design.widget.NavigationView.inflateHeaderView(NavigationView.java:227) . (NavigationView.java:152 )在java.lang.reflect.Constructor.newInstance(Constructor.java:423)的java.lang.reflect.Constructor.constructNative(Native Method)的android.support.design.widget.NavigationView . (NavigationView.java:88)上 . 在Android.view.LayoutInflater.rInflate(LayoutInflater.java:761)上的android.view.LayoutInflater.createView(PlaceInflater.java:70)上的android.view.LayoutInflater.createView(LayoutInflater.java:600) . LayoutInflater.inflate(LayoutInflater.java:498)位于android.view.LayoutInflater.inflate(LayoutInflater.java:398),位于android.sview.LayoutInflater.inflate(LayoutInflater.java:354),位于android.support.v7.app.AppCompatDelegateImplV7 android.support.v7.app.AppCompatActivity上的.setContentView(AppCompatDelegateImplV7.java:249) .setContentView(AppCompatActivity.java:106)位于android.app.Instrumentation.callActivityOnCreate(Instrumentation)上android.app.Activity.performCreate(Activity.java:5451)的.gps.tracking.MainPro.onCreate(MainPro.java:31) .java:1093)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)android.app.ActivityThread.access $ 900(ActivityThread.java:175) )android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1308)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:146)在android .app.ActivityThread.main(ActivityThread.java:5602)位于java.lang.reflect.Method.invokeNative(Native Method),位于com.android.internal的java.lang.reflect.Method.invoke(Method.java:515) .os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)at dalvik.system.NativeStart.main(Native Method)引起的:java.lang.reflect.Constructor.constructNative(Native Method)中的java.lang.reflect.InvocationTargetException,位于android.view.LayoutInflater.createView(LayoutInflater)的java.lang.reflect.Constructor.newInstance(Constructor.java:423)中 . java:600)at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)at android.view.LayoutInflater.createViewFromTag(LayoutInflater) .java:700)在android.view.LayoutInflater.inflate(LayoutInflater.java:498)的android.view.LayoutInflater.inflate(LayoutInflater.java:498)处于android.view.LayoutInflater.inflate(LayoutInflater.java:398)在Android.support.design.wat.NavigationView的android.support.design.internal.NavigationMenuPresenter.inflateHeaderView(NavigationMenuPresenter.java:184)的android.support.design.widget.NavigationView.inflateHeaderView(NavigationView.java:227)处 . NavigationView.java:152)在android.support.design.widget.NavigationVie w . (NavigationView.java:88)java.lang.reflect.Constructor.constructNative(Native Method)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at android.view.LayoutInflater.createView(LayoutInflater) .java:600)在Android.view.LayoutInflater.inflate(LayoutInflater.java:498)的android.view.LayoutInflater.rInflate(LayoutInflater.java:761)的android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)在android.view.LayoutInflater.inflate(LayoutInflater.java:398)处android.view.LayoutInflater.inflate(LayoutInflater.java:354)在android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java: 106)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)的android.app.Activity.performCreate(Activity.java:5451)的com.sifast.gps.tracking.MainPro.onCreate(MainPro.java:31) )在android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)以及android.app.A活动时,我在android.app.ActivityThread.access $ 900(ActivityThread.java:175)上安装了android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) . app.ActivityThread $ H.handleMessage(ActivityThread.java:1308)位于android.app.ActivityThread的android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:146) .main(ActivityThread.java:5602)位于java.lang.reflect.Method.invoke的java.lang.reflect.Method.invokeNative(Native Method)中(Method.java) :515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)at dalvik.system.NativeStart . main(Native方法)引起:android.content.res.Resources $ NotFoundException:资源不是Drawable(颜色或路径):android.content中的TypedValue {t = 0x1 / d = 0x7f020043 a = -1 r = 0x7f020043} .res.Resources.loadDrawable(Resources.java:3412)位于android.widget.ImageView的android.widget.上的android.content.res.TypedArray.getDrawable(TypedArray.java:602) . (ImageView.java:133) . (ImageView.java:123)java.lang.reflect.Constructor.constructNative(Native Method),位于android.view.LayoutInflater.createView(LayoutInflater)的java.lang.reflect.Constructor.newInstance(Constructor.java:423) . java:600)在android.view.LayoutInflater.createViewFromT的android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)的com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)位于android.view.LayoutInflater.inflate(LayoutInflater.java:498)的android.view.LayoutInflater.inflate(LayoutInflater.java:761)中的ag(LayoutInflater.java:700)(LayoutInflater.java:772) :398)在android.support.design.design.widget上的android.support.design.internal.NavigationMenuPresenter.inflateHeaderView(NavigationMenuPresenter.java:184)android.support.design.widget.NavigationView.inflateHeaderView(NavigationView.java:227) . NavigationView . (NavigationView.java:152)位于java.lang.reftruct.Constructor的java.lang.reflect.Constructor.constructNative(Native Method)的android.support.design.widget.NavigationView . (NavigationView.java:88) . android.view.LayoutInflater.rInflate(LayoutInflater.java)中android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)的android.view.LayoutInflater.createView(LayoutInflater.java:600)中的newInstance(Constructor.java:423) :761)在android.view.LayoutInflate的android.view.LayoutInflater.inflate(LayoutInflater.java:498) r.inflate(LayoutInflater.java:398)在android.sview.LayoutInflater.inflate(LayoutInflater.java:354)的android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)android.support.v7 .app.AppCompatActivity.setContentView(AppCompatActivity.java:106)位于android.app.Instrumentation的android.app.Activity.performCreate(Activity.java:5451)的gps.tracking.MainPro.onCreate(MainPro.java:31) . callActivityOnCreate(Instrumentation.java:1093)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)android.app.ActivityThread.access $ 900(ActivityThread . java:175)在android.app.A.运行时,Android.O.Roper.loop(Looper.java:146)上android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1308) )在java.lang.reflec的java.lang.reflect.Method.invokeNative(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5602)上t.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 1099)at dalvik.system.NativeStart.main(Native Method)08-12 17:00:00.674 5438-5438 / gps.tracking I / Process:发送信号 . PID:5438 SIG:9

1 回答

  • 1

    NavigationView 在内部使用 RecyclerView 来显示 Headers 和菜单项 . 这会导致活动在 Headers 中找不到任何视图,因为 RecyclerView 动态加载视图(这是它的全部目的) .

    但是,支持库有一个获取 Headers 视图的方法,如_2756113中所述:

    getHeaderView(int index):获取指定位置的 Headers 视图 .

    所以下面的代码应该获取配置文件 ImageView 和电子邮件 TextView

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    View headerView = navigationView.getHeaderView(0);
    ImageView profileView = (ImageView) headerView.findViewById(R.id.profil);
    TextView emailView = (TextView) headerView.findViewById(R.id.textView);
    

    Edit: 基于您提供的堆栈跟踪,核心问题如下( @drawable/profil 显然不是有效的可绘制或不存在):

    android.content.res.Resources $ NotFoundException:资源不是Drawable(颜色或路径)

相关问题