Как получить мое собственное значение атрибута в моем стиле
Я хочу создать 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>
Ответы
Ответ 1
? 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>
Ответ 2
Итак, первое, что вам нужно сделать, это отредактировать файл 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();
}
}
Что это. Счастливое кодирование.
Ответ 3
Я думаю, что все, что вам нужно сделать, это изменить андроид: цвет для таможни: цвет:
<?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>