- 添加时间
- 搜索功能
- 更改背景颜色
首先,由于看不惯黑色背景,于是将NoteList的颜色修改与NoteEditor一致: 在AndroidManifest.xml中添加
android:theme="@android:style/Theme.Holo.Light"- 先在noteslist_item中添加能够显示时间的TextView:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:paddingLeft="5dip"
android:singleLine="true"
/>
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:paddingLeft="5dip"
android:textColor="#708090"
android:textSize="20dp"
android:singleLine="true"/>
</LinearLayout>
- 修改notelist.java 的PROJECTION
private static final String[] PROJECTION = new String[] {
NotePad.Notes._ID, // 0
NotePad.Notes.COLUMN_NAME_TITLE, // 1
NotePad.Notes.COLUMN_NAME_CREATE_DATE
};
- 修改dataColumns和viewID相关的值
String[] dataColumns = { NotePad.Notes.COLUMN_NAME_TITLE ,NotePad.Notes.COLUMN_NAME_CREATE_DATE} ;int[] viewIDs = { android.R.id.text1 ,R.id.date};- 向NotePadProvider数据存储中添加时间值
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());
String date = formatter.format(curDate);
values.put(NotePad.Notes.COLUMN_NAME_CREATE_DATE,date);
功能实现后如下图所示:
- 首先在list_options_menu.xml中添加一个搜索的选项:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:icon="@drawable/search1"
android:title="@string/menu_add"
android:alphabeticShortcut="s"
android:showAsAction="always"
/>
<!-- This is our one standard application action (creating a new note). -->
<item android:id="@+id/menu_add"
android:icon="@drawable/ic_menu_compose"
android:title="@string/menu_add"
android:alphabeticShortcut='a'
android:showAsAction="always" />
<!-- If there is currently data in the clipboard, this adds a PASTE menu item to the menu
so that the user can paste in the data.. -->
<item android:id="@+id/menu_paste"
android:icon="@drawable/ic_menu_compose"
android:title="@string/menu_paste"
android:alphabeticShortcut='p' />
</menu>- 创建一个SearchView成员变量
private SearchView searchView;- 写一个设置SearchView的方法
private void setSearchView(Menu menu) {
//1.找到menuItem并动态设置SearchView
MenuItem item = menu.getItem(0);
searchView = new SearchView(this);
item.setActionView(searchView);
//2.设置搜索的背景为白色
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
item.collapseActionView();
}
searchView.setQuery("", false);
//searchView.setBackgroundResource(R.drawable.ic_menu_edit);
//3.设置为默认展开状态,图标在外面
searchView.setIconifiedByDefault(true);
searchView.setQueryHint("Search");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
searchView.onActionViewCollapsed();
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (!TextUtils.isEmpty(newText)) {
Cursor cursor = managedQuery(
getIntent().getData(), // Use the default content URI for the provider.
PROJECTION, // Return the note ID and title for each note.
NotePad.Notes.COLUMN_NAME_TITLE + " LIKE '%" + newText + "%' ", // 相当于where语句
null, // No where clause, therefore no where column values.
NotePad.Notes.DEFAULT_SORT_ORDER // Use the default sort order.
);
final String[] dataColumn = {NotePad.Notes.COLUMN_NAME_CREATE_DATE, NotePad.Notes.COLUMN_NAME_TITLE};
// The view IDs that will display the cursor columns, initialized to the TextView in
// noteslist_item.xml
int[] viewID = {R.id.date,android.R.id.text1};
SimpleCursorAdapter adapter1
= new SimpleCursorAdapter(
NotesList.this, // The Context for the ListView
R.layout.noteslist_item, // Points to the XML for a list item
cursor, // The cursor to get items from
dataColumn,
viewID
);
//重新setListAdapter
setListAdapter(adapter1);
} else {
//恢复默认setListAdapter
setListAdapter(adapter);
}
return false;
}
});
}onQueryTextChange是监听搜索框的方法,根据输入文字改变SimpleCursorAdapter界面
- 在onCreateOptionsMenu中添加setSearchView方法
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate menu from XML resource
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list_options_menu, menu);
setSearchView(menu);
// Generate any additional actions that can be performed on the
// overall list. In a normal install, there are no additional
// actions found here, but this allows other applications to extend
// our menu with their own actions.
Intent intent = new Intent(null, getIntent().getData());
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0,
new ComponentName(this, NotesList.class), null, intent, 0, null);
return super.onCreateOptionsMenu(menu);
}实现后界面如下:
- 先在NoteList的菜单栏里添加一个改变背景颜色的选项
在list_option_menu中添加:
<item
android:id="@+id/bg"
android:title="Background"
android:alphabeticShortcut="b"
/>效果如图:
- 创建一个用来显示颜色选择的布局color.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E1FFFF"
android:id="@+id/LightCyan"
android:clickable="true"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFC0CB"
android:id="@+id/Pink"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#87CEFA"
android:id="@+id/LightSkyBlue"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F8F8FF"
android:id="@+id/GhostWhite"
android:layout_weight="1"/>
</LinearLayout>- 使用SharedPreferences来保存之前设置的颜色,在下次启动应用时设置
创建一个SharedPreferences变量和存储颜色的变量:
private SharedPreferences bg;
private String preferencescolor;使用SharedPreferences保存颜色的方法:
private void putColor(String color){
SharedPreferences preferences = getSharedPreferences("preferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("color", color);
editor.commit();
}在onCreate方法中设置,如果之前有设置过颜色,启动时应用,没有则使用默认颜色:
bg = getSharedPreferences("preferences", Context.MODE_PRIVATE);
preferencescolor=bg.getString("color", "");
//设置Listview的背景色
if(preferencescolor.equals("")){
getListView().setBackgroundColor(Color.parseColor("#FFFFFF"));
}
else {
getListView().setBackgroundColor(Color.parseColor(preferencescolor));
}- 在onOptionItemSelected方法中设置Background的响应事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_add:
/*
* Launches a new Activity using an Intent. The intent filter for the Activity
* has to have action ACTION_INSERT. No category is set, so DEFAULT is assumed.
* In effect, this starts the NoteEditor Activity in NotePad.
*/
startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData()));
return true;
case R.id.menu_paste:
/*
* Launches a new Activity using an Intent. The intent filter for the Activity
* has to have action ACTION_PASTE. No category is set, so DEFAULT is assumed.
* In effect, this starts the NoteEditor Activity in NotePad.
*/
startActivity(new Intent(Intent.ACTION_PASTE, getIntent().getData()));
return true;
//Background的点击事件
case R.id.bg:
final AlertDialog alertDialog = new AlertDialog.Builder(NotesList.this).create();
alertDialog.show();
Window window = alertDialog.getWindow();
window.setContentView(R.layout.color);
TextView color_LightCyan = (TextView)alertDialog.getWindow().findViewById(R.id.LightCyan);
TextView color_Pink = (TextView)alertDialog.getWindow().findViewById(R.id.Pink);
TextView color_LightSkyBlue = (TextView)alertDialog.getWindow().findViewById(R.id.LightSkyBlue);
TextView color_GhostWhite = (TextView)alertDialog.getWindow().findViewById(R.id.GhostWhite);
color_LightCyan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
preferencescolor="#E1FFFF";
getListView().setBackgroundColor(Color.parseColor(preferencescolor));
putColor(preferencescolor);
alertDialog.dismiss();
}
});
color_Pink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
preferencescolor="#FFC0CB";
getListView().setBackgroundColor(Color.parseColor(preferencescolor));
putColor(preferencescolor);
alertDialog.dismiss();
}
});
color_LightSkyBlue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
preferencescolor="#87CEFA";
getListView().setBackgroundColor(Color.parseColor(preferencescolor));
putColor(preferencescolor);
alertDialog.dismiss();
}
});
color_GhostWhite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
preferencescolor="#F8F8FF";
getListView().setBackgroundColor(Color.parseColor(preferencescolor));
putColor(preferencescolor);
alertDialog.dismiss();
}
});
return true;
default:
return super.onOptionsItemSelected(item);
}
}alertDialog是用来显示刚才创建color.xml;然后给每个颜色设置点击事件,将色值传给preferencescolor并设置为背景
实现后如下图:





