`
angun123
  • 浏览: 9421 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

自定义TextView的显示效果一例

 
阅读更多

自定义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>

分享到:
评论

相关推荐

    Android继承现有控件拓展实现自定义控件textView

     本文将以拓展textView为例,看我们是如何继承现有控件,来自定义一个强大控件。这个自定义控件就是带有边框文本框,并且边框与背景的颜色不一样。大体效果图是这样的:  我们来分析一下如何实现这样的效果。我

    android Textview文字监控(Textview使用方法)

    以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能

    Android实现自定义的弹幕效果

    2、初始化若干个TextView(弹幕的item View,这里以TextView 为例,当然也可以其他了~),然后通过addView添加到自定义View中 3、通过addView添加到XCDanmuView中,位置在坐标,为了实现 从屏幕外移动进来的效果 ...

    Android编程实现Toast自定义布局简单示例

    首先加载一个自定义的布局 LayoutInflater inflater = context.getLayoutInflater(); View view=inflater.inflate(R.layout.toast_info, null); 然后找到里面的控件,以单纯的textview为例 TextView txt=...

    Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)

    现在让我们使用5.2.1节介绍的方法重新查看Html.java文件的内容,随便找一个处理Html标签的方法,例 如,endA方法。该方法用于处理标签。我们会发现在该方法中如下的语句。 text.setSpan(newURLSpan(h.mHref),where,...

    自定义滑动按钮为例图文剖析Android自定义View绘制

    自定义View一直是横在Android开发者面前的一道坎。 一、View和ViewGroup的关系 从View和ViewGroup的关系来看,ViewGroup继承View。 View的子类,多是功能型的控件,提供绘制的样式,比如imageView,TextView等,而...

    Android代码-一个解耦良好的计时控件,可自由扩展

    本例将通过一个计时控件,聊聊如何解耦~ 本TimerView仅作为demo,不保证其健壮性,请勿在实际项目中使用。 特点 UI容器与计时逻辑分离 UI容器与具体UI布局分离 Let's Go 话说,小明在做一个电商项目,有个倒计时...

    Android 自定义View时使用TypedArray配置样式属性详细介绍

     在自定义view时为了提高复用性和扩展性,可以为自定义的view添加样式属性的配置,比如自定义图片资源、文字大小、控件属性等,就这需要用到TypedArray类,下面以一个自定义的可点击扩展和收缩的TextView为例记录下...

    ExpandableListView综合实例

    第二种方式:自定义group.xml中的控件,加一个textview用于显示子条目个数. 注:本文数据库处理使用框架AHibernate,可以灵活操作sqlite数据库, 详见: http://blog.csdn.net/lk_blog/article/details/7455992 ...

    ExpandableListView实例

    第二种方式:自定义group.xml中的控件,加一个textview用于显示子条目个数. 注:本文数据库处理使用框架AHibernate,可以灵活操作sqlite数据库, 详见: http://blog.csdn.net/lk_blog/article/details/7455992 ...

    Android自定义Chronometer实现短信验证码秒表倒计时功能

    一、自定义ChronometerView 继续自TextView 主要原理:先设置一个基准倒计时时间mBaseSeconds,内置handler 每隔1s发送一个空消息,mRemainSeconds–,同时刷新界面视图,回调给外部调用者,只到为零。外部调用者可...

    Android 开发技巧

    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 ...

    Android开发资料合集-World版!

    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 ...

    android-customtypeface:用于将自定义字体设置为 Android 视图的库

    CustomTypeface 是一个 Android 库,用于将自定义字体设置为视图。 我们以 OpenSans 为例,但您可以修改此库并使用您喜欢的任何字体。 #用法 您应该扩展要设置字体的视图,如下所示: public class ...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    android popupwindow用法详解

    一、基本用法 一般做法,新建类继承popupwindow。例 /** * popupwindow基本用法 * Created by Administrator on 2015/11/25. */ public class DemoBasePop extends PopupWindow { private LinearLayout linear_...

Global site tag (gtag.js) - Google Analytics