我有一个小的理解问题:我试图自我实现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。
我假设布局值与这个构造函数调用没有关联,是吗?
你有什么想法吗?
非常感谢你!
答案 0 :(得分:0)
declare-styleable标签的名称和类名必须相同。
布局的根标签必须具有以下属性:
xmlns:app="http://schemas.android.com/apk/res/your_package_name"
然后,您可以将tileSize="50"
替换为app:tileSize="50"