关于android命名空间问题:

在values/attrs.xml中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
<attr name="imgBackground" format="integer" />
<attr name="textPaddingLeft" format="dimension"/>
<attr name="textPaddingTop" format="dimension"/>
</declare-styleable>
</resources>


以上是定义一些属性,这些属性可以在android 的 android 包里面定义,也可不定义;只要在这定义就需要coder自己解析。

package com.test.TestView;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;


public class MyView extends View {


private Paint mPaint;

private Context mContext;

private String mStr;

public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
initMyView();
TypedArray params = context.obtainStyledAttributes(attrs,
R.styleable.MyView);
int backgroudId = params.getResourceId(
R.styleable.MyView_imgBackground, 0);
if (backgroudId != 0)
setBackgroundResource(backgroudId);
int textColor = params.getColor(R.styleable.MyView_textColor,
0XFFFFFFFF);
setTextColor(textColor);
float textSize = params.getDimension(R.styleable.MyView_textSize, 36);
setTextSize(textSize);
float paddingLeft = params.getDimension(
R.styleable.MyView_textPaddingLeft, 41);
float paddingTop = params.getDimension(
R.styleable.MyView_textPaddingTop, 21);
setPaddings(paddingLeft, paddingTop);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mStr != null) {
canvas.drawText(mStr, 30, 60, mPaint);
}
}

private void initMyView() {
mPaint = new Paint();
mPaint.setColor(Color.WHITE);
}

private void setTextColor(int textColor) {
mPaint.setColor(0XFFAABBCC);
}

private void setTextSize(float textSize) {
mPaint.setTextSize(textSize);
}

void setText(String text) {
mStr = text;
}

private void setPaddings(float paddingLeft, float paddingTop) {

setPadding((int) paddingLeft, (int) paddingTop, 0, 0);
}
}

在main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.test.TestView"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">

<com.test.TestView.MyView
android:id="@+id/myview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:textColor="#FFFFFFFF"
app:textSize="40dip"
app:textPaddingLeft="40dip"
app:textPaddingTop="40dip"
app:imgBackground="@drawable/bg"
/>
</LinearLayout>

红色部分是自己定义属性的包所在地,只有这里正确指定才可以使
TypedArray params = context.obtainStyledAttributes(attrs,
R.styleable.MyView);
返回的属性count不为零,除非在XML中声明 MyView 时没有用到R.styleable.MyView 中定义的属性。"http://schemas.android.com/apk/res/“这部分前缀也不可省略


在自己的Activity 中
public class TestView extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MyView mTextView=(MyView)findViewById(R.id.myview);
mTextView.setText("自定义的View");
}
}

参考:http://tigerszdf.blog.163.com/blog/static/4595513320103710542029/?fromdm&fromSearch&isFromSearchEngine=yes%20android

更多相关文章

  1. Android自定义对话框(Dialog)位置,大小
  2. Android(安卓)自定义Toast
  3. 自定义组件研究
  4. SeekBar 和 RatingBar
  5. AndroidManifest.xml Activity 属性说明
  6. ImageView的属性android:scaleType,即ImageView.setScaleType(Ima
  7. ImageView的属性android:scaleType,即ImageView.setScaleType(Ima
  8. ImageView的scaletype属性
  9. android TextView属性详解

随机推荐

  1. [Android] 停止、恢复 背影音乐的播放
  2. attrs.xml文件中属性类型format值的格式
  3. Alibaba Android(安卓)开发手册总结
  4. linux下nessus的安装和使用【原创】
  5. Android(安卓)sdk 文档资源
  6. android 动态调试 遇到的问题
  7. Android学习资料汇总
  8. Android(安卓)Studio JNI
  9. android使用html标签
  10. Android调用微信登陆、分享、支付(第一版)