您的位置:首页 > 移动开发 > Android开发

Android自定义属性格式

2016-01-27 23:21 501 查看

概述

Android中自定义属性,attr中声明的format,即表明其格式。

其中ImageView包含background(背景)和src(前景)属性。

ImageView#attr

<declare-styleable name="ImageView">
<!-- Sets a drawable as the content of this ImageView. -->
<attr name="src" format="reference|color" />
</declare-styleable>


View#attr

<declare-styleable name="View">
<!-- A drawable to use as the background.  This can be either a reference
to a full drawable resource (such as a PNG image, 9-patch,
XML state list description, etc), or a solid color such as "#ff000000"
(black). -->
<attr name="background" format="reference|color" />
</declare-styleable>


View.java

case com.android.internal.R.styleable.View_background:
background = a.getDrawable(attr);
break;


ImageView.java

Drawable d = a.getDrawable(com.android.internal.R.styleable.ImageView_src);
if (d != null) {
setImageDrawable(d);
}


reference|color:可以是一个引用drawable的resourceId,也可以是一个color(最终会被封装为ColorDrawable)

attr#format

reference

参考某一资源id,即resourceId

<declare-styleable name="View">
<attr name="id" format="reference" />
</declare-styleable>


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
android:text="@string/app_name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


case com.android.internal.R.styleable.View_id:
mID = a.getResourceId(attr, NO_ID);
break;


color

颜色值

<!-- Color of text (usually same as colorForeground). -->
<attr name="textColor" format="reference|color" />
<!-- Color of highlighted text. -->
<attr name="textColorHighlight" format="reference|color" />


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:textColor="@color/white"
android:textColorHighlight="@color/gray"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


case com.android.internal.R.styleable.TextView_textColor:
textColor = a.getColorStateList(attr);
break;


case com.android.internal.R.styleable.TextView_textColorHighlight:
textColorHighlight = a.getColor(attr, textColorHighlight);
break;


boolean

布尔值

<!-- Indicates the initial checked state of this button. -->
<attr name="checked" format="boolean" />


<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:focusable="false"
android:clickable="false"
android:duplicateParentState="true"/>


final boolean checked = a.getBoolean(
com.android.internal.R.styleable.CompoundButton_checked, false);
setChecked(checked);


dimension

尺寸值

<declare-styleable name="ViewGroup_Layout">
<attr name="layout_width" format="dimension">
<enum name="fill_parent" value="-1" />
<enum name="match_parent" value="-1" />
<enum name="wrap_content" value="-2" />
</attr>
</declare-styleable>


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
width = a.getLayoutDimension(widthAttr, "layout_width");
height = a.getLayoutDimension(heightAttr, "layout_height");
}


float

浮点值

<!-- alpha property of the view, as a value between 0 (completely transparent) and 1
(completely opaque). -->
<attr name="alpha" format="float" />


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:alpha="0.8"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>


case com.android.internal.R.styleable.View_alpha:
setAlpha(a.getFloat(attr, 1f));
break;


integer

整型值

<declare-styleable name="GridLayout">
<attr name="rowCount" format="integer" />
<attr name="columnCount" format="integer" />
</declare-styleable>


<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="5"
android:rowCount="5"/>


private static final int ROW_COUNT = R.styleable.GridLayout_rowCount;
private static final int COLUMN_COUNT = R.styleable.GridLayout_columnCount;


string

字符串

<declare-styleable name="TextView">
<attr name="text" format="string" localization="suggested" />
</declare-styleable>


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:text="@string/app_name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


case com.android.internal.R.styleable.TextView_text:
text = a.getText(attr);
break;


其中getText和getString,一个返回CharSequence,一个返回String

fraction

百分数,常用于定义animation

<declare-styleable name="RotateDrawable">
<attr name="visible" />
<attr name="fromDegrees" format="float" />
<attr name="toDegrees" format="float" />
<attr name="pivotX" format="fraction" />
<attr name="pivotY" format="fraction" />
<attr name="drawable" />
</declare-styleable>


<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="200%"
android:pivotY="300%"
android:repeatCount="infinite"
android:repeatMode="restart"
android:toDegrees="360" />


enum

枚举值

<declare-styleable name="LinearLayout">
<attr name="orientation">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
</declare-styleable>


<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" />


int index = a.getInt(com.android.internal.R.styleable.LinearLayout_orientation, -1);
if (index >= 0) {
setOrientation(index);
}


flag

位或运算

<attr name="gravity">
<!-- Push object to the top of its container, not changing its size. -->
<flag name="top" value="0x30" />
<!-- Push object to the bottom of its container, not changing its size. -->
<flag name="bottom" value="0x50" />

</attr>


<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom|right"
android:text="@string/app_name" />


case com.android.internal.R.styleable.TextView_gravity:
setGravity(a.getInt(attr, -1));
break;


属性定义可以指定多种类型,如background,pivotX等

<attr name="pivotX" format="float|fraction" />
<attr name="pivotY" format="float|fraction" />


<rotate
android:fromDegrees="0"
android:toDegrees="50"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:duration="1400" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: