0

TextViewを実装するように拡張しましたCheckableTextViewを除いて、私は何にも触れていませんonCreateDrawableState。さらに、Checkableメソッドを実装しました。(わかりやすくするために要約されています。)

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

このtype=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>
4

1 に答える 1

1

?android:attr/listPreferredItemPaddingLeftAPI 14+ (ICS 以降)で?android:attr/listPreferredItemPaddingRightのみ使用できます。したがって、API 9-10 (2.3) のディメンションとして解釈されません。

自分の価値観を使うことをお勧めします。リソース ファイルに精通している場合は<dimen>、ICS で見られるものと同様のパディング値を持つ属性を追加してから、それを参照してください。

カスタム XML 値に慣れていない場合はdimenドキュメントを参照してください。

于 2012-10-31T00:40:18.063 に答える