①在values文件夹下定义TextView的颜色和边距规则:

颜色规则:notepadcolors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  
<!-- 页面  -->
  
<color name="notepad_paper">#AAFFFF99</color>
  
<!-- 边缘  -->
  
<color name="notepad_lines">#FF0000FF</color>
  
<!-- 行  -->
  
<color name="notepad_margin">#90FF0000</color>
  
<!-- 文本  -->
  
<color name="notepad_text">#AA0000FF</color>
</resources>

边距规则:notepaddimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    
<dimen name="notepad_margin">30dp</dimen>
</resources>

②创建一个扩展原TextView的新类,并重写onDraw方法来修改视图的外观

package com.yinger;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

public class TodoListItemView extends TextView {

    
private Paint marginPaint;
    
private Paint linePaint;
    
private int paperColor;
    
private float margin;

    
public TodoListItemView(Context context, AttributeSet attrs, int defStyle) {
        
super(context, attrs, defStyle);
        
// TODO Auto-generated constructor stub
        init();
    }

    
public TodoListItemView(Context context, AttributeSet attrs) {
        
super(context, attrs);
        init();
    }

    
public TodoListItemView(Context context) {
        
super(context);
        init();
    }

    
private void init() {
        Resources myResources 
= getResources();
        
// Create the paint brushes we will use in the onDraw method.
        marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        marginPaint.setColor(myResources.getColor(R.color.notepad_margin));
        
        linePaint 
= new Paint(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);
    }

    @Override
    
protected void onDraw(Canvas canvas) {
        
// TODO Auto-generated method stub
        
// Color as paper
        canvas.drawColor(paperColor);

        
// Draw ruled lines
        canvas.drawLine(0030.0f0, linePaint);
        canvas.drawLine(
0, getMeasuredHeight(), 
                           getMeasuredWidth(), getMeasuredHeight(), 
                           linePaint);

        
// Draw margin
        canvas.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint);

        
// Move the text across from the margin
        canvas.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 

<?xml version="1.0" encoding="utf-8"?>
<com.yinger.TodoListItemView
  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"
/>

注意,黄色部分是重点。

④大家熟悉的布局文件,我这里是main.xml,没啥好说的。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation
="vertical"
  android:layout_width
="fill_parent"
  android:layout_height
="fill_parent">
  
<EditText
    
android:id="@+id/myEditText"
    android:layout_width
="fill_parent" 
    android:layout_height
="wrap_content" 
    android:text
="New To Do Item"
  
/>
  
<ListView  
    
android:id="@+id/myListView"
    android:layout_width
="fill_parent" 
    android:layout_height
="wrap_content" 
  
/>
</LinearLayout>

⑤和以前一样的定义ListView,没啥区别:

package com.yinger;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class TextViewDemo extends Activity {
    
/** Called when the activity is first created. */
    @Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
     
// Get references to UI widgets
        ListView myListView = (ListView)findViewById(R.id.myListView);
        
final EditText myEditText = (EditText)findViewById(R.id.myEditText);
        
        
final ArrayList<String> todoItems = new ArrayList<String>();
        
int resID = R.layout.todolist_item;
        
final ArrayAdapter<String> aa = new ArrayAdapter<String>(this, resID,
                                                                 todoItems);
        myListView.setAdapter(aa);
        
        myEditText.setOnKeyListener(
new OnKeyListener() {
            
public boolean onKey(View v, int keyCode, KeyEvent event) {
              
if (event.getAction() == KeyEvent.ACTION_DOWN)
                
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
                {
                  todoItems.add(
0, myEditText.getText().toString());
                  aa.notifyDataSetChanged();
                  myEditText.setText(
"");
                  
return true;
                }
              
return false;
            }
          });
    }
}


运行结果截图:









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

只有注册用户登录后才能发表评论。


网站导航: