UI美化(设置背景颜色,选中时的便签背景颜色变换)
NotePad源码中的应用,只有简单的笔记黑色主题。本功能对此进行扩展,给予notePad一个新的主题
在AndroidManifest.xml中增加一句代码将NotePad换为白色主题
<activity android:name="NotesList" android:label="@string/title_notes_list" android:theme="@android:style/Theme.Holo.Light">
<activity
android:name=".NoteSearch"
android:label="NoteSearch"
android:theme="@android:style/Theme.Holo.Light"
>
让笔记的每条笔记都具有自己的背景颜色,所以选择在数据库中增加一个字段“color”用于存放每条笔记的背景颜色。先在NotePad.java 中设置颜色编号
public static final String COLUMN_NAME_BACK_COLOR = "color";
public static final int DEFAULT_COLOR = 0;
public static final int YELLOW_COLOR = 1;
public static final int BLUE_COLOR = 2;
public static final int GREEN_COLOR = 3;
public static final int RED_COLOR = 4;
在NotePadProvider.java中修改创建数据库的语句
(如果数据库已创建需要将数据库删除重新运行一遍程序)
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + NotePad.Notes.TABLE_NAME + " ("
+ NotePad.Notes._ID + " INTEGER PRIMARY KEY,"
+ NotePad.Notes.COLUMN_NAME_TITLE + " TEXT,"
+ NotePad.Notes.COLUMN_NAME_NOTE + " TEXT,"
+ NotePad.Notes.COLUMN_NAME_CREATE_DATE + " INTEGER,"
+ NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE + " INTEGER,"
+ NotePad.Notes.COLUMN_NAME_BACK_COLOR + " INTEGER" //数据库增加color属性
+ ");");
}
实例化和设置静态对象的块
static{
·····
// add Maps "color" to "color"
sNotesProjectionMap.put(
NotePad.Notes.COLUMN_NAME_BACK_COLOR,
NotePad.Notes.COLUMN_NAME_BACK_COLOR);
·····
}
增加创建新笔记时需要执行的语句,给每条笔记设置默认背景颜色
// 笔记背景默认为白色
if (values.containsKey(NotePad.Notes.COLUMN_NAME_BACK_COLOR) == false) {
values.put(NotePad.Notes.COLUMN_NAME_BACK_COLOR, NotePad.Notes.DEFAULT_COLOR);
}
笔记列表显示时从数据库中读取color的代码,所以在NoteList和NoteSearch中的PROJECTION添加color属性
private static final String[] PROJECTION = new String[] {
NotePad.Notes._ID, // 0
NotePad.Notes.COLUMN_NAME_TITLE, // 1
//扩展 显示时间戳
NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE,
//扩展 显示笔记背景颜色
NotePad.Notes.COLUMN_NAME_BACK_COLOR,
};
使用bindView将颜色填充到ListView。新建一个MyCursorAdapter继承SimpleCursorAdapter
public class MyCursorAdapter extends SimpleCursorAdapter {
public MyCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
}
@Override
public void bindView(View view, Context context, Cursor cursor){
super.bindView(view, context, cursor);
//从数据库中读取的先前存入的笔记背景颜色的编码,再设置笔记的背景颜色
int x = cursor.getInt(cursor.getColumnIndex(NotePad.Notes.COLUMN_NAME_BACK_COLOR));
switch (x){
case NotePad.Notes.DEFAULT_COLOR:
view.setBackgroundColor(Color.rgb(255, 255, 255));
break;
case NotePad.Notes.YELLOW_COLOR:
view.setBackgroundColor(Color.rgb(247, 216, 133));
break;
case NotePad.Notes.BLUE_COLOR:
view.setBackgroundColor(Color.rgb(165, 202, 237));
break;
case NotePad.Notes.GREEN_COLOR:
view.setBackgroundColor(Color.rgb(161, 214, 174));
break;
case NotePad.Notes.RED_COLOR:
view.setBackgroundColor(Color.rgb(244, 149, 133));
break;
default:
view.setBackgroundColor(Color.rgb(255, 255, 255));
break;
}
}
}
将NoteList和NoteSearch里的适配器改为MyCursorAdapter
MyCursorAdapter adapter
= new MyCursorAdapter(
this,
R.layout.noteslist_item,
cursor,
dataColumns,
viewIDs
);
新建colors.xml和color_select.xml。选中时的笔记时笔记的背景颜色会改变
<resources>
<color name="color1">#be96dfcolor>
resources>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/color1"
android:state_pressed="true"/>
selector>
在notelist_item.xml里为控件添加选择器
android:background="@drawable/color_select"
模拟器截图
更换背景颜色
为了编辑笔记的时候可以显示背景颜色(显示时能查询到color数据),在NoteEditor.java中增加color属性
private static final String[] PROJECTION =
new String[] {
NotePad.Notes._ID,
NotePad.Notes.COLUMN_NAME_TITLE,
NotePad.Notes.COLUMN_NAME_NOTE,
//增加 背景颜色
NotePad.Notes.COLUMN_NAME_BACK_COLOR
};
在onResume()中增加设置背景颜色的代码
//读取颜色数据
if(mCursor!=null){
mCursor.moveToFirst();
int x = mCursor.getColumnIndex(NotePad.Notes.COLUMN_NAME_BACK_COLOR);
int y = mCursor.getInt(x);
Log.i("NoteEditor", "color"+y);
switch (y){
case NotePad.Notes.DEFAULT_COLOR:
mText.setBackgroundColor(Color.rgb(255, 255, 255));
break;
case NotePad.Notes.YELLOW_COLOR:
mText.setBackgroundColor(Color.rgb(247, 216, 133));
break;
case NotePad.Notes.BLUE_COLOR:
mText.setBackgroundColor(Color.rgb(165, 202, 237));
break;
case NotePad.Notes.GREEN_COLOR:
mText.setBackgroundColor(Color.rgb(161, 214, 174));
break;
case NotePad.Notes.RED_COLOR:
mText.setBackgroundColor(Color.rgb(244, 149, 133));
break;
default:
mText.setBackgroundColor(Color.rgb(255, 255, 255));
break;
}
}
在editor_options_menu.xml中添加一个更改背景的按钮
<item android:id="@+id/menu_color"
android:title="color"
android:icon="@drawable/ic_menu_edit"
android:showAsAction="always"/>
往NoteEditor.java中添加增加上一步新增的选项的执行语句,在onOptionsItemSelected()的switch中添加代码
case R.id.menu_color://跳转改变颜色的activity
Intent intent = new Intent(null,mUri);
intent.setClass(NoteEditor.this,NoteColor.class);
NoteEditor.this.startActivity(intent);
break;
新建选择背景颜色的布局note_color.xml
<ImageButton
android:id="@+id/color_white"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="#ffffff"
android:onClick="white"/>
<ImageButton
android:id="@+id/color_yellow"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="#fdef90"
android:onClick="yellow"/>
<ImageButton
android:id="@+id/color_blue"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="#6dc1ed"
android:onClick="blue"/>
<ImageButton
android:id="@+id/color_green"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="#94e49f"
android:onClick="green"/>
<ImageButton
android:id="@+id/color_red"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="#f19696"
android:onClick="red"/>
新建选择颜色的NoteColor.java并注册
public class NoteColor extends Activity {
private Cursor mCursor;
private Uri mUri;
private int color;
private static final int COLUMN_INDEX_TITLE = 1;
private static final String[] PROJECTION = new String[] {
NotePad.Notes._ID,
NotePad.Notes.COLUMN_NAME_BACK_COLOR,
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.note_color);
mUri = getIntent().getData();
mCursor = managedQuery(
mUri,
PROJECTION,
null,
null,
null
);
}
@Override
protected void onResume(){
if(mCursor.moveToFirst()){
color = mCursor.getInt(mCursor.getColumnIndex(NotePad.Notes.COLUMN_NAME_BACK_COLOR));
Log.i("NoteColor", "before"+color);
}
super.onResume();
}
@Override
protected void onPause() {
//将修改的颜色存入数据库
super.onPause();
ContentValues values = new ContentValues();
Log.i("NoteColor", "cun"+color);
values.put(NotePad.Notes.COLUMN_NAME_BACK_COLOR, color);
getContentResolver().update(mUri, values, null, null);
int x = mCursor.getColumnIndex(NotePad.Notes.COLUMN_NAME_BACK_COLOR);
int y = mCursor.getInt(x);
Log.i("NoteColor", "du"+y);
}
public void white(View view){
color = NotePad.Notes.DEFAULT_COLOR;
finish();
}
public void yellow(View view){
color = NotePad.Notes.YELLOW_COLOR;
finish();
}
public void blue(View view){
color = NotePad.Notes.BLUE_COLOR;
finish();
}
public void green(View view){
color = NotePad.Notes.GREEN_COLOR;
finish();
}
public void red(View view){
color = NotePad.Notes.RED_COLOR;
finish();
}
}
<activity android:name="NoteColor"
android:theme="@android:style/Theme.Holo.Light.Dialog"
android:label="Select Color"/>
模拟器截图
作者 穆昕雨
原文链接