Android:具有自定义参数的自定义视图类

时间:2014-11-13 06:54:45

标签: android android-view android-custom-view

嗯,这是我无法在任何地方找到的东西。它可能写在某个地方,但我可能是由于我的搜索能力差,我无法找到它。

所以基本上我想做的是,我想创建一个类,我传递String数组,从该数组中,该类将返回一个视图,其中按钮数为String数组中的元素数。

类似的东西,

Public class customView extends View {
        public customView(Context context, AttributeSet attrs, String[] array) {
            super(context, attrs, array);
        }
}

但我无法做到这一点。因为View类不支持构造函数参数中的String数组。有人有任何解决方案吗?我是否应采取任何新方法来实现这一目标?

谢谢,

杰伊Stepin

1 个答案:

答案 0 :(得分:2)

首先,声明您的属性如下:

<resources>
   <declare-styleable name="PieChart">
       <attr name="showText" format="boolean" />
       <attr name="labelPosition" format="enum">
           <enum name="left" value="0"/>
           <enum name="right" value="1"/>
       </attr>
   </declare-styleable>
</resources>  

定义自定义属性后,您可以在布局XML文件中使用它们,就像内置属性一样。唯一的区别是您的自定义属性属于不同的命名空间。它们不属于http://schemas.android.com/apk/res/android命名空间,而属于http://schemas.android.com/apk/res/[your package name]

自定义PieChart类的类似内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
 <com.example.customviews.charting.PieChart
     custom:showText="true"
     custom:labelPosition="left" />
</LinearLayout>  

在您的代码中,您需要这些内容:

public PieChart(Context context, AttributeSet attrs) {
   super(context, attrs);
   TypedArray a = context.getTheme().obtainStyledAttributes(
        attrs,
        R.styleable.PieChart,
        0, 0); 

   try { 
       mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
       mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
   } finally { 
       a.recycle();
   } 
}   

来源:

http://developer.android.com/training/custom-views/create-view.html

继续。读:

Defining custom attrs