java.lang.UnsupportedOperationException: 无法转换为尺寸:类型=0x12

24
所以我的问题有点奇怪。我一直收到这个错误提示:
java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x12

奇怪的是这只在4.1.2版本上出现。我已经测试了4.0.3、4.2.2、4.3和4.4,除了4.1.2以外,其他版本都完美运行。既然4.0.3可以正常工作,理论上4.1.2也应该如此,所以我就是搞不明白哪里出了问题。
以下是我的activity_main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true"
tools:context="-removed name-">


<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">

    <!-- FrameLayout to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- ListView to display slider menu -->
    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background" />
</android.support.v4.widget.DrawerLayout>
</FrameLayout>

这是我的fragment_layout.xml文件内容:
 <RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

 <Spinner
 android:layout_width="match_parent"
 android:layout_height="48dp"
 android:id="@+id/spinner_convertFrom"
 android:spinnerMode="dialog"
 android:layout_marginLeft="16dp"
 android:layout_marginRight="4dp"
 android:layout_alignRight="@+id/button"
 android:layout_alignTop="@+id/spinner_convertTo" />

<Spinner
android:layout_width="match_parent"
android:layout_height="48dp"
android:id="@+id/spinner_convertTo"
android:spinnerMode="dialog"
android:layout_marginRight="16dp"
android:layout_marginLeft="4dp"
android:layout_alignLeft="@+id/button"
android:layout_marginTop="90dp" />

<EditText
android:layout_width="wrap_content"
android:layout_height="48dp"
android:inputType="numberDecimal|numberSigned"
android:ems="10"
android:id="@+id/editText_convert"
android:gravity="center"
android:imeOptions="actionDone"
android:selectAllOnFocus="true"
android:layout_marginBottom="30dp"
android:layout_above="@+id/button_Convert"
android:layout_centerHorizontal="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="48dp"
android:text="@string/convert_button"
android:id="@+id/button_Convert"
android:clickable="true"
android:gravity="center"
android:layout_marginBottom="40dp"
android:layout_above="@+id/textView_result"
android:layout_centerHorizontal="true"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/convert_from"
android:id="@+id/textView_convertFrom"
android:textSize="14sp"
android:layout_alignLeft="@+id/spinner_convertFrom"
android:layout_marginBottom="8dp"
android:layout_alignTop="@+id/textView_ConvertTo" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/convert_to"
android:id="@+id/textView_ConvertTo"
android:textSize="14sp"
android:layout_alignLeft="@+id/spinner_convertTo"
android:layout_marginTop="74dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="120dp"
android:text="@string/result_box"
android:id="@+id/textView_result"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:gravity="center"
android:singleLine="false"
android:textIsSelectable="true"
android:background="@drawable/result_border" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/button"
android:layout_centerHorizontal="true" />

</RelativeLayout>

我已经搜索了所有类似的问题,但它们提供的解决方案对我来说都不起作用。

完整日志:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{-removed name-/-removed name-.MainActivity}: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x12
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
        at android.app.ActivityThread.access$600(ActivityThread.java:130)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4745)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x12
        at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:463)
        at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:5616)
        at android.widget.LinearLayout$LayoutParams.<init>(LinearLayout.java:1809)
        at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:1721)
        at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:58)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:748)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
        at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:2784)
        at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:2844)
        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:252)
        at android.app.Activity.setContentView(Activity.java:1867)
        at -removed name-.MainActivity.onCreate(MainActivity.java:41)
        at android.app.Activity.performCreate(Activity.java:5008)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)

整个logcat没有发布。以下是剩余部分:
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

Styles.xml:

<resources xmlns:tools="http://schemas.android.com/tools">

<style name="AppTheme" parent="@android:style/Theme.Holo">
    <item name="android:popupMenuStyle">@style/PopupMenu.Konvertr</item>
    <item name="android:actionBarStyle">@style/ActionBar.Solid.Konvertr</item>
    <item name="android:windowBackground">@color/window_bg</item>
    <item name="android:windowTranslucentNavigation" tools:targetApi="19">true</item>
    <item name="android:dropDownSpinnerStyle">@style/SpinnerAppTheme</item>
</style>

<style name="ActionBar.Solid.Konvertr" parent="@android:style/Widget.Holo.ActionBar.Solid">
    <item name="android:background">@drawable/ab_background_textured_konvertr</item>
    <item name="android:backgroundStacked">@drawable/ab_stacked_solid_konvertr</item>
    <item name="android:backgroundSplit">@drawable/ab_background_textured_konvertr</item>
</style>

<style name="ActionBar.Transparent.Konvertr" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@drawable/ab_transparent_konvertr</item>
</style>

<style name="PopupMenu.Konvertr" parent="@android:style/Widget.Holo.ListPopupWindow">
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_konvertr</item>
</style>

<style name="SpinnerAppTheme" parent="@android:Widget.Holo.Spinner">
    <item name="android:background">@drawable/apptheme_spinner_background_holo_dark</item>
</style>


MainActivity.java:41 发生了什么?你使用了自定义主题吗? - Yaroslav Mytkalyk
我认为问题出在AppTheme中引用的@style/某处。尝试将它们全部删除(重置为默认值),然后逐个添加,直到崩溃发生。这样你就可以找到具有错误属性的样式。 - Yaroslav Mytkalyk
你说得完全正确,@DoctororDrive。我还没有确定是哪一个问题,但肯定是样式的问题。非常感谢你。你真是我的救星。 - Runedrune
看起来是由于<item name="android:windowTranslucentNavigation" tools:targetApi="19">true</item>引起的。也许只是模拟器的问题。我刚才把它发送给一个朋友,他说在他的手机上运行良好。这太令人困惑了。:( - Runedrune
尝试在values-v19/中使用android:windowTranslucentNavigation来设置样式。 - Yaroslav Mytkalyk
显示剩余3条评论
2个回答

33
你应该在values-v19样式中添加android:windowTranslucentNavigation属性。旧版本不支持该属性。

1
似乎将新的API移出主题对我有帮助。 - Chris.Jenkins
2
为什么会发生这种情况?它发生在一个本不应该查看这个属性的设备上...还有其他类似的情况吗?可能是由于生成的 R 值冲突导致的吗? - android developer
我相信Android 4.1.1中存在一个bug,会导致它崩溃。Android在使用主题中的新属性方面从未出现过问题。 - Michell Bak
@MichellBak,也许它可以在某些平台上工作,但是新项目的主题模板创建了一个名为AppBaseTheme的默认主题,并带有注释“较新 API 级别中可用的主题自定义可以放在 res/values-vXX/styles.xml 中,而与向后兼容性相关的自定义可以放在此处。”这指向正确的方向。 - Yaroslav Mytkalyk
2
相同的问题和解决方案也适用于android:windowTranslucentStatus - Flávio Faria
将android:windowTranslucentNavigation属性放在values-v19/中,解决了我的问题。谢谢。 - Gregriggins36

4

虽然可能有很多属性会导致应用崩溃,但由于修复难度较大,您可能只需检查 ?android:attr/listPreferredItemPaddingStart(以及所有其他以 ~start 和 ~end 结尾的属性)。这个问题 也表明 windowTranslucentStatuswindowTranslucentNavigation 是一个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接