2012-02-06 13 views
0

私は小さな理解の問題があります。私は独自のビューを実装しようとしているので、Snake-Exampleを自己実装しようとしました。 SnakeViewは、タイルベースのビューであり、特定の座標に単純な正方形のビットマップ(ドロアブル)をロードするTileViewから継承します。Androidは独自のビューとフィールドを作成します

さて、私は今、「attrs.xml」の必要性を理解していない:

<?xml version="1.0" encoding="utf-8"?> 

<resources> 
    <declare-styleable name="TileView"> 
    <attr name="tileSize" format="integer" /> 
    </declare-styleable> 
</resources> 

を私は右、TileViewで使用ある整数型のタイルサイズ自分属性を定義し?

<net.xyz.android.snake.SnakeView 
    android:id="@+id/snakeView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tileSize="50" /> 

そして今、混乱側面:この属性は、同様layoutfileで見つけることができます私のTileViewのコンストラクタは次のとおりです。中にタイルサイズを変更するための動的な方法を開く必要があり

public TileView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TileView); 
    mTileSize = a.getInt(R.styleable.TileView_tileSize, 20); 
    a.recycle(); 

} 

...レイアウトファイル、右?しかし、私のコンストラクタで2番目のパラメータ(デフォルト値)を変更した場合にのみ、サイズが変更されます。通常の方法では、レイアウトを使用してもtileSizeは変更されません。

layout-valueがこのコンストラクタの呼び出しにリンクされていないと仮定します。

ご存知ですか?

ありがとうございました!

答えて

0

declare-styleableタグの名前とクラス名は同じでなければなりません。

そして、あなたのレイアウトのルートタグが属性を持っています

xmlns:app="http://schemas.android.com/apk/res/your_package_name" 

次に、あなたはapp:tileSize="50"

tileSize="50"を置き換えることができます
関連する問題