这篇文章主要为大家详细介绍了 Android 实现记事本功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
MainActivity.java 代码:
- package siso.smartnotef.activity;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ListAdapter;
- import android.widget.ListView;
- import android.widget.TextView;
- import java.util.ArrayList;
- import java.util.List;
- import siso.smartnotef.R;
- import siso.smartnotef.adapter.NotepadeAdapter;
- import siso.smartnotef.db.DataHelper;
- import siso.smartnotef.global.GlobalParams;
- import siso.smartnotef.model.NotepadBean;
- import siso.smartnotef.model.NotepadWithDataBean;
- import siso.smartnotef.service.MainService;
- public class MainActivity extends AppCompatActivity implements View.OnClickListener, NotepadeAdapter.ClickFunction {
- private TextView tv_add;
- private ListView lv_contents;
- private List<NotepadWithDataBean> notepadWithDataBeanList;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Intent intent1 = new Intent(MainActivity.this, MainService.class);
- startService(intent1);
- findViews();
- setListeners();
- initView();
- }
- private void findViews() {
- tv_add = (TextView) findViewById(R.id.tv_add);
- lv_contents = (ListView) findViewById(R.id.lv_content);
- }
- private void setListeners() {
- tv_add.setOnClickListener(this);
- }
- private void initView() {
- DataHelper helper = new DataHelper(MainActivity.this);
- notepadWithDataBeanList = new ArrayList<NotepadWithDataBean>();
- List<NotepadBean> notepadBeanList = helper.getNotepadList();
- for (int i = 0; i < notepadBeanList.size(); i++) {
- if (0 == notepadWithDataBeanList.size()) {
- NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean();
- notepadWithDataBean.setData(notepadBeanList.get(0).getDate());
- notepadWithDataBeanList.add(notepadWithDataBean);
- }
- boolean flag = true;
- for (int j = 0; j < notepadWithDataBeanList.size(); j++) {
- int date = notepadWithDataBeanList.get(j).getData();
- if (date == notepadBeanList.get(i).getDate()) {
- notepadWithDataBeanList.get(j).getNotepadBeenList().add(notepadBeanList.get(i));
- flag = false;
- break;
- }
- }
- if (flag) {
- NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean();
- notepadWithDataBean.setData(notepadBeanList.get(i).getDate());
- notepadWithDataBeanList.add(notepadWithDataBean);
- notepadWithDataBeanList.get(notepadWithDataBeanList.size() - 1).getNotepadBeenList().add(notepadBeanList.get(i));
- }
- }
- NotepadeAdapter adapter = new NotepadeAdapter(MainActivity.this, notepadWithDataBeanList, this);
- lv_contents.setAdapter(adapter);
- // setListViewHeightBasedOnChildren(lv_contents);
- }
- public void setListViewHeightBasedOnChildren(ListView listView) {
- if (listView == null) return;
- ListAdapter listAdapter = listView.getAdapter();
- if (listAdapter == null) {
- // pre-condition
- return;
- }
- int totalHeight = 0;
- for (int i = 0; i < listAdapter.getCount(); i++) {
- View listItem = listAdapter.getView(i, null, listView);
- listItem.measure(0, 0);
- totalHeight += listItem.getMeasuredHeight();
- }
- ViewGroup.LayoutParams params = listView.getLayoutParams();
- params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
- listView.setLayoutParams(params);
- }
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.tv_add:
- Intent intent = new Intent();
- Bundle bundle = new Bundle();
- bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_ADD);
- intent.putExtras(bundle);
- intent.setClass(MainActivity.this, AddContentActivity.class);
- startActivityForResult(intent, GlobalParams.ADD_REQUEST);
- break;
- }
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- switch (requestCode) {
- case GlobalParams.ADD_REQUEST:
- if (GlobalParams.ADD_RESULT_OK == resultCode) {
- initView();
- }
- break;
- }
- }
- @Override
- public void clickItem(int position, int itemPosition) {
- Bundle bundle = new Bundle();
- bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_EDIT);
- bundle.putSerializable(GlobalParams.BEAN_KEY, notepadWithDataBeanList.get(position));
- bundle.putInt(GlobalParams.ITEM_POSITION_KEY, itemPosition);
- Intent intent = new Intent(this, AddContentActivity.class);
- intent.putExtras(bundle);
- startActivityForResult(intent, GlobalParams.ADD_REQUEST);
- }
- @Override
- public void longClickItem(final int position, final int itemPostion) {
- AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
- builder.setMessage("确认删除吗?");
- builder.setTitle("提示");
- builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- DataHelper helper = new DataHelper(MainActivity.this);
- helper.deleteNotepad(notepadWithDataBeanList.get(position).getNotepadBeenList().get(itemPostion).getId());
- initView();
- }
- });
- builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- }
- });
- builder.create().show();
- }
- }
AddContentActivity.java 代码:
- package siso.smartnotef.activity;
- import android.app.DatePickerDialog;
- import android.app.TimePickerDialog;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.widget.DatePicker;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.widget.TimePicker;
- import android.widget.Toast;
- import java.util.Calendar;
- import siso.smartnotef.R;
- import siso.smartnotef.db.DataHelper;
- import siso.smartnotef.global.GlobalParams;
- import siso.smartnotef.model.NotepadBean;
- import siso.smartnotef.model.NotepadWithDataBean;
- public class AddContentActivity extends AppCompatActivity implements View.OnClickListener {
- private TextView tv_save;
- private TextView tv_date;
- private TextView tv_time;
- private TextView tv_cancel;
- private EditText et_content;
- private String time = "";
- private String date = "";
- private Bundle bundle;
- private int type;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_add_content);
- bundle=getIntent().getExtras();
- type=bundle.getInt(GlobalParams.TYPE_KEY);
- findViews();
- setListeners();
- initDate();
- }
- private void findViews() {
- et_content=(EditText)findViewById(R.id.et_content);
- tv_save = (TextView) findViewById(R.id.tv_save);
- tv_date = (TextView) findViewById(R.id.tv_date);
- tv_time = (TextView) findViewById(R.id.tv_time);
- tv_cancel=(TextView)findViewById(R.id.tv_cancel);
- }
- private void setListeners() {
- tv_save.setOnClickListener(this);
- tv_date.setOnClickListener(this);
- tv_time.setOnClickListener(this);
- tv_cancel.setOnClickListener(this);
- }
- private void initDate() {
- Calendar c = Calendar.getInstance();
- int year=c.get(Calendar.YEAR);
- int month=c.get(Calendar.MONTH);
- int day=c.get(Calendar.DAY_OF_MONTH);
- date=getDate(year,month,day);
- if(type==GlobalParams.TYPE_EDIT){
- NotepadWithDataBean notepadWithDataBean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY));
- et_content.setText(notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getContent());
- date=notepadWithDataBean.getData()+"";
- tv_date.setText(date);
- time=notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getTime();
- tv_time.setText(time);
- }
- }
- private String getDate(int year,int month,int day){
- String date="";
- date+=year;
- if(month<9){
- date=date+"0"+(month+1);
- }else{
- date+=(month+1);
- }
- if(day<10){
- date=date+"0"+day;
- }else {
- date+=day;
- }
- return date;
- }
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.tv_save:
- if(type==GlobalParams.TYPE_EDIT){
- update();
- }else {
- save();
- }
- break;
- case R.id.tv_date:
- selectDateDialog();
- break;
- case R.id.tv_time:
- selectTimeDialog();
- break;
- case R.id.tv_cancel:
- finish();
- break;
- }
- }
- private void selectDateDialog(){
- Calendar c = Calendar.getInstance();
- int year=c.get(Calendar.YEAR);
- final int month=c.get(Calendar.MONTH)+1;
- int day=c.get(Calendar.DAY_OF_MONTH);
- new DatePickerDialog(AddContentActivity.this, new DatePickerDialog.OnDateSetListener() {
- @Override
- public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
- date=getDate(year,monthOfYear,dayOfMonth);
- tv_date.setText(date);
- }
- },year,month,day).show();
- }
- private void selectTimeDialog() {
- Calendar c = Calendar.getInstance();
- int mHour = c.get(Calendar.HOUR_OF_DAY);
- int mMinute = c.get(Calendar.MINUTE);
- new TimePickerDialog(AddContentActivity.this,
- new TimePickerDialog.OnTimeSetListener() {
- @Override
- public void onTimeSet(TimePicker view,
- int hourOfDay, int minute) {
- time=formatTime(hourOfDay,minute);
- tv_time.setText(time);
- }
- }, mHour, mMinute, true).show();
- }
- private String formatTime(int hour,int minute){
- String time=hour+":";
- if(minute<10){
- time=time+"0"+minute;
- }else{
- time+=minute;
- }
- return time;
- }
- private void save() {
- String content = et_content.getText().toString();
- if ("".equals(content)) {
- Toast.makeText(AddContentActivity.this, "请输入内容", Toast.LENGTH_SHORT).show();
- return;
- }
- if ("".equals(time)) {
- Toast.makeText(AddContentActivity.this, "请选择时间", Toast.LENGTH_SHORT).show();
- return;
- }
- NotepadBean notepadBean = new NotepadBean();
- notepadBean.setContent(content);
- notepadBean.setDate(Integer.parseInt(date));
- notepadBean.setTime(time);
- DataHelper helper = new DataHelper(AddContentActivity.this);
- helper.insertData(notepadBean);
- setResult(GlobalParams.ADD_RESULT_OK);
- finish();
- }
- private void update(){
- DataHelper helper=new DataHelper(AddContentActivity.this);
- NotepadWithDataBean bean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY));
- int itemPosition=bundle.getInt(GlobalParams.ITEM_POSITION_KEY);
- helper.update(bean.getNotepadBeenList().get(itemPosition).getId(),date,time,et_content.getText().toString());
- setResult(GlobalParams.ADD_RESULT_OK);
- finish();
- }
- }
RemindActivity.java 代码:
- package siso.smartnotef.activity;
- import android.media.MediaPlayer;
- import android.media.RingtoneManager;
- import android.net.Uri;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- import java.io.IOException;
- import siso.smartnotef.R;
- import siso.smartnotef.global.GlobalParams;
- public class RemindActivity extends AppCompatActivity {
- private TextView tv_content;
- private Button bt_confirm;
- private MediaPlayer mMediaPlayer;;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_remind);
- findViews();
- setListeners();
- Bundle bundle=getIntent().getExtras();
- String content=bundle.getString(GlobalParams.CONTENT_KEY);
- tv_content.setText(content);
- playSound();
- }
- private void findViews(){
- tv_content=(TextView)findViewById(R.id.tv_content);
- bt_confirm=(Button) findViewById(R.id.bt_confirm);
- }
- private void setListeners(){
- bt_confirm.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if(null!=mMediaPlayer){
- mMediaPlayer.stop();
- finish();
- }
- }
- });
- }
- public void playSound() {
- new Thread(new Runnable() {
- @Override
- public void run() {
- mMediaPlayer = MediaPlayer.create(RemindActivity.this, getSystemDefultRingtoneUri());
- mMediaPlayer.setLooping(true);//设置循环
- try {
- mMediaPlayer.prepare();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- mMediaPlayer.start();
- }
- }).start();
- }
- //获取系统默认铃声的Uri
- private Uri getSystemDefultRingtoneUri() {
- return RingtoneManager.getActualDefaultRingtoneUri(RemindActivity.this,
- RingtoneManager.TYPE_RINGTONE);
- }
- }
activity_main.xml 内容:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/activity_main"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context="siso.smartnotef.activity.MainActivity">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="50dp"
- android:background="@color/title_color"
- android:paddingLeft="10dp"
- android:paddingRight="10dp">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/white"
- android:textSize="18sp"
- android:layout_centerInParent="true"
- android:text="智能记事本"/>
- <TextView
- android:id="@+id/tv_add"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/white"
- android:text="新增"
- android:layout_centerVertical="true"
- android:layout_alignParentRight="true"
- android:textSize="13sp"/>
- </RelativeLayout>
- <ListView
- android:id="@+id/lv_content"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"></ListView>
- </LinearLayout>
activity_add_content.xml 内容:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/activity_add_content"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context="siso.smartnotef.activity.AddContentActivity">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="50dp"
- android:background="@color/title_color"
- android:paddingLeft="10dp"
- android:paddingRight="10dp">
- <TextView
- android:id="@+id/tv_cancel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="取消"
- android:textColor="@color/white"/>
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/white"
- android:textSize="18sp"
- android:layout_centerInParent="true"
- android:text="智能记事本"/>
- <TextView
- android:id="@+id/tv_save"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/white"
- android:text="保存"
- android:layout_centerVertical="true"
- android:layout_alignParentRight="true"
- />
- </RelativeLayout>
- <LinearLayout
- android:layout_marginTop="10dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_gravity="center_horizontal">
- <TextView
- android:id="@+id/tv_date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dp"
- android:text="今天"/>
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text=" -- "/>
- <TextView
- android:id="@+id/tv_time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dp"
- android:text="请选择时间"
- />
- </LinearLayout>
- <EditText
- android:id="@+id/et_content"
- android:layout_marginTop="10dp"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:inputType="textMultiLine"
- android:gravity="left|top"
- android:layout_margin="20dp"
- android:padding="10dp"
- android:hint="请输入内容"
- android:background="@drawable/edit_back"/>
- </LinearLayout>
activity_remind.xml 内容:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/white"
- android:orientation="vertical"
- tools:context="siso.smartnotef.activity.RemindActivity">
- <TextView
- android:id="@+id/tv_content"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal" />
- <Button
- android:id="@+id/bt_confirm"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:text="取消" />
- </LinearLayout>
AndroidManifest.xml 内容:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="siso.smartnotef">
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/Theme.AppCompat.Light.NoActionBar">
- <activity
- android:name=".activity.MainActivity"
- android:theme="@style/Theme.AppCompat.Light.NoActionBar">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name=".receiver.MainReceiver">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- </intent-filter>
- </receiver>
- <activity android:name=".activity.AddContentActivity" />
- <service
- android:name=".service.MainService"
- android:enabled="true"
- android:exported="true" />
- <activity android:name=".activity.RemindActivity"
- ></activity>
- </application>
- </manifest>
项目结构如图:
项目运行结果如图:
来源: http://www.phperz.com/article/17/0311/322238.html