編輯: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
iOS 6,iOS 7,Android和Windows Phone 8用戶體驗對比
技術顧問公司Pfeiffer進行了一次移動操作系統用戶體驗研究,這次研究被設計來收集和對比蘋果iOS 6,全新設計的iOS 7,微軟的Windows Phone 8,三星
Android Service服務(一) Service
一、Service簡介Service是android 系統中的四大組件之一(Activity、Service、BroadcastReceiver、 ContentProv
Android RoboGuice使用指南(13) RoboGuice功能描述
前面在Android RoboGuice 使用指南(1):概述 對應Roboguice做了簡要的介紹 ,之後介紹了Google Guice的基本用法,Roboguice是
Android中JUnit測試的配置
第一步:首先在AndroidManifest.xml中加入下面代碼:上面targetPackage指定的包要和應用的package相同。就是這個測試類所在的包 名;第二