①在values文件夹下定义TextView的颜色和边距规则:
颜色规则:notepadcolors.xml
<?xml version="1.0" encoding="utf-8"?>#AAFFFF99#FF0000FF#90FF0000#AA0000FF
边距规则:notepaddimens.xml
<?xml version="1.0" encoding="utf-8"?>30dp
②创建一个扩展原TextView的新类,并重写onDraw方法来修改视图的外观
packagecom.yinger;importandroid.content.Context;importandroid.content.res.Resources;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.util.AttributeSet;importandroid.widget.TextView;publicclassTodoListItemViewextendsTextView {privatePaint marginPaint;privatePaint linePaint;privateintpaperColor;privatefloatmargin;publicTodoListItemView(Context context, AttributeSet attrs,intdefStyle) {super(context, attrs, defStyle);//TODO Auto-generated constructor stubinit();
}publicTodoListItemView(Context context, AttributeSet attrs) {super(context, attrs);
init();
}publicTodoListItemView(Context context) {super(context);
init();
}privatevoidinit() {
Resources myResources=getResources();//Create the paint brushes we will use in the onDraw method.marginPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
marginPaint.setColor(myResources.getColor(R.color.notepad_margin));
linePaint=newPaint(Paint.ANTI_ALIAS_FLAG);
linePaint.setColor(myResources.getColor(R.color.notepad_lines));//Get the paper background color and the margin width.paperColor=myResources.getColor(R.color.notepad_paper);
margin=myResources.getDimension(R.dimen.notepad_margin);
}
@OverrideprotectedvoidonDraw(Canvas canvas) {//TODO Auto-generated method stub//Color as papercanvas.drawColor(paperColor);//Draw ruled linescanvas.drawLine(0,0,30.0f,0, linePaint);
canvas.drawLine(0, getMeasuredHeight(),
getMeasuredWidth(), getMeasuredHeight(),
linePaint);//Draw margincanvas.drawLine(margin,0, margin, getMeasuredHeight(), marginPaint);//Move the text across from the margincanvas.save();
canvas.translate(margin,0);//Use the TextView to render the text.super.onDraw(canvas);
canvas.restore();
}
}
注:要重写所有的构造方法,这样比较保险。
-----------------------------------------------------------我是分隔线-------------------------------------------------------------------
OK,以上,已经实现了TextView的自定义,下面我们看看怎么来引用它(以ListView为例)
③在layout文件夹下创建list item 的布局规定:
todolist_item.xml
注意,黄色部分是重点。
④大家熟悉的布局文件,我这里是main.xml,没啥好说的。
⑤和以前一样的定义ListView,没啥区别:
packagecom.yinger;importjava.util.ArrayList;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.KeyEvent;importandroid.view.View;importandroid.view.View.OnKeyListener;importandroid.widget.ArrayAdapter;importandroid.widget.EditText;importandroid.widget.ListView;publicclassTextViewDemoextendsActivity {/**Called when the activity is first created.*/@OverridepublicvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);//Get references to UI widgetsListView myListView=(ListView)findViewById(R.id.myListView);finalEditText myEditText=(EditText)findViewById(R.id.myEditText);finalArrayListtodoItems=newArrayList();intresID=R.layout.todolist_item;finalArrayAdapteraa=newArrayAdapter(this, resID,
todoItems);
myListView.setAdapter(aa);
myEditText.setOnKeyListener(newOnKeyListener() {publicbooleanonKey(View v,intkeyCode, KeyEvent event) {if(event.getAction()==KeyEvent.ACTION_DOWN)if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER)
{
todoItems.add(0, myEditText.getText().toString());
aa.notifyDataSetChanged();
myEditText.setText("");returntrue;
}returnfalse;
}
});
}
}
运行结果截图:
posted on 2011-06-11 21:26 Ying-er 阅读(7242) 评论(0) 编辑 收藏 所属分类: Android