文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

android如何实现记事本app

2023-05-30 16:58

关注

这篇文章将为大家详细讲解有关android如何实现记事本app,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

自己写的一个简单的记事本app,效果如下:

android如何实现记事本app

一、首先是第一个界面的编写,最上面是一个TextView,中间是一个Linearlayout中嵌套一个listview布局,最下面是一个button。下面附上第一个页面的简单布局xml文件。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:background="@android:color/darker_gray"  android:orientation="vertical" >  <TextView  android:layout_height="wrap_content"  android:layout_width="fill_parent"  android:text="记事本列表"  android:textSize="20sp"  android:paddingTop="10dp"  android:paddingBottom="5dp"  android:background="#039DCF"  android:gravity="center"/>   <LinearLayout  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:layout_weight="1" >   <ListView   android:id="@+id/listview"   android:layout_margin="5dp"   android:background="#81966F"   android:layout_width="match_parent"   android:layout_height="wrap_content" >  </ListView>  </LinearLayout>   <Button  android:id="@+id/btn_editnote"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:background="@drawable/btn_selctor"  android:layout_gravity="center"  android:layout_marginBottom="10dp"  android:text="添加备忘录"  android:textSize="20sp" />  </LinearLayout>

 至于button的样式btn_selector就是自己定义的button样式。

二、其次就是设置ListView中数据显示的xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical" >   <TextView  android:id="@+id/tv_content"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_marginLeft="10dp"  android:singleLine="true"  android:text="Large Text"  android:textAppearance="?android:attr/textAppearanceLarge" />   <TextView  android:id="@+id/tv_date"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_marginLeft="10dp"  android:text="TextView" />  </LinearLayout>

三、编写第二个界面样式,第二个界面是最上面一个linearlayout,里面包含两个button和一个TextView。代码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:background="#FFAE99"  android:orientation="vertical" >   <LinearLayout  android:layout_width="match_parent"  android:layout_height="wrap_content" >   <Button   android:id="@+id/btn_cancel"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/btn_selctor"   android:text="取消" />   <LinearLayout   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_gravity="center"   android:layout_weight="1"   android:orientation="vertical" >    <TextView   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:gravity="center"   android:text="编辑备忘录"   android:textSize="20sp" />    <TextView   android:id="@+id/tv_date"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:gravity="center"   android:text="" />  </LinearLayout>   <Button   android:id="@+id/btn_ok"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/btn_selctor"   android:text="保存" />  </LinearLayout>   <ScrollView  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:scrollbars="vertical" >   <LinearLayout   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:layout_marginLeft="2dp"   android:orientation="vertical" >    <EditText   android:id="@+id/et_content"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:background="#FFAE99"   android:textSize="20sp" />  </LinearLayout>  </ScrollView>  </LinearLayout>

四、将日志的数据保存在数据库中,使用sqlite来创建数据库,数据库中有三个属性,"_id"、"content"、"date"这三个属性,创建一个NoteDB来创建数据库。

package com.example.datenote;  import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log;  public class NotesDB extends SQLiteOpenHelper {   public static final String TABLE_NAME_NOTES = "note";  public static final String COLUMN_NAME_ID = "_id";  public static final String COLUMN_NAME_NOTE_CONTENT = "content";  public static final String COLUMN_NAME_NOTE_DATE = "date";   public NotesDB(Context context) {  super(context, "note", null, 1);  // TODO Auto-generated constructor stub  }   @Override  public void onCreate(SQLiteDatabase db) {  String sql = "CREATE TABLE " + TABLE_NAME_NOTES + "(" + COLUMN_NAME_ID   + " INTEGER PRIMARY KEY AUTOINCREMENT,"   + COLUMN_NAME_NOTE_CONTENT + " TEXT NOT NULL DEFAULT\"\","   + COLUMN_NAME_NOTE_DATE + " TEXT NOT NULL DEFAULT\"\"" + ")";  Log.d("SQL", sql);  db.execSQL(sql); // String sql1="insert into "+TABLE_NAME_NOTES+"values("+"1,"+"'写作业',"+"'晚上要写作业的干活'"+")"; // Log.d("SQL1", sql1); // db.execSQL(sql1); // ContentValues values=new ContentValues(); // values.put("id",1); // values.put("content","写作业"); // values.put("date", "2013-1-2"); // db.insert("note", null, values);   }   @Override  public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {  // TODO Auto-generated method stub   }  }

五、实现点击添加事件的跳转,在第一个页面中点击添加备忘录后会跳转到第二个界面,设置点击事件,由一个activity跳转到另外一个activity,我使用的是intent方式。另外,在ListView中点击每个已记录下来的日志也会跳转到第二个界面,只是显示的不是空白的EditText,而是包含日志的EditText。MainActivity如下:

package com.example.datenote;  import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;  import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast;  public class MainActivity extends Activity implements OnScrollListener,  OnItemClickListener, OnItemLongClickListener {   private Context mContext;  private ListView listview;  private SimpleAdapter simp_adapter;  private List<Map<String, Object>> dataList;  private Button addNote;  private TextView tv_content;  private NotesDB DB;  private SQLiteDatabase dbread;   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  requestWindowFeature(Window.FEATURE_NO_TITLE);  setContentView(R.layout.activity_main);  tv_content = (TextView) findViewById(R.id.tv_content);  listview = (ListView) findViewById(R.id.listview);  dataList = new ArrayList<Map<String, Object>>();   addNote = (Button) findViewById(R.id.btn_editnote);  mContext = this;  addNote.setOnClickListener(new OnClickListener() {    @Override   public void onClick(View arg0) {   noteEdit.ENTER_STATE = 0;   Intent intent = new Intent(mContext, noteEdit.class);   Bundle bundle = new Bundle();   bundle.putString("info", "");   intent.putExtras(bundle);   startActivityForResult(intent, 1);   }  });  DB = new NotesDB(this);  dbread = DB.getReadableDatabase();  // 清空数据库中表的内容  //dbread.execSQL("delete from note");  RefreshNotesList();   listview.setOnItemClickListener(this);  listview.setOnItemLongClickListener(this);  listview.setOnScrollListener(this);  }   public void RefreshNotesList() {   int size = dataList.size();  if (size > 0) {   dataList.removeAll(dataList);   simp_adapter.notifyDataSetChanged();   listview.setAdapter(simp_adapter);  }  simp_adapter = new SimpleAdapter(this, getData(), R.layout.item,   new String[] { "tv_content", "tv_date" }, new int[] {    R.id.tv_content, R.id.tv_date });  listview.setAdapter(simp_adapter);  }   private List<Map<String, Object>> getData() {   Cursor cursor = dbread.query("note", null, "content!=\"\"", null, null,   null, null);   while (cursor.moveToNext()) {   String name = cursor.getString(cursor.getColumnIndex("content"));   String date = cursor.getString(cursor.getColumnIndex("date"));   Map<String, Object> map = new HashMap<String, Object>();   map.put("tv_content", name);   map.put("tv_date", date);   dataList.add(map);  }  cursor.close();  return dataList;   }   @Override  public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {  // TODO Auto-generated method stub   }   // 滑动listview监听事件  @Override  public void onScrollStateChanged(AbsListView arg0, int arg1) {  // TODO Auto-generated method stub  switch (arg1) {  case SCROLL_STATE_FLING:   Log.i("main", "用户在手指离开屏幕之前,由于用力的滑了一下,视图能依靠惯性继续滑动");  case SCROLL_STATE_IDLE:   Log.i("main", "视图已经停止滑动");  case SCROLL_STATE_TOUCH_SCROLL:   Log.i("main", "手指没有离开屏幕,试图正在滑动");  }  }   // 点击listview中某一项的监听事件  @Override  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {  noteEdit.ENTER_STATE = 1;  // Log.d("arg2", arg2 + "");  // TextView  // content=(TextView)listview.getChildAt(arg2).findViewById(R.id.tv_content);  // String content1=content.toString();  String content = listview.getItemAtPosition(arg2) + "";  String content1 = content.substring(content.indexOf("=") + 1,   content.indexOf(","));  Log.d("CONTENT", content1);  Cursor c = dbread.query("note", null,   "content=" + "'" + content1 + "'", null, null, null, null);  while (c.moveToNext()) {   String No = c.getString(c.getColumnIndex("_id"));   Log.d("TEXT", No);   // Intent intent = new Intent(mContext, noteEdit.class);   // intent.putExtra("data", text);   // setResult(4, intent);   // // intent.putExtra("data",text);   // startActivityForResult(intent, 3);   Intent myIntent = new Intent();   Bundle bundle = new Bundle();   bundle.putString("info", content1);   noteEdit.id = Integer.parseInt(No);   myIntent.putExtras(bundle);   myIntent.setClass(MainActivity.this, noteEdit.class);   startActivityForResult(myIntent, 1);  }   }   @Override  // 接受上一个页面返回的数据,并刷新页面  protected void onActivityResult(int requestCode, int resultCode, Intent data) {  // TODO Auto-generated method stub  super.onActivityResult(requestCode, resultCode, data);  if (requestCode == 1 && resultCode == 2) {   RefreshNotesList();  }  }   // 点击listview中某一项长时间的点击事件  @Override  public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,   long arg3) {  final int n=arg2;  Builder builder = new AlertDialog.Builder(this);  builder.setTitle("删除该日志");  builder.setMessage("确认删除吗?");  builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {   @Override   public void onClick(DialogInterface dialog, int which) {   String content = listview.getItemAtPosition(n) + "";   String content1 = content.substring(content.indexOf("=") + 1,    content.indexOf(","));   Cursor c = dbread.query("note", null, "content=" + "'"    + content1 + "'", null, null, null, null);   while (c.moveToNext()) {    String id = c.getString(c.getColumnIndex("_id"));    String sql_del = "update note set content='' where _id="     + id;    dbread.execSQL(sql_del);    RefreshNotesList();   }   }  });  builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {   @Override   public void onClick(DialogInterface dialog, int which) {   }  });  builder.create();  builder.show();  return true;  }  }

六、编写第二个跳转后界面的Activity,如下:

package com.example.datenote;  import java.text.SimpleDateFormat; import java.util.Date;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;  public class noteEdit extends Activity {  private TextView tv_date;  private EditText et_content;  private Button btn_ok;  private Button btn_cancel;  private NotesDB DB;  private SQLiteDatabase dbread;  public static int ENTER_STATE = 0;  public static String last_content;  public static int id;   @Override  protected void onCreate(Bundle savedInstanceState) {  // TODO Auto-generated method stub  super.onCreate(savedInstanceState);  // 设置无  requestWindowFeature(Window.FEATURE_NO_TITLE);  setContentView(R.layout.edit);   tv_date = (TextView) findViewById(R.id.tv_date);  Date date = new Date();  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");  String dateString = sdf.format(date);  tv_date.setText(dateString);   et_content = (EditText) findViewById(R.id.et_content);  // 设置软键盘自动弹出  getWindow().setSoftInputMode(   WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);   DB = new NotesDB(this);  dbread = DB.getReadableDatabase();   Bundle myBundle = this.getIntent().getExtras();  last_content = myBundle.getString("info");  Log.d("LAST_CONTENT", last_content);  et_content.setText(last_content);  // 确认按钮的点击事件  btn_ok = (Button) findViewById(R.id.btn_ok);  btn_ok.setOnClickListener(new OnClickListener() {   public void onClick(View arg0) {   // 获取日志内容   String content = et_content.getText().toString();   Log.d("LOG1", content);   // 获取写日志时间   Date date = new Date();   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   String dateNum = sdf.format(date);   String sql;   String sql_count = "SELECT COUNT(*) FROM note";   SQLiteStatement statement = dbread.compileStatement(sql_count);   long count = statement.simpleQueryForLong();   Log.d("COUNT", count + "");   Log.d("ENTER_STATE", ENTER_STATE + "");   // 添加一个新的日志   if (ENTER_STATE == 0) {    if (!content.equals("")) {    sql = "insert into " + NotesDB.TABLE_NAME_NOTES     + " values(" + count + "," + "'" + content     + "'" + "," + "'" + dateNum + "')";    Log.d("LOG", sql);    dbread.execSQL(sql);    }   }   // 查看并修改一个已有的日志   else {    Log.d("执行命令", "执行了该函数");    String updatesql = "update note set content='"     + content + "' where _id=" + id;    dbread.execSQL(updatesql);    // et_content.setText(last_content);   }   Intent data = new Intent();   setResult(2, data);   finish();   }  });  btn_cancel = (Button) findViewById(R.id.btn_cancel);  btn_cancel.setOnClickListener(new OnClickListener() {   public void onClick(View arg0) {   finish();   }  });  }   @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {  // TODO Auto-generated method stub  super.onActivityResult(requestCode, resultCode, data);  // if (requestCode == 3 && resultCode == 4) {  // last_content=data.getStringExtra("data");  // Log.d("LAST_STRAING", last_content+"gvg");  // }  } }

七、其中,对ListView添加OnItemLongclicklistener,长点击之后会弹出一个dialog对话框提醒要不要删除该日志文件。

public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,   long arg3) {  final int n=arg2;  Builder builder = new AlertDialog.Builder(this);  builder.setTitle("删除该日志");  builder.setMessage("确认删除吗?");  builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {   @Override   public void onClick(DialogInterface dialog, int which) {   String content = listview.getItemAtPosition(n) + "";   String content1 = content.substring(content.indexOf("=") + 1,    content.indexOf(","));   Cursor c = dbread.query("note", null, "content=" + "'"    + content1 + "'", null, null, null, null);   while (c.moveToNext()) {    String id = c.getString(c.getColumnIndex("_id"));    String sql_del = "update note set content='' where _id="     + id;    dbread.execSQL(sql_del);    RefreshNotesList();   }   }  });  builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {   @Override   public void onClick(DialogInterface dialog, int which) {   }  });  builder.create();  builder.show();  return true;  }

注意最后将返回值设为true,否则会和OnItemClickListener产生冲突。

附上长点击删除的效果。

android如何实现记事本app

关于“android如何实现记事本app”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯