NotePad功能扩展

基于NotePad应用做功能扩展

附加功能

  • UI美化(设置背景颜色,选中时的笔记背景颜色变换)
  • 更换背景

功能解析

  • UI美化(设置背景颜色,选中时的便签背景颜色变换)

    NotePad源码中的应用,只有简单的笔记黑色主题。本功能对此进行扩展,给予notePad一个新的主题

    1. 在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"
          >
      
    2. 让笔记的每条笔记都具有自己的背景颜色,所以选择在数据库中增加一个字段“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; 
      
    3. 在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属性
                  + ");");
      }
      
    4. 实例化和设置静态对象的块

      static{
          ·····
                  // add Maps "color" to "color"
          sNotesProjectionMap.put(
              NotePad.Notes.COLUMN_NAME_BACK_COLOR,
              NotePad.Notes.COLUMN_NAME_BACK_COLOR);
          ·····
      }
      
    5. 增加创建新笔记时需要执行的语句,给每条笔记设置默认背景颜色

      // 笔记背景默认为白色
      if (values.containsKey(NotePad.Notes.COLUMN_NAME_BACK_COLOR) == false) {
          values.put(NotePad.Notes.COLUMN_NAME_BACK_COLOR, NotePad.Notes.DEFAULT_COLOR);
      }
      
    6. 笔记列表显示时从数据库中读取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,
      };
      
    7. 使用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;
              }
          }
      }
      
    8. 将NoteList和NoteSearch里的适配器改为MyCursorAdapter

      MyCursorAdapter adapter
          = new MyCursorAdapter(
                    this,
                    R.layout.noteslist_item,
                    cursor, 
                    dataColumns,
                    viewIDs
            );
      
    9. 新建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>
      
    10. 在notelist_item.xml里为控件添加选择器

      android:background="@drawable/color_select"
      
    11. 模拟器截图

      NotePad功能扩展_第1张图片

      NotePad功能扩展_第2张图片

      NotePad功能扩展_第3张图片

      NotePad功能扩展_第4张图片

  • 更换背景颜色

    1. 为了编辑笔记的时候可以显示背景颜色(显示时能查询到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
      };
      
    2. 在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;
          }
      }
      
    3. 在editor_options_menu.xml中添加一个更改背景的按钮

      <item android:id="@+id/menu_color"
      android:title="color"
      android:icon="@drawable/ic_menu_edit"
      android:showAsAction="always"/>
      
    4. 往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;
      
    5. 新建选择背景颜色的布局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"/>
      
    6. 新建选择颜色的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"/>
      
    7. 模拟器截图

      NotePad功能扩展_第5张图片

      NotePad功能扩展_第6张图片

      NotePad功能扩展_第7张图片

      NotePad功能扩展_第8张图片

作者 穆昕雨

原文链接

你可能感兴趣的:(NotePad功能扩展)