프리 야 싱할 (Priya Singhal)이 대답 한대로 Android Studio에서는 공통 속성 이름을 고유 한 스타일 이름으로 정의해야합니다. 그들은 더 이상 뿌리에있을 수 없습니다.
그러나 주목해야 할 몇 가지 다른 사항이 있습니다 (따라서 답변을 추가하는 이유도 있음).
- 일반적인 스타일은 뷰와 같은 이름을 지정할 필요가 없습니다. ( 이 점을 지적 해 주셔서 감사합니다 .)
- 부모와 상속을 사용할 필요는 없습니다.
예
다음은 동일한 속성을 공유하는 두 개의 사용자 정의보기가있는 최근 프로젝트에서 수행 한 작업입니다. 사용자 정의보기에 여전히 속성의 이름이 있고를 포함하지 않는 format
한 코드에서 정상적으로 액세스 할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- common attributes to all custom text based views -->
<declare-styleable name="TextAttributes">
<attr name="text" format="string"/>
<attr name="textSize" format="dimension"/>
<attr name="textColor" format="color"/>
<attr name="gravity">
<flag name="top" value="48" />
<flag name="center" value="17" />
<flag name="bottom" value="80" />
</attr>
</declare-styleable>
<!-- custom text views -->
<declare-styleable name="View1">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
<declare-styleable name="View2">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
</resources>
간소화 된 예
실제로 속성을 사용자 정의 이름으로 넣을 필요조차 없습니다. format
적어도 하나의 사용자 정의보기에 대해 정의 ()를 제공하는 한 어디에서나 ()없이 사용할 수 있습니다 format
. 그래서 이것은 또한 작동하고 깨끗해 보입니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="View1">
<attr name="text" format="string"/>
<attr name="textSize" format="dimension"/>
<attr name="textColor" format="color"/>
<attr name="gravity">
<flag name="top" value="48" />
<flag name="center" value="17" />
<flag name="bottom" value="80" />
</attr>
</declare-styleable>
<declare-styleable name="View2">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
</resources>
그러나 대규모 프로젝트의 경우이 작업이 지저분해질 수 있으며 단일 위치에서 맨 위에 정의하는 것이 좋습니다 ( 여기서 권장 됨 ).
myattr1
문자열이MyView1
있고 정수 가되면 어떻게됩니까MyView2
?