自定义TextView的显示效果一例
说明:在这个例子中我们会定义一个新的“MyListItemView”,自定义TextView的显示效果。最终的效果如图1.1所示。
图1.1
<!--EndFragment-->
1、修改“res/layout”目录下的“main.xml”,用来显示程序所需要的控件。其完整代码如下:
1、新建一个“MyListItemView”类继承“TextView”类。代码如下:
packagecom.android.mylist;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.util.AttributeSet;
importandroid.widget.TextView;
publicclassMyListItemViewextendsTextView{
publicMyListItemView(Contextcontext,AttributeSetats,intds){
super(context,ats,ds);
init();
}
publicMyListItemView(Contextcontext){
super(context);
init();
}
publicMyListItemView(Contextcontext,AttributeSetattrs){
super(context,attrs);
init();
}
privatevoidinit(){
}
@Override
publicvoidonDraw(Canvascanvas){
//UsethebaseTextViewtorenderthetext.
super.onDraw(canvas);
}
}
|
2、在“res/values”文件夹中新建一个“colors.xml”文件,其内容如下:
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<colorname="notepad_paper">#AAFFFF99</color>
<colorname="notepad_lines">#FF0000FF</color>
<colorname="notepad_margin">#90FF0000</color>
<colorname="notepad_text">#AA0000FF</color>
</resources>
|
3、同样在“res/values”文件夹中新建一个“dimens.xml”文件,为添加一个页边距,其内容如下:
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<dimenname="notepad_margin">30dp</dimen>
</resources>
|
4、添加完这些资源文件之后,我们就可以设置“MyListItemView”的显示效果了。重写“init()”方法:在“init()”方法中新建一个实例对用来存储“Paint”对象。代码如下:
privatevoidinit(){
//创建一个资源表的引用
ResourcesmyResources=getResources();
//创建一个画刷
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));
//获得“paper”的背景色和页边距宽度
paperColor=myResources.getColor(R.color.notepad_paper);
margin=myResources.getDimension(R.dimen.notepad_margin);
}
|
5、为了绘制“paper”我们必须重写“onDraw”方法并利用在第四步中创建的“Paper”的实例画出图片。图片画出之后,我们就能调用父类的“onDraw”方法并且显示文字。代码如下:
@Override
publicvoidonDraw(Canvascanvas){
//设置画布的背景色
canvas.drawColor(paperColor);
//画一条线
canvas.drawLine(0,0,getMeasuredHeight(),0,linePaint);
canvas.drawLine(0,getMeasuredHeight(),getMeasuredWidth(),
getMeasuredHeight(),linePaint);
//画出页边
canvas.drawLine(margin,0,margin,getMeasuredHeight(),marginPaint);
canvas.save();
canvas.translate(margin,0);
super.onDraw(canvas);
canvas.restore();
}
|
6、为了利用“MyListActivity”我们将它包含在一个“layout”中并将它传给一个“ArrayAdapter”构造器。在“res/layout”文件夹中创建一个“mylistitem.xml”资源文件,它指定“MyListItemView”的各个项目如何显示。代码如下所示:
<?xmlversion="1.0"encoding="utf-8"?>
<com.android.mylist.MyListItemView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:scrollbars="vertical"
android:textColor="@color/notepad_text"
android:fadingEdge="vertical"/>
|
7、打开“MyListActivity”类,添加如下代码;
packagecom.android.mylist;
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;
publicclassMyListActivityextendsActivity{
privateEditTexteditText=null;
privateListViewmyListView=null;
privateArrayList<String>myItems=null;
privateArrayAdapter<String>aa=null;
/**当MyListActivity第一次创建时调用“onCreate”方法.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myListView=(ListView)findViewById(R.id.myListView);
editText=(EditText)findViewById(R.id.myEditText);
editText.setOnKeyListener(newMyOnKeyListener());
myItems=newArrayList<String>();
intresID=R.layout.mylistitem;
aa=newArrayAdapter<String>(this,resID,myItems);
myListView.setAdapter(aa);
}
publicclassMyOnKeyListenerimplementsOnKeyListener{
publicbooleanonKey(Viewv,intkeyCode,KeyEventevent){
if(event.getAction()==KeyEvent.ACTION_DOWN)
if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){
myItems.add(0,editText.getText().toString());
aa.notifyDataSetChanged();
editText.setText("");
returntrue;
}
returnfalse;
}
}
}}
|
8、到此“MyList”应用程序设计完成,在文本输入框中输入内容,然后点击键盘的向下按钮即可看到如图1.2所示显示效果:
图1.2
<!--EndFragment--><!--EndFragment--><!--EndFragment-->
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListViewandroid:id="@+id/myListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<EditTextandroid:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"android:text="pleaseinputsomethinghere"/>
</LinearLayout>
|
分享到:
相关推荐
本文将以拓展textView为例,看我们是如何继承现有控件,来自定义一个强大控件。这个自定义控件就是带有边框文本框,并且边框与背景的颜色不一样。大体效果图是这样的: 我们来分析一下如何实现这样的效果。我
以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
2、初始化若干个TextView(弹幕的item View,这里以TextView 为例,当然也可以其他了~),然后通过addView添加到自定义View中 3、通过addView添加到XCDanmuView中,位置在坐标,为了实现 从屏幕外移动进来的效果 ...
首先加载一个自定义的布局 LayoutInflater inflater = context.getLayoutInflater(); View view=inflater.inflate(R.layout.toast_info, null); 然后找到里面的控件,以单纯的textview为例 TextView txt=...
现在让我们使用5.2.1节介绍的方法重新查看Html.java文件的内容,随便找一个处理Html标签的方法,例 如,endA方法。该方法用于处理标签。我们会发现在该方法中如下的语句。 text.setSpan(newURLSpan(h.mHref),where,...
自定义View一直是横在Android开发者面前的一道坎。 一、View和ViewGroup的关系 从View和ViewGroup的关系来看,ViewGroup继承View。 View的子类,多是功能型的控件,提供绘制的样式,比如imageView,TextView等,而...
本例将通过一个计时控件,聊聊如何解耦~ 本TimerView仅作为demo,不保证其健壮性,请勿在实际项目中使用。 特点 UI容器与计时逻辑分离 UI容器与具体UI布局分离 Let's Go 话说,小明在做一个电商项目,有个倒计时...
在自定义view时为了提高复用性和扩展性,可以为自定义的view添加样式属性的配置,比如自定义图片资源、文字大小、控件属性等,就这需要用到TypedArray类,下面以一个自定义的可点击扩展和收缩的TextView为例记录下...
第二种方式:自定义group.xml中的控件,加一个textview用于显示子条目个数. 注:本文数据库处理使用框架AHibernate,可以灵活操作sqlite数据库, 详见: http://blog.csdn.net/lk_blog/article/details/7455992 ...
第二种方式:自定义group.xml中的控件,加一个textview用于显示子条目个数. 注:本文数据库处理使用框架AHibernate,可以灵活操作sqlite数据库, 详见: http://blog.csdn.net/lk_blog/article/details/7455992 ...
一、自定义ChronometerView 继续自TextView 主要原理:先设置一个基准倒计时时间mBaseSeconds,内置handler 每隔1s发送一个空消息,mRemainSeconds–,同时刷新界面视图,回调给外部调用者,只到为零。外部调用者可...
4.13.1、显示到一个布局中 127 4.14、TOASTE 128 4.14.1、短时间显示 128 4.14.2、长时间显示 128 4.15、对话框 128 4.15.1、简单的对话框: 128 4.15.2、包含两个按钮的对话框 128 4.15.3、三个按钮的提示框 129 ...
4.13.1、显示到一个布局中 127 4.14、TOASTE 128 4.14.1、短时间显示 128 4.14.2、长时间显示 128 4.15、对话框 128 4.15.1、简单的对话框: 128 4.15.2、包含两个按钮的对话框 128 4.15.3、三个按钮的提示框 129 ...
CustomTypeface 是一个 Android 库,用于将自定义字体设置为视图。 我们以 OpenSans 为例,但您可以修改此库并使用您喜欢的任何字体。 #用法 您应该扩展要设置字体的视图,如下所示: public class ...
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...
一、基本用法 一般做法,新建类继承popupwindow。例 /** * popupwindow基本用法 * Created by Administrator on 2015/11/25. */ public class DemoBasePop extends PopupWindow { private LinearLayout linear_...