特定视图的正常样式:
<style name="Theme" parent="@android:style/Theme">
<item name="android:buttonStyle">@style/Button</item>
<item name="customDialogStyle">@style/CustomDialogStyle</item>
</style>
<style name="Button" parent="@android:style/Widget.Button">
<item name="android:textColor">#000000</item>
<item name="android:background">#FFFFFF</item>
</style>
<style name="Button.Dark">
<item name="android:textColor">#FFFFFF</item>
<item name="android:background">#000000</item>
</style>
<style name="CustomDialogStyle">
<item name="android:buttonStyle">@style/Button.Dark</item>
</style>
一些自定义属性:
<attr name="customDialogStyle" format="reference" />
<declare-styleable name="CustomDialog">
<attr name="android:buttonStyle" />
</declare-styleable>
现在使用我的CustomView:
public class CustomDialogContainer extends LinearLayout
{
public CustomDialogContainer(Context c) { this(c, null); }
public CustomDialogContainer(Context c, AttributeSet a) { this(c, a, R.attr.customDialogStyle); }
public CustomDialogContainer(Context c, AttributeSet a, int d) { super(c, a, d); init(c, a, d); }
private void init(Context c, AttributeSet a, int d)
{
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomDialog, d, R.style.CustomDialogStyle);
// tried getInteger and some others too
int style = a.getResourceId(R.styleable.CustomDialog_buttonStyle, android.R.attr.buttonStyle);
a.recycle();
Button bOK = new Button(c, attrs, style);
// and tried
Button bCancel = new Button(c, null, style);
// even
Button anyOne = new Button(new ContextThemeWrapper(c, style));
addView(bOK);
addView(bCancel);
}
}
这是我的DialogContainer的基础,它具有所有基础知识(图标,标题,取消,OK,其他视图的容器)。但我明显要做的是应用与DialogContainer上的按钮不同的样式。
无论在哪里都无所谓。如果我创建任何其他ViewGroup并且想要添加一些我自己的CustomViews,如果不能以这种方式完成自定义样式,那么我不知道他们在创建Android时的想法。
带有深色按钮的活动和带有亮按钮的明亮对话 - 不能太奇怪吗? 另一种方法是单独添加say,所有属性:background,textColor,textAppearance等。我认为程序员想要有效。
如果有人知道如何做到这一点,我会感激一些意见。