抽屉式导航栏不工作的pre-ICS版本 [英] Navigation Drawer not working on pre-ICS versions

查看:139
本文介绍了抽屉式导航栏不工作的pre-ICS版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了导航抽屉基于一个ListView。它的工作原理完全正常使用ICS和更高版本的Andr​​oid版本。然而,在旧版本中,与此错误崩溃:

  06-23 15:50:​​11.570:E / AndroidRuntime(403):产生的原因:
android.content.res.Resources $ NotFoundException:
文件RES /绘制/ list_selector_background.xml
从XML类型绘制资源编号为0x0
 

我试图复制从Android SDK中这个特定的XML文件,以我自己的项目,但是这并没有帮助。

下面是XML文件(有删节):

 < XML版本=1.0编码=UTF-8&GT?;
< android.support.v4.widget.DrawerLayout
    的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / drawer_layout
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

    <的ListView
        机器人:ID =@ + ID / left_drawer
        机器人:layout_width =240dp
        机器人:layout_height =match_parent
        机器人:layout_gravity =开始
        机器人:后台=#DDDDDD
        机器人:choiceMode =singleChoice
        机器人:分隔=@彩色/灰度
        机器人:dividerHeight =1DP/>

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

而code:

  mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerList =(ListView控件)findViewById(R.id.left_drawer);
mDrawerLayout.openDrawer(mDrawerList);
 

完整的堆栈跟踪:

 未捕获的处理程序:螺纹主力退出,由于未捕获的异常
android.view.InflateException:
    二进制XML文件行#1:错误充气类<未知>

    在android.view.LayoutInflater.createView(LayoutInflater.java:513)
    在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
    在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
    在android.view.LayoutInflater.inflate(LayoutInflater.java:385)
    在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332)
    在android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
    在android.widget.AbsListView.obtainView(AbsListView.java:1274)
    在android.widget.ListView.makeAndAddView(ListView.java:1668)
    在android.widget.ListView.fillDown(ListView.java:637)
    在android.widget.ListView.fillFromTop(ListView.java:694)
    在android.widget.ListView.layoutChildren(ListView.java:1521)
    在android.widget.AbsListView.onLayout(AbsListView.java:1113)
    在android.view.View.layout(View.java:6830)
    在android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:672)
    在android.view.View.layout(View.java:6830)
    在android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    在android.view.View.layout(View.java:6830)
    在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
    在android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
    在android.widget.LinearLayout.onLayout(LinearLayout.java:918)
    在android.view.View.layout(View.java:6830)
    在android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    在android.view.View.layout(View.java:6830)
    在android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    在android.view.View.layout(View.java:6830)
    在android.view.ViewRoot.performTraversals(ViewRoot.java:996)
    在android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
    在android.os.Handler.dispatchMessage(Handler.java:99)
    在android.os.Looper.loop(Looper.java:123)
    在android.app.ActivityThread.main(ActivityThread.java:4363)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:521)
    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)
    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    在dalvik.system.NativeStart.main(本机方法)

java.lang.reflect.InvocationTargetException:产生的原因
    在android.widget.TextView< INIT>(TextView.java:320)
    在java.lang.reflect.Constructor.constructNative(本机方法)
    在java.lang.reflect.Constructor.newInstance(Constructor.java:446)
    在android.view.LayoutInflater.createView(LayoutInflater.java:500)
    ... 35个

致:android.content.res.Resources $ NotFoundException:
    文件RES /绘制/从绘制资源编号为0x0 list_selector_background.xml
    在android.content.res.Resources.loadDrawable(Resources.java:1693)
    在android.content.res.TypedArray.getDrawable(TypedArray.java:548)
    在android.view.View< INIT>(View.java:1850)
    在android.widget.TextView< INIT>(TextView.java:326)
    ... 39更多

致:android.content.res.Resources $ NotFoundException:
    文件RES /绘制/ list_selector_background.xml
    从XML类型绘制资源编号为0x0
    在android.content.res.Resources.loadXmlResourceParser(Resources.java:1920)
    在android.content.res.Resources.loadDrawable(Resources.java:1688)
    ... 42更多
 

解决方案

谷歌官方例子抽屉式导航,给出了这样的TextView作为drawer_list_item.xml的一部分

 < TextView中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:textAppearance =机器人:ATTR / textAppearanceListItemSmall
    机器人:背景=机器人:ATTR / activatedBackgroundIndicator
    机器人:=了minHeight:/>中的Andr​​oid ATTR /列表preferredItemHeightSmall?
 

然而,随着属性的这些确切的三个值中,应用程序无法在pre-ICS的Andr​​oid操作系统。我验证通过给自己的自定义值(任何从这些不同的),它的工作原理像变魔术一样在每一个版本。

I have implemented Navigation Drawer based on a ListView. It works perfectly fine with ICS and above versions of Android. However, on older versions, it crashes with this error:

06-23 15:50:11.570: E/AndroidRuntime(403): Caused by: 
android.content.res.Resources$NotFoundException: 
File res/drawable/list_selector_background.xml 
from xml type drawable resource ID #0x0

I have tried copying this particular xml file from Android sdk to my own project, but that didn't help.

Here's the xml file(abridged):

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#dddddd"
        android:choiceMode="singleChoice"
        android:divider="@color/gray"
        android:dividerHeight="1dp" />

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

And the code:

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerLayout.openDrawer(mDrawerList);

The complete stack trace:

Uncaught handler: thread main exiting due to uncaught exception
android.view.InflateException: 
    Binary XML file line #1: Error inflating class <unknown>

    at android.view.LayoutInflater.createView(LayoutInflater.java:513)
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332)
    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
    at android.widget.AbsListView.obtainView(AbsListView.java:1274)
    at android.widget.ListView.makeAndAddView(ListView.java:1668)
    at android.widget.ListView.fillDown(ListView.java:637)
    at android.widget.ListView.fillFromTop(ListView.java:694)
    at android.widget.ListView.layoutChildren(ListView.java:1521)
    at android.widget.AbsListView.onLayout(AbsListView.java:1113)
    at android.view.View.layout(View.java:6830)
    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:672)
    at android.view.View.layout(View.java:6830)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    at android.view.View.layout(View.java:6830)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
    at android.view.View.layout(View.java:6830)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    at android.view.View.layout(View.java:6830)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    at android.view.View.layout(View.java:6830)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4363)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.reflect.InvocationTargetException
    at android.widget.TextView.<init>(TextView.java:320)
    at java.lang.reflect.Constructor.constructNative(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
    at android.view.LayoutInflater.createView(LayoutInflater.java:500)
    ... 35 more

Caused by: android.content.res.Resources$NotFoundException: 
    File res/drawable/list_selector_background.xml from drawable resource ID #0x0
    at android.content.res.Resources.loadDrawable(Resources.java:1693)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
    at android.view.View.<init>(View.java:1850)
    at android.widget.TextView.<init>(TextView.java:326)
    ... 39 more

Caused by: android.content.res.Resources$NotFoundException: 
    File res/drawable/list_selector_background.xml 
    from xml type drawable resource ID #0x0
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:1920)
    at android.content.res.Resources.loadDrawable(Resources.java:1688)
    ... 42 more

解决方案

The official Google example for Navigation drawer, gives this TextView as part of drawer_list_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"/>

However, with these exact three values of attributes, the application fails on pre-ICS android OSes. I verified by giving my own custom values(anything different from these) and it works like magic on every version.

这篇关于抽屉式导航栏不工作的pre-ICS版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆