xmlns:android是XML命名空间,告诉Android开发工具你准备使用Android命名空间里的一些通用属性 在所有Android XML文件中最外层的标记必须使用这个命名空间 用户也可以自定义XML属性
1. values/attrs.xml定义属性
<?xml version="1.0" encoding="utf-8"?><resources>    <attr name="relative">        <enum name="icon_left" value="0" />        <enum name="icon_right" value="1" />        <enum name="icon_above" value="2" />        <enum name="icon_below" value="3" />    </attr>    <declare-styleable name="IconTextView">        <attr name="relative"/>        <attr name="my_icon" format="reference"/>        <attr name="my_text" format="string"/>        <attr name="text_size" format="dimension"/>        <attr name="text_color" format="color"/>        <attr name="padding" format="dimension"/>    </declare-styleable></resources>

2. IconTextView.java继承LinearLayout实现自定义的属性
package com.silion.userdefinedxmlattr;import android.content.Context;import android.content.res.TypedArray;import android.graphics.drawable.Drawable;import android.media.Image;import android.util.AttributeSet;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;/** * Created by silion on 2015/10/19. */public class IconTextView extends LinearLayout {    private final static int ICON_LEFT = 0;    private final static int ICON_RIGHT = 1;    private final static int ICON_ABOVE = 2;    private final static int ICON_BELOW = 3;    private int mRelative;    private Drawable mIcon;    private String mText;    private float mTextSize;    private Integer mTextColor;    private int mPadding;    private TextView mTextView;    private ImageView mImageView;    public IconTextView(Context context, AttributeSet attrs) {        super(context, attrs);        TypedArray a = null;        try {            a = context.obtainStyledAttributes(attrs, R.styleable.IconTextView);            mRelative = a.getInt(R.styleable.IconTextView_relative, 0);            mIcon = a.getDrawable(R.styleable.IconTextView_my_icon);            mText = a.getString(R.styleable.IconTextView_my_text);            mTextSize = a.getDimension(R.styleable.IconTextView_text_size, 15);            mTextColor = a.getInteger(R.styleable.IconTextView_text_color, 0);            mPadding = a.getInt(R.styleable.IconTextView_padding, 15);        } finally {            a.recycle();        }        mTextView = new TextView(context);        mTextView.setText(mText);        mTextView.setTextSize(mTextSize);        mTextView.setTextColor(mTextColor);        mImageView = new ImageView(context);        mImageView.setImageDrawable(mIcon);        int paddingLeft = 0;        int paddingRight = 0;        int paddingTop = 0;        int paddingBottom = 0;        int orientation = HORIZONTAL;        switch (mRelative) {            case ICON_LEFT: {                orientation = HORIZONTAL;                paddingLeft = mPadding;                break;            }            case ICON_RIGHT: {                orientation = HORIZONTAL;                paddingRight = mPadding;                break;            }            case ICON_ABOVE: {                orientation = VERTICAL;                paddingTop = mPadding;                break;            }            case ICON_BELOW: {                orientation = VERTICAL;                paddingBottom = mPadding;                break;            }            default:                break;        }        this.setOrientation(orientation);        mImageView.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);        this.addView(mImageView);        this.addView(mTextView);    }}

3. 在layout/activity_main.xml中定义xmlns使用自定义的属性
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context=".MainActivity">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />    <com.silion.userdefinedxmlattr.IconTextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        app:relative="icon_right"        app:my_icon="@mipmap/ic_launcher"        app:my_text="@string/hello_world"        app:text_size="19sp"        app:text_color="#0000ff"        android:padding="16dp"/></LinearLayout>

4.MainActivity.java
package com.silion.userdefinedxmlattr;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}


更多相关文章

  1. Android 中 ListView 常用属性合集
  2. Android文本输入框EditText的属性和方法
  3. Android(java)学习笔记88:TextView属性大全
  4. Android 部分属性学习
  5. Android自带的时间空间和日期控件
  6. android_开发_EditText_and_TextView属性
  7. Android SystemProperties系统属性详解

随机推荐

  1. Android几款著名的ActiveSync客户端
  2. android 在SD卡创建文件夹
  3. Android 通信录中的联系人操作
  4. Android SDK Tools R15 发布
  5. android 复制、粘贴文字
  6. android 新手学习笔记 点击事件
  7. Spinner下拉位置处理
  8. JAVA设计模式之Template method
  9. 教你如何用最新的技术快速开发一个完整的
  10. 【Android】性能分析工具:开篇