public LineEditText(Context context, AttributeSet attrs) {
super(context, attrs);
//获取labelText属性的值,labelText有两种方法赋值:
//labelText="@string/hello"和labelText="姓名:"
//如果以第一种方式赋值时,取到的resourceId的值为R.string.hello的id,如果以第二种方式赋值时,取到的resourceId的值是0,就是第三个参数
int resourceId = attrs.getAttributeResourceValue(null, "labelText", 0);
//判断如果以labelText="姓名:"方式赋值时,需要用attrs.getAttributeValue(String namespace,String name)方法获取属性值
if(resourceId == 0)
{
//没有定义namespace所以第一个参数为null,第二个参数为组件的属性名称
labelText = attrs.getAttributeValue(null, "labelText");
}
//判断是否以labelText="@string/hello"方式赋值
else
{
//获取资源文件,根据资源id获取属性值
labelText = getResources().getString(resourceId);
}
//如果labelText的值为null表示没有赋值,这里表示必须要个labelText属性赋值,否则抛出异常
if(labelText == null)
{
throw new RuntimeException("必须设置labelText属性");
}
<com.seeu1000.LineEditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
labelText="@string/hello"
labelFontSize="16"
labelPosition="left"
>
</com.bekeer.LabelEditText>