您的位置:首页 > 移动开发 > Android开发

Android_Note(三)——添加、更新、保存记事本功能

2016-11-08 14:44 399 查看
1、添加功能的view页面部分

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<span style="color:#3333FF;"><!-- 标题 --></span>
<EditText
android:id="@+id/noteName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入标题"
android:textColor="#0000ff" />
<span style="color:#3333FF;"><!-- 闹钟时间 --></span>
<EditText
android:id="@+id/noteTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/noteName"
android:editable="false"
android:textColor="#0000ff" />
<span style="color:#3333FF;"><!-- 备忘录内容 --></span>
<view
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/noteMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/noteTime"
android:layout_above="@+id/relativeLayout1"
class="com.my.click.LinedEditText"
android:background="@drawable/background"
android:capitalize="sentences"
android:fadingEdge="vertical"
android:gravity="top"
android:padding="5dip"
android:scrollbars="vertical"
android:hint="请输入内容"
android:textColor="#0000ff" />
<span style="color:#3333FF;"><!-- 底部按钮 --></span>
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" >
<span style="color:#3333FF;"><!-- 保存按钮 --></span>
<Button
android:id="@+id/btnCommit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保 存" />
<span style="color:#3333FF;"><!-- 取消按钮 --></span>
<Button
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btnCommit"
android:text="取 消" />
</RelativeLayout>
</RelativeLayout>
实际效果如下:

2、以下为上面view的实现代码,通过继承edittext,自定义一些风格,如文字颜色变成蓝色,为每一行文字添加下划线等。

public class LinedEditText extends EditText {
private Rect mRect;
private Paint mPaint;
<span style="color:#3333FF;">//构造函数</span>
public LinedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mRect = new Rect();
//设置颜料颜色为蓝色
mPaint = new Paint();
mPaint.setColor(Color.BLUE);
}
<span style="color:#3333FF;">//生成视图</span>
@Override
protected void onDraw(Canvas canvas) {
int count = getLineCount();
Rect r = mRect;
Paint paint = mPaint;
<span style="color:#3333FF;">//设置每一行的格式</span>
for (int i = 0; i < count; i++) {
<span style="color:#3333FF;">//取得每一行的基准Y坐标,并将每一行的界限值填写到r中</span>
int baseline = getLineBounds(i, r);
<span style="color:#3333FF;">//设置每一行的文字下带下划线</span>
canvas.drawLine(r.left, baseline + 5, r.right, baseline + 5, paint);
}
super.onDraw(canvas);
}
}
3、以下为AddActivity的代码分析,
public class AddActivity extends Activity {
private final Handler msgHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.arg1) {
case 1:
Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
String a = "" ;

<span style="color:#3333FF;">//标题、内容和时间</span>
private EditText etName,etMain, etTime;
<span style="color:#3333FF;">//保存按钮、取消按钮</span>
private Button btnCommit,btnCancel;
<span style="color:#3333FF;">//数据库操作类</span>
private SQLiteDatabase sdb;
private ActivityManager am;
<span style="color:#3333FF;">//年月日时分秒,用于保存日历详细信息</span>
private int year, month, day, hours, minute, second;
private Calendar c;
private PendingIntent pi;
private AlarmManager alm;
<span style="color:#3333FF;">//编辑模式标志</span>
private boolean EDIT=false;
private String noteId;
<span style="color:#3333FF;">//初始化函数</span>
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.add);

<span style="color:#3333FF;">//将当前Activity添加到Activity列表中</span>
am = ActivityManager.getInstance();
am.addActivity(this);
<span style="color:#3333FF;">//初始化各个元素</span>
etName = (EditText) findViewById(R.id.noteName);
etMain = (EditText) findViewById(R.id.noteMain);
btnCommit = (Button) findViewById(R.id.btnCommit);
btnCancel = (Button) findViewById(R.id.btnCancel);
etTime = (EditText) findViewById(R.id.noteTime);
Intent intent=getIntent();
noteId = intent.getStringExtra("noteId");
<span style="color:#3333FF;">//如果noteId值不为空,则进入编辑模式,否则进入预览模式</span>
if(noteId != null)
EDIT=true;
else
EDIT=false;
<span style="color:#3333FF;">//数据库连接类</span>
SqliteDBConnect sd = new SqliteDBConnect(AddActivity.this);
<span style="color:#3333FF;">//获得数据库操作类</span>
sdb = sd.getReadableDatabase();
if(EDIT)
{
<span style="color:#3333FF;">//通过noteId取得对应的信息</span>
Cursor c = sdb.query("note", new String[] { "noteId", "noteName",
"noteContent", "noteTime" }, "noteId=?",
new String[] { noteId }, null, null, null);
<span style="color:#3333FF;">//将获得的信息写入对应的EditText</span>
while (c.moveToNext()) {
etName.setText(c.getString(c.getColumnIndex("noteName")));
etMain.setText(c.getString(c.getColumnIndex("noteContent")));
etTime.setText(c.getString(c.getColumnIndex("noteTime")));
}
c.close();
}else{
<span style="color:#3333FF;">//设置默认闹钟为当前时间</span>
etTime.setText(am.returnTime());
}

<span style="color:#3333FF;">//设置文本颜色为红色</span>
etTime.setTextColor(Color.RED);
<span style="color:#3333FF;">//为闹钟设置长按监听器,弹出日期选择界面</span>
etTime.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
<span style="color:#3333FF;">//实例化日历</span>
c = Calendar.getInstance();
<span style="color:#3333FF;">//取得日历信息中的年月日时分秒</span>
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
hours = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
second = c.get(Calendar.SECOND);
<span style="color:#3333FF;">//新建一个日期选择控件</span>
DatePickerDialog dpd = new DatePickerDialog(AddActivity.this,
new DatePickerDialog.OnDateSetListener() {
<span style="color:#3333FF;">//设置日期的时候触发</span>
@Override
public void onDateSet(DatePicker view, int y,
int monthOfYear, int dayOfMonth) {
String[] time = { "",
hours + ":" + minute + ":" + second };
try {
<span style="color:#3333FF;">//将日期和时间分割</span>
String[] time2 = etTime.getText()
.toString().trim().split(" ");
<span style="color:#3333FF;">//取得时间的信息保存到time[1]中</span>
if (time2.length == 2) {
time[1] = time2[1];
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String mo = "", da = "";
<span style="color:#3333FF;">//将月份转换成两位数</span>
if (monthOfYear < 9) {
mo = "0" + (monthOfYear + 1);
} else {
mo = monthOfYear+1 + "";
}
<span style="color:#3333FF;">//将天数转换成两位数</span>
if (dayOfMonth < 10) {
da = "0" + dayOfMonth;
} else {
da = dayOfMonth + "";
}
<span style="color:#3333FF;">//将设置的结果保存到etTime中</span>
etTime.setText(y + "-" + mo + "-" + da + " "
+ time[1]);
}
}, year, month, day);
dpd.setTitle("设置日期");
<span style="color:#3333FF;">//显示日期控件</span>
dpd.show();
return true;
}
});
// <span style="color:#3333FF;">//设置单击监听器,弹出时间选择界面</span>
etTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
<span style="color:#3333FF;">//实例化日历</span>
c = Calendar.getInstance();
<span style="color:#3333FF;">//取得当前的年月日信息</span>
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
<span style="color:#3333FF;">//注意这里不是HOUR,HOUR返回的是12制的时间格式</span>
hours = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
second = c.get(Calendar.SECOND);
<span style="color:#3333FF;">//新建时间选择器</span>
TimePickerDialog tpd = new TimePickerDialog(AddActivity.this,
new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view,
int hourOfDay, int minute) {
String[] time = {
year + "-" + month + "-" + day, "" };
try {
<span style="color:#3333FF;">//分割时间和日期</span>
time = etTime.getText().toString().trim()
.split(" ");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String ho = "", mi = "";
//设置小时
if (hourOfDay < 10) {
ho = "0" + hourOfDay;
} else {
ho = hourOfDay + "";
}
//设置分钟
if (minute < 10) {
mi = "0" + minute;
} else {
mi = minute + "";
}
//将设置的结果保存到etTime中
etTime.setText(time[0] + " " + ho + ":" + mi);
}
}, hours, minute, true);
tpd.setTitle("设置时间");
//显示时间控件
tpd.show();
}
});
// <span style="color:#3333FF;">//保存按钮监听器</span>
btnCommit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder adb = new Builder(AddActivity.this);
//设置标题和信息
adb.setTitle("保存");
adb.setMessage("确定要保存吗?");
//设置按钮功能
adb.setPositiveButton("保存",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
//保存备忘录信息
saveNote();
}
});
adb.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
Toast.makeText(AddActivity.this, "不保存",
Toast.LENGTH_SHORT).show();
}
});
//显示对话框
adb.show();
}
});
<span style="color:#3333FF;">//设置取消按钮监听器</span>
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder adb = new Builder(AddActivity.this);
//设置标题和消息
adb.setTitle("提示");
adb.setMessage("确定不保存吗?");
//设置按键监听器
adb.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
//进入主界面
Intent intent = new Intent();
intent.setClass(AddActivity.this,
MainActivity.class);
startActivity(intent);
}
});
adb.setNegativeButton("取消", null);
//显示对话框
adb.show();
}
});
}
<span style="color:#3333FF;">// //新建菜单选项</span>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, "关于");
menu.add(0, 2, 2, "设置闹铃");
menu.add(0, 3, 3, "退出");
return super.onCreateOptionsMenu(menu);
}
<span style="color:#3333FF;">//为菜单选项绑定监听器</span>
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
//关于
case 1:
AlertDialog.Builder adb = new Builder(AddActivity.this);
adb.setTitle("关于");
adb.setMessage("备忘录V1.0");
adb.setPositiveButton("确定", null);
adb.show();
break;
//设置闹铃
case 2:
Intent intent = new Intent();
intent.setClass(AddActivity.this, SetAlarm.class);
startActivity(intent);
break;
//退出
case 3:
AlertDialog.Builder adb2 = new Builder(AddActivity.this);
adb2.setTitle("消息");
adb2.setMessage("真的要退出吗?");
adb2.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//关闭列表中的所有Activity
am.exitAllProgress();
}
});
adb2.setNegativeButton("取消", null);
//显示对话框
adb2.show();
break;
default:
break;
}
return super.onMenuItemSelected(featureId, item);
}
<span style="color:#3333FF;">//按键判断</span>
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//当按键是返回键时
if (keyCode == KeyEvent.KEYCODE_BACK) {
AlertDialog.Builder adb = new Builder(AddActivity.this);
adb.setTitle("消息");
adb.setMessage("是否要保存?");
adb.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//保存备忘录
saveNote();
}
});
adb.setNegativeButton("不保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent2 = new Intent();
intent2.setClass(AddActivity.this, MainActivity.class);
//回到主页面
startActivity(intent2);
}
});
//显示对话框
adb.show();
}
return super.onKeyDown(keyCode, event);
}
<span style="color:#3333FF;"> //保存备忘录</span>
public void saveNote() {
//取得输入的内容
String name = etName.getText().toString().trim();
String content = etMain.getText().toString().trim();
String time = etTime.getText().toString().trim();
//内容和标题都不能为空
if ("".equals(name) || "".equals(content)) {
Toast.makeText(this, "名称和内容都不能为空", Toast.LENGTH_SHORT)
.show();
} else {
if(EDIT)
{
am.saveNote(sdb, name, content, noteId, time);
Toast.makeText(this, "更新成功", Toast.LENGTH_SHORT)
.show();
}
else
{
am.addNote(sdb, name, content, time);
Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT)
.show();
}
//分割日期和时间
String[] t = etTime.getText().toString().trim().split(" ");
//分割日期
String[] t1 = t[0].split("-");
//分割时间
String[] t2 = t[1].split(":");
//实例化日历
Calendar c2 = Calendar.getInstance();
//设置日历为闹钟的时间
c2.set(Integer.parseInt(t1[0]), Integer.parseInt(t1[1])-1,
Integer.parseInt(t1[2]), Integer.parseInt(t2[0]),
Integer.parseInt(t2[1]));
c=Calendar.getInstance();
//闹钟的时间应至少比现在多10s
if (c.getTimeInMillis() + 1000 * 10 <= c2.getTimeInMillis()) {
String messageContent;
//当内容字数大于20个字时,切掉一部分以‘...’代替,并存储在messageContent中
if (content.length() > 20) {
messageContent = content.substring(0, 18) + "...";
} else {
messageContent = content;
}
Intent intent = new Intent();
intent.setClass(this, AlarmNote.class);
//传递标题和内容信息
intent.putExtra("messageTitle", name);
intent.putExtra("messageContent", messageContent);
pi = PendingIntent.getBroadcast(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
//获得闹钟服务
alm = (AlarmManager) getSystemService(ALARM_SERVICE);
//设置闹钟
alm.set(AlarmManager.RTC_WAKEUP, c2.getTimeInMillis(), pi);
}
Intent intent2 = new Intent();
intent2.setClass(this, MainActivity.class);
//回到主目录
startActivity(intent2);
AddActivity.this.finish();
}
}
@Override
public void onDestroy()
{
super.onDestroy();
//关闭数据库连接
sdb.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: