自定义组件 获取属性值

来源:互联网 发布:数据通信网 pdf 编辑:程序博客网 时间:2024/06/06 08:31

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>

原创粉丝点击