java 安卓 listview_自定义android控件——TextView 并添加到ListView中

本文介绍了如何在Android中自定义TextView并将其添加到ListView中。首先在values文件夹下定义了TextView的颜色和边距规则,然后创建了一个扩展原TextView的类TodoListItemView,重写了onDraw方法来改变视图外观。接着在layout文件夹下创建了list item布局,并在Activity中设置了ListView,通过ArrayAdapter显示自定义的TextView。最后展示了运行结果。
摘要由CSDN通过智能技术生成

①在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;

}

});

}

}

运行结果截图:

d21d54d135b89c8661e6a90fa63eeb53.png

posted on 2011-06-11 21:26 Ying-er 阅读(7242) 评论(0)  编辑  收藏 所属分类: Android

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值