Как получить мое собственное значение атрибута в моем стиле

Я хочу создать 3 разных темы для диалога, используя собственный (собственный) атрибут. Я хотел бы установить цвета названия, добавив это в стиль темы: <item name="titleColor">#FF0000</item>

My themes.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTheme" parent="@android:style/Theme"> <item name="android:alertDialogStyle">@style/dialog</item> </style> <style name="MyRedTheme" parent="MyTheme"> <item name="titleColor">#FF0000</item> </style> <style name="MyGreenTheme" parent="MyTheme"> <item name="titleColor">#00FF00</item> </style> <style name="MyBlueTheme" parent="MyTheme"> <item name="titleColor">#0000FF</item> </style> 

Я определил атрибут titleColor в attrs.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyCustomAttributes"> <attr name="titleColor" format="color|reference" /> </declare-styleable> </resources> 

Я применяю одну из тем для диалога. Как передать значение свойства titleColor атрибуту «android: color»?

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res/com.dicare" android:shape="rectangle"> <solid android:color="I want to pass titleColor value here"/> </shape> 

Solutions Collecting From Web of "Как получить мое собственное значение атрибута в моем стиле"

? TitleColor см. Здесь

или

Вы определяете свои цвета в файле colors.xml и ссылаетесь на них как на обычный ресурс: @ color / MyRed

Вы создадите собственный атрибут для своих собственных представлений, которые вы хотите настроить из макета xmls. Например, вы можете расширить TextView, чтобы записать первую строку текста в один цвет (titleColor), чем остальная часть текста (android: textColor).

 <color name="MyRed">#FF0000</color> <style name="MyRedTheme" parent="MyTheme"> <item name="titleColor">@color/MyRed</item> </style> <shape xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res/com.dicare" android:shape="rectangle"> <solid android:color="@color/MyRed"/> </shape> 

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

 <declare-styleable name="activity_header"> <attr name="title" format="string" /> <attr name="left_button_text" format="string" /> <attr name="left_button_drawable" format="reference" /> <attr name="right_button_text" format="string" /> <attr name="right_button_drawable" format="reference" /> <attr name ="hide_buttons"> <enum name="yes" value="1" /> <enum name="no" value="0" /> </attr> </declare-styleable> 

Затем вы захотите создать свой макет. Здесь важно добавить пространство имен, относящееся к вашему приложению. Здесь я назвал это приложение. Вам просто нужно указать название своего пакета после http://schemas.android.com/apk/res/ . Теперь вы можете использовать любой из атрибутов, определенных выше в вашем XML-файле.

<

 LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app = "http://schemas.android.com/apk/res/com.biggu.shopsavvy.ui4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <com.biggu.shopsavvy.ui4.ActivityHeader android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/header" app:title = "History" app:left_button_text="Share" app:left_button_drawable="@drawable/ic_menu_share" app:right_button_drawable="@drawable/small_btn_archive" app:right_button_text="Organize" /> 

Теперь, когда у нас есть наши атрибуты, определенные в нашем XML-файле, нам нужно получить их из нашего пользовательского компонента, который мы создали. Вам просто нужно получить полученные атрибуты стиля с помощью созданного вами ресурса, здесь мы использовали activity_header.

  public class ActivityHeader extends LinearLayout { TextView mTitleEditText; Button mLeftButton; Button mRightButton; View mDelimeter; private ViewGroup mAdditionalPanel; public ActivityHeader(Context context, AttributeSet attrs) { super(context, attrs); ViewGroup.inflate(context, R.layout.header , this); findViews(); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.activity_header); if ( a.getInt(R.styleable.activity_header_hide_buttons, 0) == 1) //hide buttons { mLeftButton.setVisibility(GONE); mRightButton.setVisibility(GONE); } else { setLeftButtonDrawable(a.getResourceId(R.styleable.activity_header_left_button_drawable, android.R.drawable.ic_menu_info_details)); setLeftButtonText(a.getString(R.styleable.activity_header_left_button_text)); setRightButtonDrawable(a.getResourceId(R.styleable.activity_header_right_button_drawable, android.R.drawable.ic_menu_info_details)); setRightButtonText(a.getString(R.styleable.activity_header_right_button_text)); } setTitle(a.getString(R.styleable.activity_header_title)); a.recycle(); } } 

Вот и все. Счастливое кодирование.

Я думаю, что все, что вам нужно сделать, это изменить андроид: цвет для таможни: цвет:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res/com.dicare" android:shape="rectangle"> <solid custom:color="I want to pass titleColor value here"/> </shape>