- UI美化(设置背景颜色,选中时的便签背景颜色变换)
NotePad源码中的应用,只有简单的笔记黑色主题。本功能对此进行扩展,给予notePad一个新的主题
- 在AndroidManifest.xml中增加一句代码将NotePad换为白色主题
<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。选中时的笔记时笔记的背景颜色会改变
#be96df
<item android:drawable=“@color/color1”
android:state_pressed=“true”/>
- 在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的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
我搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!