我想使用自定义(自己的)属性为对话框创建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>
我在attrs.xml中定义了titleColor属性:
<?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>
答案 0 :(得分:11)
?titleColor see here
或
您可以在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>
答案 1 :(得分:1)
所以你要做的第一件事就是编辑你的attrs.xml文件。在这里,您将添加要通过xml定义的所有属性。这里我们添加了一个标题,以及带有文本和drawable的左右按钮。
<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>
接下来,您将要创建布局。这里重要的是添加一个引用您的应用程序的命名空间。在这里,我将它命名为app。您只需在http://schemas.android.com/apk/res/之后添加您的包名称即可。现在,您可以在xml文件中使用上面定义的任何属性。
&LT;
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();
}
}
就是这样。快乐的编码。
答案 2 :(得分:0)
我认为您需要做的就是更改自定义的android:color: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 custom:color="I want to pass titleColor value here"/>
</shape>