Nếu không có tiền tố attr, colorBackground của bạn sẽ trở thành một thuộc tính mà bạn cần phải xác định. Xem xét ví dụ sau đây theme_dependent_icon
được định nghĩa trong một styles.xml
:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<declare-styleable name="custom_menu">
<attr name="theme_dependent_icon" format="reference"/>
</declare-styleable>
<style name="MyDarkTheme" parent="android:Theme" >
<item name="theme_dependent_icon">@drawable/ic_search_dark</item>
</style>
<style name="MyLightTheme" parent="android:Theme.Light" >
<item name="theme_dependent_icon">@drawable/ic_search_light</item>
</style>
</resources>
Sau đó, bạn có thể sử dụng thuộc tính qua ?attr/theme_dependent_icon
trong main_activity.xml
của bạn:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="?attr/theme_dependent_icon" />
</LinearLayout>
Trong ví dụ này, bởi vì tôi đã sử dụng tên chủ đề tùy chỉnh MyDarkTheme
và MyLightTheme
, họ cần phải được chọn trong thời gian onCreate
hoạt động chính của bạn trước setContentView
, tức là
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.MyDarkTheme); // causes ic_search_dark.png to be shown
// setTheme(R.style.MyLightTheme); // causes ic_search_light.png to be shown
setContentView(R.layout.main_activity);
}
Bộ gọi điệnTheme() là một cách để chọn chủ đề trong khi chạy. Một cách khác là xác định nhiều phiên bản của styles.xml
trong tài nguyên của bạn theo values
, values-11
, values-14
tương ứng với chủ đề mặc định, chủ đề cho Android 3.0 (API-11) và chủ đề cho Android 4.0 (API-14).
Nguồn
2012-11-20 21:46:01
Những thẻ không có android: dường như được xác định bên trong tệp xml attr trong cùng một thư mục res/values trong nguồn Android. http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/res/res/values;hb=HEAD Xem attrs.xml và attrs_manifest.xml I nghĩ rằng bạn cần phải nhập những thứ này bằng cách sử dụng xmlns hoặc thêm các tệp tương tự vào thư mục giá trị của bạn, nhưng tôi không biết đủ về xml để chắc chắn. – Jems