Android создает собственный вид и поле - PullRequest
0 голосов
/ 06 февраля 2012

У меня небольшая проблема с пониманием: я пытался самостоятельно внедрить Snake-Example, потому что я собираюсь реализовать собственный View.SnakeView наследует от TileView, который является представлением на основе плиток и который загружает простые квадратные растровые изображения (отрисовки) по определенным координатам.

Ну, сейчас я не понимаю необходимости "attrs.xml":

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

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

Я определил свой собственный атрибут tileSize из типа integer , который используется в 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 в файле макета, верно?Но только если я изменю 2-й параметр (значение по умолчанию) в моем конструкторе, размер изменится.Обычный способ - использование макета - не меняет tileSize.

Полагаю, значение макета неверно связано с этим вызовом конструктора, не так ли?

У вас есть идеи?

Спасибо большое!

1 Ответ

0 голосов
/ 24 февраля 2012

Имя декларируемого тега и имя класса должны совпадать.

И корневой тег вашего макета должен иметь атрибут:

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

Тогда вы можете заменить tileSize="50" на app:tileSize="50"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...