2012-10-31 42 views
0

我已经扩展TextView也执行Checkable。我没有碰过任何TextView的东西,除了onCreateDrawableState。此外,我刚刚实施了Checkable方法。 (有删节的清晰度。)TextView扩展; UnsupportedOperationException

public class CheckableTextView extends TextView implements Checkable { 

public CheckableTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected int[] onCreateDrawableState(int extraSpace) { 
    final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
    if (isChecked()) { 
     mergeDrawableStates(drawableState, CheckedStateSet); 
    } 
    return drawableState; 
} 

它编译于ICS罚款,但在Android 2.3的我得到一个非常奇怪的错误时,程序试图夸大这一观点。

10-31 00:51:20.414: E/AndroidRuntime(601): FATAL EXCEPTION: main 
10-31 00:51:20.414: E/AndroidRuntime(601): android.view.InflateException: Binary XML file line #3: Error inflating class net.blackenvelope.utrechtafval.map.layouts.CheckableTextView 

...

10-31 00:51:20.414: E/AndroidRuntime(601): Caused by: java.lang.reflect.InvocationTargetException 
10-31 00:51:20.414: E/AndroidRuntime(601): at java.lang.reflect.Constructor.constructNative(Native Method) 
10-31 00:51:20.414: E/AndroidRuntime(601): at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
10-31 00:51:20.414: E/AndroidRuntime(601): at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
10-31 00:51:20.414: E/AndroidRuntime(601): ... 45 more 
10-31 00:51:20.414: E/AndroidRuntime(601): Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x2 
10-31 00:51:20.414: E/AndroidRuntime(601): at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:463) 
10-31 00:51:20.414: E/AndroidRuntime(601): at android.view.View.<init>(View.java:1963) 
10-31 00:51:20.414: E/AndroidRuntime(601): at android.widget.TextView.<init>(TextView.java:344) 
10-31 00:51:20.414: E/AndroidRuntime(601): at android.widget.TextView.<init>(TextView.java:337) 
10-31 00:51:20.414: E/AndroidRuntime(601): at net.app.layouts.CheckableTextView.<init>(CheckableTextView.java:11) 
10-31 00:51:20.414: E/AndroidRuntime(601): ... 48 more 

我似乎无法找出这种类型= 0X2手段。

这里是XML:

<?xml version="1.0" encoding="utf-8"?> 

<app.CheckableTextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/overlay_type_title" 
    android:layout_width="match_parent" 
    android:background="@drawable/overlay_list_bg_selector" 
    android:layout_height="wrap_content" 
    android:drawableLeft="@drawable/overlay_list_icon" 
    android:drawablePadding="10dp" 
    android:gravity="center_vertical" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" 
    android:paddingLeft="10dp" 
    android:paddingRight="?android:attr/listPreferredItemPaddingRight" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    > 
</app.CheckableTextView> 
+1

这意味着您将一个属性作为维值传递,可能在您的XML中。我们可以看到你正在膨胀的XML文件吗? – Eric

+0

啊,我真的没有得到这个属性业务。我想我从某个地方的某个例子中复制它。我将如何去硬编码这些属性?这是明智的吗? – Maarten

回答

1

?android:attr/listPreferredItemPaddingLeft?android:attr/listPreferredItemPaddingRight仅在API可用14+(ICS或更高版本)。因此,它不是将其解释为API 9-10(2.3)中的一个维度。

我会建议使用您自己的值。如果您熟悉资源文件,请添加一个<dimen>属性,其填充值与您在ICS上看到的填充值类似,然后参考该属性。

如果您不熟悉自定义XML值,请看一下at the dimen documentation

+0

有没有办法通过其他方式获得ICS值而不是试验和错误?就像找到源代码一样? – Maarten

+1

我知道他们在某处的源代码,但不知道在哪里。但是,您可以使用'activity.getTheme()。resolveAttribute(android.R.attr.your_attribute_name_here,value,true);'来获取值。那个[在这个答案](http://stackoverflow.com/a/5982483/1438733)的例子。 – Eric