Saya melihat kode contoh Galeri Honeycomb (di sini ) dan saya menemukan kode berikut ketika mencoba menambahkan item tindakan di aplikasi saya sendiri:
<item android:id="@+id/camera"
android:title="Camera"
android:icon="?attr/menuIconCamera"
android:showAsAction="ifRoom" />
Itu ?attr
melempar saya untuk satu putaran. Bisakah seseorang menjelaskan apa yang dilakukannya? Bagaimana ini terkait dengan drawable? Sepertinya saya tidak dapat menemukan informasi yang bagus di Google. Juga apakah ada daftar atau galeri atribut yang dapat kita gunakan untuk ikon, bukan hanya menuIconCamera
?
Terima kasih
Sunting: Saya melihat-lihat lagi dan menemukan bahwa attrs.xml terlihat seperti ini:
<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>
Sayangnya itu hanya membuat saya semakin bingung. Apa yang dilakukannya ini?
sumber
The
?attr:
sintaks yang digunakan untuk mengakses atribut tema saat ini. Lihat merujuk atribut gaya .sumber
Saya tahu posting ini sudah sangat tua, tetapi saya merasa penjelasan berikut akan membantu pemula untuk memahaminya dengan mudah.
Jadi dalam istilah awam,
someAttribute="?attr/attributeName"
berarti -Contoh umum terjadi saat menata Toolbar
<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>
Di sini nilai
android:background
akan disetel ke@color/primary_color
karena?attr/colorPrimary
mengacu@color/primary_color
pada tema saat ini (AppTheme)sumber
Bahasa Inggris saya kurang bagus, maaf. Tapi saya tahu pertanyaan ini
android:icon="?attr/menuIconCamera"
ingin digunakanattrs.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>
menggunakan
@drawable/ic_menu_camera_holo_light
sumber
Ini untuk merujuk Atribut gaya. lihat R.attr
?[<package_name>:][<resource_type>/]<resource_name>
Mereferensikan atribut gaya
sumber
android.support.v7.appcompat:
.Posting blog ini melakukan pekerjaan luar biasa yang membahas cara mereferensikan nilai untuk atribut gaya yang ditentukan dalam tema saat ini: https://trickyandroid.com/android-resources-and-style-attributes-cheatsheet/
Saat Anda melihat
?
notasi - artinya kami mencoba mereferensikan atribut gaya - nilai yang dapat bervariasi bergantung pada tema saat ini. Di setiap tema tertentu kita dapat mengganti atribut ini, sehingga tata letak XML tidak perlu diubah, dan tema yang benar perlu diterapkan.Saat Anda melihat
@
notasi - kami mereferensikan nilai resource sebenarnya (warna, string, dimensi, dll). Sumber daya ini harus memiliki nilai sebenarnya. Dalam hal ini kita tahu persis nilai apa yang kita hadapi.Berikut contohnya:
<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>
sumber