Honeycomb Gallery 샘플 코드 ( 여기 )를보고 있으며 내 앱에 작업 항목을 추가하는 동안 다음 코드를 실행했습니다.
<item android:id="@+id/camera"
android:title="Camera"
android:icon="?attr/menuIconCamera"
android:showAsAction="ifRoom" />
은 ?attr
루프 날 던지고있다. 누군가 이것이 무엇을하는지 설명해 주시겠습니까? 이것은 드로어 블과 어떤 관련이 있습니까? Google에서 좋은 정보를 찾을 수없는 것 같습니다. 또한 아이콘 대신 사용할 수있는 속성 목록이나 갤러리가 menuIconCamera
있습니까?
감사
편집 : 나는 좀 더 둘러보고 attrs.xml이 다음과 같은 것을 발견했습니다.
<resources>
<declare-styleable name="AppTheme">
<attr name="listDragShadowBackground" format="reference" />
<attr name="menuIconCamera" format="reference" />
<attr name="menuIconToggle" format="reference" />
<attr name="menuIconShare" format="reference" />
</declare-styleable>
불행히도 그것은 나를 더욱 혼란스럽게 만듭니다. 이게 뭐하는거야?
답변
?attr/menuIconCamera
에서 아이콘 값 수단 menuIconCamera
현재 테마의 특성이 사용됩니다.
파일 menuIconCamera
어딘가에 속성에 할당 된 드로어 블이 있어야 themes.xml
합니다. 이 속성 값이 다른 두 개의 테마가있는 경우 실제 아이콘은 현재 사용중인 테마에 따라 달라집니다.
이 attrs.xml
파일은 사용자 정의 속성을 정의하는 데 사용됩니다. 이 정의가 없으면 컴파일러는 알 수없는 속성을 오류로 처리합니다.
답변
답변
이 게시물이 매우 오래되었다는 것을 알고 있지만 다음 설명이 초보자가 쉽게 이해하는 데 도움이 될 것이라고 생각합니다.
그래서 평신도의 관점에서,
someAttribute="?attr/attributeName"
의미-
someAttribute 의 값을 현재 테마 의 attributeName 값으로 설정하십시오.
일반적인 예는 툴바 스타일 지정에서 발생합니다.
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary_color</item>
//some more stuff here
</style>
<!-- custom toolbar style -->
<style name="myToolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">?attr/colorPrimary</item>
//some code here
</style>
현재 테마 (AppTheme)에서 참조하기 때문에 값 android:background
이로 설정됩니다.@color/primary_color
?attr/colorPrimary
@color/primary_color
답변
제 영어 실력이 좋지 않아요. 하지만 나는이 질문을 알고
android:icon="?attr/menuIconCamera"
사용하고 싶다
attrs.xml
<resources>
<declare-styleable name="AppTheme">
<attr name="listDragShadowBackground" format="reference" />
<attr name="menuIconCamera" format="reference" />
<attr name="menuIconToggle" format="reference" />
<attr name="menuIconShare" format="reference" />
</declare-styleable>
</resources>
styles.xml
<style name="AppTheme.Light" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/ActionBar.Light</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="listDragShadowBackground">@android:color/background_light</item>
<item name="menuIconCamera">@drawable/ic_menu_camera_holo_light</item> //this....
<item name="menuIconToggle">@drawable/ic_menu_toggle_holo_light</item>
<item name="menuIconShare">@drawable/ic_menu_share_holo_light</item>
</style>
사용하다 @drawable/ic_menu_camera_holo_light
답변
답변
이 블로그 게시물은 현재 테마 ( https://trickyandroid.com/android-resources-and-style-attributes-cheatsheet/)에 정의 된 스타일 속성의 값을 참조하는 방법에 대한 놀라운 작업을 수행합니다.
-
?
표기법이 표시 되면 현재 테마에 따라 달라질 수있는 값인 스타일 속성을 참조하려고한다는 의미입니다. 각각의 특정 테마에서이 속성을 재정의 할 수 있으므로 XML 레이아웃을 변경할 필요가 없으며 올바른 테마를 적용해야합니다. -
@
표기법 을 볼 때 실제 리소스 값 (색상, 문자열, 차원 등)을 참조합니다. 이 리소스에는 실제 값이 있어야합니다. 이 경우 우리는 우리가 다루는 가치를 정확히 알고 있습니다.
예를 들면 다음과 같습니다.
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="LauncherButton" parent="TextAppearance.AppCompat.Medium">
<item name="android:textColor">?colorAccent</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_centerHorizontal">true</item>
<item name="android:textAllCaps">false</item>
</style>