android实现记事本app

自己写的一个简单的记事本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产生冲突。

附上长点击删除的效果。

在结尾附上自己的代码,自己辛苦写的,收取一个资源不多吧,感兴趣的可以下载看看。

下载链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现简易记事本

    本文实例为大家分享了Android实现简易记事本的具体代码,供大家参考,具体内容如下 此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下: 具体操作就是长按可以删除操作,点击可以进行修改,点击添加笔记按钮可以添加一个笔记. 首先我们需要三个界面样式一个是我们的进入程序时的第一个界面,然后第一个界面里面有一个ListView,这个ListView需要一个xml来描述里面的各个元素,这也是第二个.还有一

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • Android记事本项目开发

    写了一个Android记事本小程序,现在记录一下. 考虑到是记事本小程序,记录的内容只有文字,而且内容不会太长,所以选择使用SQLite数据库,数据存放在用户的手机上. 牵涉到数据库,那自然是一个实体.先设计实体数据表:DBHelper.java package com.ikok.notepad.DBUtil; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android

  • Android实现记事本功能(26)

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 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.

  • Android中实现记事本动态添加行效果

    本文主要给大家介绍了关于Android实现记事本动态添加行的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 先看效果图: 这是昨天在群里面有人在问这个问题,在这里顺便记录一下,这个效果我们可以自定义EditText,实现起来也不难 看详细步骤: 第一:初始化Paint,这里肯定要用到画笔的 this.paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(getResources().getCo

  • Android实现记事本功能

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 实现功能 1.文本数据的存储 2.图片数据存储 3.视频数据存储 4.自定义的Adapter 5.SQlite的创建 6.数据listview列表的显示 demo地址 记事本 界面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.

  • Android+SQLite数据库实现的生词记事本功能实例

    本文实例讲述了Android+SQLite数据库实现的生词记事本功能.分享给大家供大家参考,具体如下: 主activity命名为 Dict: 代码如下: package example.com.myapplication; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase;

  • Android毕业设计记事本APP

    目录 前言 功能概述 系统设计 启动界面 引导界面 更改口令界面 主界面和编辑界面 1 建表 2 添加便签 3 在主界面显示便签 4 再次编辑该便签 5 主界面和编辑界面布局 前言 该设计是一款轻量级的便签工具,使用Android Studio开发,风格简练,可实现便签的添加.删除.修改.查看功能.为保证一定的安全性,设置了进入口令,类似于应用锁,用户可以修改口令.主要使用的技术有共享参数.数据库.SwipeRefreshLayout控件. 功能概述 用户打开应用后,启动页会判断用户是否第一次打

  • android实现记事本app

    自己写的一个简单的记事本app,效果如下: 一.首先是第一个界面的编写,最上面是一个TextView,中间是一个Linearlayout中嵌套一个listview布局,最下面是一个button.下面附上第一个页面的简单布局xml文件. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" androi

  • Android 破解视频App去除广告功能详解及解决办法总结

    Android 破解视频App去除广告功能 作为一个屌丝程序猿也有追剧的时候,但是当打开视频app的时候,那些超长的广告已经让我这个屌丝无法忍受了,作为一个程序猿看视频还要出现广告那就是打我脸,但是我有没有钱买会员,只能靠着毕生技能去耍耍去除广告了.下面就来介绍一下如何进行视频广告的去除. 一.视频广告播放原理 首先我们需要了解的一个基本知识点那就是广告其实也是一段视频,那么他肯定有请求地址和播放地址.那么我们的思路就来了,如果能够得到这些地址的话,我们就可以去除广告了,为什么呢?因为我们知道所

  • Android桌面组件App Widget用法入门教程

    本文实例讲述了Android桌面组件App Widget用法.分享给大家供大家参考.具体如下: Android开发应用除了程序应用,还有App Widget应用.好多人会开发程序应用而不会开发App Widget应用.本帖子就是帮助大家学习如何开发App Widget应用的. 先简单说说App Widget的原理.App Widget是在桌面上的一块显示信息的东西,通过单击App Widget跳转到程序入口类.而系统自带的程序,典型的App Widget是music,这个Android内置的音乐

  • Android桌面插件App Widget用法分析

    本文实例讲述了Android桌面插件App Widget用法.分享给大家供大家参考,具体如下: 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widget宿主.下面的截屏显示了一个音乐App Widget. appwidget 这篇文章描述了如何使用Ap

  • Android笔记之:App应用之发布各广告平台版本的详解

    Android的广告平台是很多的,各市场对各平台的接受程度是不一样的,Android的开发者如果想集成广告基本要考虑下面两个问题:(1)集成什么广告,会赚钱?(2)集成什么广告,不会被市场拒绝?最终的结果往往是折中的.第一个问题是广告平台的判断问题,我没有发言权去评论,本文主要是针对第二个问题展开.解决方案就是打包应用的不同广告平台版本,本文接下来逐一展开相关话题. 1. 基础本文其实是针对<Android笔记之:App模块化及工程扩展的应用>和<Android笔记之:App自动化之使用

  • Android开发之App widget用法实例分析

    本文实例讲述了Android开发之App widget用法.分享给大家供大家参考,具体如下: 放在桌面上的控件叫做--App widget,例如可以在桌面上添加按钮.图片等等控件,例如桌面播放器的控制面板 AppWidgetProviderInfo对象,它为App Widget提供元数据,包括布局.更新频率等等数据,这个对象不是由我们自己生成的,而是由android自己定义配置完成,这个对象被定义在XML文件中 1.定义AppWidgetProviderInfo对象,在res/xml文件夹当中定

  • Android如何实现APP自动更新

    先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞可是一点都不夸张,比如小米,魅族,百度,360,机锋,应用宝等等,当我们想上线一款新版本APP时,先不说渠道打包的麻烦,单纯指上传APP到各大应用市场的工作量就已经很大了,好不容易我们把APP都上传完了,突然发现一个会导致应用闪退的小Bug,这时那个崩溃啊,明明不是很大的改动,难道我们还要再去重新去把各大应用市场的版本再上传更新一次?相信我,运营人员肯定会弄死你的!! 有问题,自然就会有解决问题的方案,因此我们就会想到如果在APP里

  • Android桌面组件App Widget完整案例

    本文实例讲述了Android桌面组件App Widget用法.分享给大家供大家参考.具体如下: 这里模拟一个案例:把AppWidget添加到桌面后,点击AppWidget后AppWidget文本会轮回改变 main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a

随机推荐