一个有趣的应用:xml+class自定义属性前缀

前端之家收集整理的这篇文章主要介绍了一个有趣的应用:xml+class自定义属性前缀前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先android textview的粗体效果对于汉字不知道为什么的没用用处 设置了也没什么变化,然则这只对英文有效,当你的TextView要显示中文的时辰要在code中设置粗体的paint来实现,如下
TextViewtitle=newTextView(context);TextPaintpaint=title.getPaint();
paint.setFakeBoldText(true);
还有从xml中得到,但是这样麻烦在我项目中有很多次,我必须设置一个ID然后去找到,然后再去用代码设置它的大小,所以我想了一个一劳用逸的方法,那就是自定view,但我也不知道自定view怎么弄,所以有如下:
在贴出代码之前首先就view的重点说一下:
1. 如果含有自己独特的属性,那么就需要在构造函数获取属性文件attrs.xml中自定义属性名称 并根据需要设定默认值,
2.如果使用自定义属性,那么在应用xml文件中需要加上新的schemas,
比如这里 xmlns:my=" http://schemas.android.com/apk/res/demo.dedo",
3.其中xmlns后的“my”是自定义属性的前缀,res后的是我们自定义View所在的包
4.特别注意,因为我在我编写的时候,老是出现,找不到资源什么什么的,我看了一下,“自定义View所在的包”必须和AndroidManifest中的 package="demo.dedo"相同。

1.attrs.xml
[html] view plain copy
  1. <?@H_301_41@xml@H_301_41@@H_301_41@version@H_301_41@=@H_301_41@"1.0"@H_301_41@@H_301_41@encoding@H_301_41@=@H_301_41@"utf-8"@H_301_41@?>@H_301_41@@H_301_41@@H_301_41@
  2. <@H_301_41@resources@H_301_41@>@H_301_41@@H_301_41@@H_301_41@
  3. declare-styleable@H_301_41@@H_301_41@name@H_301_41@=@H_301_41@"TestView"@H_301_41@>@H_301_41@@H_301_41@@H_301_41@
  4. attr@H_301_41@@H_301_41@name@H_301_41@=@H_301_41@"textblod"@H_301_41@@H_301_41@format@H_301_41@=@H_301_41@"integer"@H_301_41@@H_301_41@/>@H_301_41@@H_301_41@@H_301_41@
  5. </@H_301_41@declare-styleable@H_301_41@>@H_301_41@@H_301_41@@H_301_41@

2.TestView
[java] view plain copy
  1. package@H_301_41@demo.dedo;@H_301_41@@H_301_41@
  2. import@H_301_41@android.content.Context;@H_301_41@@H_301_41@
  3. import@H_301_41@android.content.res.TypedArray;@H_301_41@@H_301_41@
  4. import@H_301_41@android.text.TextPaint;@H_301_41@@H_301_41@
  5. import@H_301_41@android.util.AttributeSet;@H_301_41@@H_301_41@
  6. import@H_301_41@android.widget.TextView;@H_301_41@@H_301_41@
  7. public@H_301_41@@H_301_41@class@H_301_41@TestView@H_301_41@extends@H_301_41@TextView@H_301_41@@H_301_41@
  8. {@H_301_41@
  9. private@H_301_41@TextPaintpaint;@H_301_41@@H_301_41@
  10. private@H_301_41@ContextmContext;@H_301_41@@H_301_41@
  11. public@H_301_41@TestView(Contextcontext,AttributeSetattrs)@H_301_41@@H_301_41@
  12. super@H_301_41@(context,attrs);@H_301_41@@H_301_41@
  13. //TODOAuto-generatedconstructorstub@H_301_41@@H_301_41@@H_301_41@
  14. mContext=context;@H_301_41@
  15. //对于我们自定义的类中,我们需要使用一个名为obtainStyledAttributes的方法获取我们的定义@H_301_41@@H_301_41@@H_301_41@
  16. TypedArrayparams=mContext.obtainStyledAttributes(attrs,@H_301_41@
  17. R.styleable.TestView);@H_301_41@
  18. //得到自定义控件的属性值。@H_301_41@@H_301_41@@H_301_41@
  19. int@H_301_41@backgroundId=params.getInteger(R.styleable.TestView_textblod,@H_301_41@0@H_301_41@);@H_301_41@@H_301_41@
  20. setTextblod(backgroundId);@H_301_41@
  21. }@H_301_41@
  22. void@H_301_41@setTextblod(@H_301_41@int@H_301_41@textblod)@H_301_41@@H_301_41@
  23. if@H_301_41@(textblod==@H_301_41@1@H_301_41@)@H_301_41@@H_301_41@
  24. paint=super@H_301_41@.getPaint();@H_301_41@@H_301_41@
  25. paint.setFakeBoldText(true@H_301_41@);@H_301_41@@H_301_41@
  26. }@H_301_41@
  27. }@H_301_41@

3.在xml中引用view
copy
    <?xmlversion=@H_301_41@"1.0"@H_301_41@encoding=@H_301_41@"utf-8"@H_301_41@?>@H_301_41@@H_301_41@
  1. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"@H_301_41@@H_301_41@@H_301_41@
  2. xmlns:my="http://schemas.android.com/apk/res/demo.dedo"@H_301_41@@H_301_41@@H_301_41@
  3. android:orientation="vertical"@H_301_41@@H_301_41@@H_301_41@
  4. android:layout_width="fill_parent"@H_301_41@@H_301_41@@H_301_41@
  5. android:layout_height="fill_parent"@H_301_41@@H_301_41@@H_301_41@
  6. >@H_301_41@
  7. @H_301_41@
  8. <deme.deme.TestView@H_301_41@
  9. android:layout_width="fill_parent"@H_301_41@@H_301_41@@H_301_41@
  10. android:layout_height="wrap_content"@H_301_41@@H_301_41@@H_301_41@
  11. my:textblod="1"@H_301_41@@H_301_41@@H_301_41@
  12. android:text="这只是一个测试"@H_301_41@@H_301_41@@H_301_41@
  13. />@H_301_41@
  14. @H_301_41@
  15. </LinearLayout>@H_301_41@

猜你在找的XML相关文章