3

私は Android の初心者であり、英語が母国語ではないため、私の問題が理解できることを願っています。

いくつかの TextView、ProgressBar、および Button をグループ化するカスタム ウィジェットを作成したいと思います。目標は、ボタンのテキストなどを定義するカスタム属性を使用して XML レイアウト ファイルでカスタム ウィジェットを宣言できるようにすることです。ただし、内部の Android ウィジェットの配置は同じで、クラスで定義されます。

カスタム属性を宣言してカスタム ウィジェットを作成する方法は見つかりましたが、既存の Android ウィジェットを配置する単純なケースのドキュメントや例は見つかりませんでした。私は驚いているので、間違った方向に検索している可能性があります。

私がテストしている簡単なコードの下。

カスタムクラス:

public class CastleViewItem extends View {

    private TextView item;

    public CastleViewItem (Context c, AttributeSet attributes) {
        super(c, attributes);
        item = new TextView(c);
        TypedArray attrs = c.obtainStyledAttributes(attributes, R.styleable.CastleViewItem);
        item.setText(attrs.getString(R.styleable.CastleViewItem_name).toString());
 }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas); 
        // I suppose there is some code to add here.
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(200, 200);
        // item.getWidth()/item.getHeight() return 0, so I fixed temporarily the value to ensure 
        // the widget will be displayed.
    }
}

XML カスタム属性の宣言:

<resources>
    <declare-styleable name="CastleViewItem">
        <attr name="name" format="string" />
    </declare-styleable>
</resources>

XML レイアウト ファイル:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ffbdx="http://schemas.android.com/apk/res/bdx.fleurey"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <bdx.fleurey.CastleViewItem
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ffbdx:name="Moat" />

</LinearLayout>

このコードは何も表示しません。私はあなたの答え/アドバイスに感謝します。

4

0 に答える 0