Android创建自己的View&领域

时间:2012-02-06 11:07:38

标签: android android-layout

我有一个小的理解问题:我试图自我实现Snake-Example因为我将实现自己的View。 SnakeView继承自TileView,这是一个基于图块的视图,它将简单的方形位图(drawables)加载到特定坐标上。

我现在不明白“attrs.xml”的需要:

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

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

我定义了类型整数属性tileSize 在TileView中使用,对吗?此属性也可以在布局文件中找到:

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

现在令人困惑的方面:我的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();

}

...应该打开动态方式来更改布局文件中的tileSize,对吗?但是只有在我的构造函数中更改第二个参数(默认值)时,大小才会改变。常规方式 - 使用布局 - 不会更改tileSize。

我假设布局值与这个构造函数调用没有关联,是吗?

你有什么想法吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

declare-styleable标签的名称和类名必须相同。

布局的根标签必须具有以下属性:

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

然后,您可以将tileSize="50"替换为app:tileSize="50"