Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android中的ToDoList(定制樣式) 詳解

Android中的ToDoList(定制樣式) 詳解

編輯:Android開發教程

Android允許從已有的視圖工具箱(Widget Tool Box)派生子類 或 實現自己的視圖控件;

通過重寫事件處理程序 和onDraw()方法, 但是仍然回調超類(super)的方法, 可以對視圖進行定制, 而不必實心它的功能;

前置步驟參見: http://blog.csdn.net/caroline_wendy/article/details/21246963

步驟:

1. 創建ToDoListItemView類, 定制Item項的外觀:

位置: java->package->ToDoListItemView.java

package mzx.spike.todolist.app;  
      
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;  
      
/** 
 * Created by C.L.Wang on 14-3-16. 
 */
public class ToDoListItemView extends TextView{  
      
    private Paint marginPaint;  
    private Paint linePaint;  
    private int paperColor;  
    private float margin;  
      
    public ToDoListItemView (Context context, AttributeSet ats, int ds) {  
        super(context, ats, ds);  
        init();  
    }  
      
    public  ToDoListItemView (Context context) {  
        super(context);  
        init();  
    }  
      
    public ToDoListItemView (Context context, AttributeSet ats) {  
        super(context, ats);  
        init();  
    }  
      
    private void init() {  
      
        //獲得對資源列表的引用 
	// 查看本欄目更多精彩內容:http://www.bianceng.cn/OS/extra/ 
        Resources myResources = getResources();  
      
        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));  
      
        paperColor = myResources.getColor(R.color.notepad_paper);  
        margin = myResources.getDimension(R.dimen.notepad_margin);  
    }  
      
    @Override
    public void onDraw(Canvas canvas) {  
      
        canvas.drawColor(paperColor);  
      
        canvas.drawLine(0, 0, 0, getMeasuredHeight(), 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();  
    }  
      
}

詳解:

1. 繼承TextView類, 是文本視圖的定制;

2. 重載構造函數, 包含三個參數的重載版本,回調超類(super)之後,初始化資源私有變量(init);

3. 在Init()中, 獲得資源列表的引用(getResource), 將資源文件轉換為可以調用的參數(myResource.getXXX), 初始化資源私有變量;

4. 重寫(Override)OnDraw方法, 設置顏色, 畫線, 指定寫入格式;

5. canvas.translate(), 使輸出文件, 後移margin距離;

2. 創建顏色(colors)資源文件

位置: res->values->colors.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <color name="notepad_paper">#EEF8E0A0</color>  
    <color name="notepad_lines">#FF0000FF</color>  
    <color name="notepad_margin">#90FF0000</color>  
    <color name="notepad_text">#AA0000FF</color>  
</resources>

顏色資源文件, 以color標簽, Android Studio會顯示顏色;

3. 修改尺寸(dimen)資源文件:

位置: res->values->dimen.xml

<resources>  
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>  
    <dimen name="activity_vertical_margin">16dp</dimen>  
    <dimen name="notepad_margin">30dp</dimen>  
</resources>

補充即可;

4. 創建todolist_item布局文件:

位置: res->layout->todolist_item.xml

<?xml version="1.0" encoding="utf-8"?>  
      
<mzx.spike.todolist.app.ToDoListItemView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    android:scrollbars="vertical"
    android:textColor="@color/notepad_text"
    android:fadingEdge="vertical"
 />

詳解:

1. 標簽為類名, 即ToDoListItemView類, 重載了TextView的方法;

2. 設置相應的屬性標簽;

5. 修改適配器(Adapter), 使用定制的TextView:

位置: java->package->ToDoListActivity

......  
        int resID = R.layout.todolist_item;  
        //三個參數  
        aa = new ArrayAdapter<String>(this, resID, toDoItems);  
      
        toDoListFragment.setListAdapter(aa);  
......

詳解:

找到資源文件的ID, 傳入適配器;

6. 執行程序:代碼下載: http://download.csdn.net/detail/u012515223/7050371

作者:csdn博客 Spike_King

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved