自定义视图包含具有自定义属性和样式的自定义视图

时间:2014-09-02 14:06:48

标签: android attributes android-styles custom-view

特定视图的正常样式:

<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等。我认为程序员想要有效。

如果有人知道如何做到这一点,我会感激一些意见。

0 个答案:

没有答案