0

これが私のカスタムビューを使用しているxmlです。そのビューは com.soft.MyView という名前の別のパッケージにあり、ビューを拡張しているクラスも MyView という名前で、強制的に閉じられ、logcat のエラーは 07-21 16:26:29.936: ERROR/AndroidRuntime(19854): です:原因: android.view.InflateException: Binary XML file line #12: Error inflating class com.soft.MyView.MyView ..plss tell me where am I wrong??

       <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout1" xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView android:id="@+id/TextView1" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<com.soft.MyView.MyView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/TextView1" android:layout_centerHorizontal="true" android:layout_marginTop="187dp" android:id="@+id/drawingImageView"/>
</RelativeLayout>

ここに私のクラスMyViewがあります

    public class MyView extends View{



class Pt{

    float x, y;



    Pt(float _x, float _y){

        x = _x;

        y = _y;

    }

}



Pt[] myPath = { new Pt(100, 100),

                new Pt(200, 200),

                new Pt(200, 500),

                new Pt(400, 500),

                new Pt(400, 200)

                };



    public MyView(Context context) {

        super(context);

        // TODO Auto-generated constructor stub

    }



    @Override

    protected void onDraw(Canvas canvas) {

        // TODO Auto-generated method stub

        super.onDraw(canvas);





        Paint paint = new Paint();

        paint.setColor(Color.WHITE);

        paint.setStrokeWidth(3);

        paint.setStyle(Paint.Style.STROKE);

        Path path = new Path();



        path.moveTo(myPath[0].x, myPath[0].y);

        for (int i = 1; i < myPath.length; i++){

            path.lineTo(myPath[i].x, myPath[i].y);

        }

        canvas.drawPath(path, paint);



    }



}
4

3 に答える 3

0

構文 <yourcompletepackagename.YourCustomClassName ..../>

<com.soft.MyView 
          ^^^^^^
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_below="@+id/TextView1" 
android:layout_centerHorizontal="true" 
android:layout_marginTop="187dp" 
android:id="@+id/drawingImageView"/>
于 2012-07-21T11:42:48.023 に答える
0
  • 問題の理由は、コード バージョン CTOR のみを使用したことです。

    パブリック ビュー (コンテキスト コンテキスト)

    Android開発者ガイドからの引用:

    コードからビューを作成するときに使用する単純なコンストラクター。

  • 解決策は、カスタム ビューがレイアウトの膨張プロセスに必要とするすべての CTOR を追加するか、少なくとも次の CTOR を追加することです。

    パブリック ビュー (コンテキスト コンテキスト、AttributeSet 属性)

    Android開発者ガイドからの引用:

    XML からビューをインフレートするときに呼び出されるコンストラクター。これは、ビューが XML ファイルから構築されているときに呼び出され、XML ファイルで指定された属性を提供します。このバージョンはデフォルトのスタイル 0 を使用するため、適用される属性値はコンテキストのテーマと指定された AttributeSet のものだけです。

于 2012-07-21T12:21:00.753 に答える
0

MyView で別のコンストラクターをオーバーライドする必要があります。このコンストラクターだけを使用する代わりに:

public MyView(Context context) {
   super(context);
}

カスタム ビューを作成するときは、少なくともこれもオーバーライドする必要があります。

public MyView(Context context, AttributeSet attrs) {
   super(context, attrs);
}
于 2012-07-21T12:24:46.853 に答える