0

これがおそらく非常に単純な答えであることはわかっていますが、ここで少し困惑しています。Panel次のコンストラクターを使用して、カスタム ビュー を作成しています。

public Panel(Context context, AttributeSet attrs, int barLength){
    super(context, attrs);

    //paint object for drawing in onDraw
    barPaint = new Paint();
    bar = new Rect(3, 13, barLength, 3); // Rect object

    //...other stuff, etc etc

}

このビューが使用されるアクティビティでは、テーブル レイアウトの異なるセル内で 5 回作成されます。引数に基づいて長さが変化Panelする非常に単純なものです。RectbarLength

したがって、Panelビューが実際に作成されるアクティビティでは、次のように呼び出されます。

private Panel tagBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tagBar = (Panel) findViewById(R.id.custView);       
}

おわかりのように、これは上で概説したコンストラクターを使用しません。Panelnewを正しくインスタンスContext化するにはどうすればよいAttributeSetですか? (引数なしで) 構築されるとint barLength、それらは自動的に渡されるようになりました。tagBar3 つの引数すべてを適切に渡すに は、どのようにインスタンス化する必要がありますか?

明確にするために、attrs.xml はstyleable主に xml からバーの色を設定するために使用される属性ファイルです。誰でも私に指示を与えることができますか?

ありがとう!

4

1 に答える 1

0

xml にパネル クラスがある場合、フレームワークは適切なコンストラクターを呼び出し、コンテキストと属性を渡します。その後、attrs.xml で新しい属性を作成できます。それが完了したら、バーの長さを xml 経由で渡すこともできます。

<resources>
    <declare-styleable name="Panel">
        <attr name="barLength" format="int" />
    </declare-styleable>
</resources>

次に、xml に barLength=n を追加します。xml の他の属性と同じように、前に android: を追加しません。

于 2013-05-13T04:04:53.597 に答える