Как получить ссылку на другое представление в наборах атрибутов - аналогично layout_below = "id" в относительном макете? - PullRequest
0 голосов
/ 08 декабря 2018

Я создаю пользовательский вид.Я могу успешно получать ресурсы, используя format="reference".Однако теперь я хочу передать id другого представления в качестве атрибута, и я хочу придерживаться следующих ограничений, аналогичных относительной компоновке.

  1. Это должен быть идентификатор или ссылка напредставление - не drawable или color или любое другое значение.
  2. макет с указанным идентификатором должен существовать в текущем файле XML.
  3. Я должен иметь возможность получить ссылку на это представление и передать его другим методам.

Например, в относительной компоновке, если вы введете layout_below = "@id+/someid" и если someid не подходит, показывает предупреждение или ошибку.

Как этого добиться, пожалуйста, помогите.

Обновление

Вот как я определяюатрибут

<attr name="myView" format="reference"/>
<attr name="dimen" format="dimension"/>

так я определяю вид в макете xml

....
xmlns:custom="http://schemas.android.com/apk/res-auto"
.....
<myPackage.mycustomView android:id = "@+id/myId"
     custom:dimen = "10dp" ///-- this one works fine
     custom:myView = "@+id/id_of_another_view_in_xml" //-- I am not able to retrive this view
     ....
/>

1 Ответ

0 голосов
/ 08 декабря 2018

Это должен быть идентификатор или ссылка на представление - не может быть нарисовано, либо цветом, либо любым другим значением.

При указании атрибута для пользовательского представления в файле attrs.xml дляидентификатор, все, что вам нужно, это тип reference.

макет с указанным идентификатором должен существовать внутри текущего XML-файла.

Красное предупреждениевы видите в Android Studio при вводе неверного идентификатора предупреждение lint .Если идентификатор существует, но не в файле макета, он все равно будет скомпилирован.

Если вы хотите добиться того же самого для своего пользовательского представления, вам, вероятно, нужно добавить собственное правило lint .

Я должен иметь возможность получить ссылку на это представление и передать его другим методам.

Не совсем уверен, что вы 'повторяюПосле того, как вы надули пользовательское представление и получили значения из атрибутов XML, у вас должна быть ссылка на идентификатор, которую вы затем можете использовать в пользовательском представлении, чтобы сделать findViewById.Если это не отвечает на ваш вопрос, уточните.

РЕДАКТИРОВАТЬ: Пример кода, внутри вашего конструктора пользовательского представления:

mIdReference = a.getResourceId(R.styleable.MyCustomView_my_view, 0)
if (mIdReference != 0) {
    View subView = findViewById(mIdReference)
}

Надеюсь, это поможет!

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