0

私はAndroid開発に不慣れで、アプリの「カスタムメニューボタン」として機能するカスタムビューを実装しようとしています。

http://developer.android.com/training/custom-views/create-view.htmlの指示に従いましたが、実装が終了するまでに、「残念ながらcustomviews1が停止しました」というメッセージが表示され、アプリがシャットダウンしました。 。

私のアプローチは非常に単純であり、この基本的な問題を解決するための参考資料を見つけることができません。これが私がしていることです:

  1. Eclipseで「customviews1」という名前の新しいAndroidプロジェクトを作成します

  2. プロジェクトを実行すると、「activity_main.xml」レイアウトファイルに「HelloWorld」TextViewが表示されます

  3. プロジェクトの「src」フォルダに「View」を拡張するMyCustomViewという名前の新しいクラスを追加します

    public class MyCustomView extends View {
        public MyCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    }
    
  4. activity_main.xmlから「TextView」タグを削除し、それに「customview1」を追加します。

    <com.example.customviews1.MyCustomView android:id="@+id/myCustomView1" />
    
  5. アプリを再度実行すると、「残念ながらcustomviews1が停止しました」というメッセージが表示され、アプリがシャットダウンします。

ここで欠落しているコードはありますか?

手がかりをありがとう、よろしく、ビクターReboucas

4

3 に答える 3

4

LogCat の出力を確認すると、レイアウトで layout_width と layout_height を指定する必要があるというエラーが表示されます。

だから書く:

<com.example.customviews1.MyCustomView android:id="@+id/myCustomView1" 
   android:layout_width="match_parent" android:layout_height="match_parent"/>

そしてそれはうまくいくはずです。

于 2012-08-27T18:53:42.230 に答える
0

以下のようにしてみてください。私はこれを試して成功しました。まず、3 つのスーパークラス コンストラクターをすべてオーバーライドする必要があります。

ビューに何かを表示するには、onDraw()メソッドをオーバーライドする必要があります。

public class MyCustomView extends View {
    //variables and objects
    Paint p;

    //override all three constructor
    public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

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

    public MyCustomView(Context context) {
        super(context);
        init();
    }
    //do what you want in this method
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawText("This is custom view this can be added in xml", 10, 100, p);
        canvas.drawRect(20, 200, 400, 400, p);
        super.onDraw(canvas);
    }
    //all the initialization goes here
    private void init() {
        p =new Paint();
        p.setColor(Color.RED);
    }
}

xmlファイルに次の例のように含めます

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.sanath.customview.MyCustomView
    android:id="@+id/myCustomView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" />
</RelativeLayout>

これがあなたを助けることを願っています

于 2012-08-27T19:33:51.750 に答える
0

その方法でそれを行うことはできないと思います。ビュー クラスのすべてのメソッドをオーバーライドする必要がありますonDraw()

于 2012-08-27T18:53:23.003 に答える