首页 > 代码库 > 自定义layout中布局文件的属性
自定义layout中布局文件的属性
以前一直都是用ndroid自带的属性,突然发现自定义xml属性也是非常重要,于是总结了一下。
在values文件夹下新建的attr.xml文件,该文件为自定义属性。
//attr.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- MyView为自定义视图类 --> <!-- 注意:自定义属性必须一个不少的添加到布局文件中,否则编译失败 --> <declare-styleable name="MyView"> <attr name="textcolor" format="color"/> <attr name="textsize" format="dimension"/> </declare-styleable> <!-- 还可以继续添加自定义视图的自定义属性 --> <!-- 自定义属性 --> <attr name="myviewbg" format="reference"/> </resources>
//布局文件activity_main.xml
<!-- xmlns:android="http://schemas.android.com/apk/res/android"是调用系统的xml属性 --> <!-- xmlns:test="http://schemas.android.com/apk/res/com.example.attrdemo" 命名为"test" 调用的是自定义属性 --> <RelativeLayout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:test="http://schemas.android.com/apk/res/com.example.attrdemo" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.example.attrdemo.MyView android:id="@+id/myview" android:layout_width="wrap_content" android:layout_height="wrap_content" test:textcolor="#98298490" test:textsize="100sp"/> <!--第二种引用方式 --> <ImageView android:layout_below="@id/myview" android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?attr/myviewbg"/> </RelativeLayout>
//style.xml文件(第二种引用方式)
<pre name="code" class="html"><resources> <style name="AppBaseTheme" parent="android:Theme.Light"> </style> <!--一张小机器人图片 --> <style name="AppTheme" parent="AppBaseTheme"> <item name="myviewbg">@drawable/ic_launcher</item> </style> </resources>
//自定义视图
<pre name="code" class="html">public class MyView extends View{ private Paint paint; private String str="this is a attr demo!!!"; public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); paint=new Paint(); TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.MyView); //如果在布局的xml文件中没有定义R.styleable.MyView_textcolor的值,则默认为“#000000”颜色值 int color=array.getColor(R.styleable.MyView_textcolor, 000000); //如果在布局的xml文件中没有定义R.styleable.MyView_textsize的值,则默认为18dp float size=array.getDimension(R.styleable.MyView_textsize, 18); paint.setColor(color); // paint.setTextSize(size); //调用完后通常 :TypedArray 通常最后调用 .recycle()方法,为了保持以后使用该属性一致性 array.recycle(); } @Override public void draw(Canvas canvas) { super.draw(canvas); canvas.drawText(str, 50, 50, paint); } }
猛 击 下 载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。