当前位置:文档之家› android学习笔记

android学习笔记

android学习笔记
android学习笔记

一、A ndroid基础

(一)工程目录结构

src:存放java代码

gen:存放自动生成文件的. R.java 存放res文件夹下对应资源的id

project.properties:指定当前工程采用的开发工具包的版本

libs: 当前工程所依赖的jar包.

assets:放置一些程序所需要的媒体文件.

bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件.

res(resources):资源文件.

drawable: 存放程序所用的图片.

layout: 存放android的布局文件.

menu: 存放android的OptionsMenu菜单的布局.

values (应用程序所需要的数据. 会在R文件中生成id)

strings.xml 存放android字符串.

dimens.xml 存放屏幕适配所用到的尺寸.

style.xml 存放android下显示的样式.

values-sw600dp 7寸平板所对应的值

values-sw720dp-land 10寸平板所对应的值

values-v11 指定3.0版本以上的手机显示的样式.

values-v14 指定4.0版本以上的手机显示的样式.

AndroidManifest.xml: android应用程序的入口文件. 声明了android里边的组件. 和相关配置信息.

proguard-project.txt:加密当前程序所使用.

(二)生命周期

从Activity1跳转到Activity2

①onCreate1 → onStart1 → onResume1

②onPause1 → onCreate2 →onStart2 → onResume2 → onStop1

③onPause2 → onReStart1 → onStart1 → onResume1 → onStop1 →

onDestory2

(三)测试

冒烟测试:

adb shell monkey -p <程序的包名> -v <事件的数量>

android下单元测试:

在AndroidManifest.xml文件中配置一下信息:

在manifest节点下:

android:name="android.test.InstrumentationTestRunner"

android:targetPackage="com.itheima28.junittest" /> 在application节点下配置下面信息:

测试时, 定义一个类继承AndroidTestCase

(四)四种单击响应

1.内部类形式:将事件监听器类定义成当前类的内部类

2.外部类形式:将事件监听器类定义成一个外部类

3.Activity本身作为事件监听器类:让Activity本身实现监听器接口并实现处理方法

btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

}

});

4.匿名内部类形式:使用匿名内部类创建事件监听对象

public class MainActivity extends Activity implements

View.OnClickListener{

}

(五)五大布局Layout

1.LinearLayout 线性布局

android:orientation="horizontal" 排列方式

水平 horizontal 垂直 vertical

gravity 控制当前控件内容显示区域

layout_gravity 当前控件在父元素的位置

Layout_weightSum

Layout_weight 额外空间分配(权重)

android:visibility="invisible" 控制布局是否显示

显示 visible 不显示,但占空间 invisible 隐藏 gone

2.RelativeLayout 相对布局

android:layout_toRightOf 在指定控件的右边

android:layout_toLeftOf 在指定控件的左边

android:layout_above 在指定控件的上边

android:layout_below 在指定控件的下边

android:layout_alignBaseline 跟指定控件水平对齐

android:layout_alignLeft 跟指定控件左对齐

android:layout_alignRight 跟指定控件右对齐

android:layout_alignTop 跟指定控件顶部对齐

android:layout_alignBottom 跟指定控件底部对齐

android:layout_alignParentLeft 是否跟父布局左对齐

android:layout_alignParentTop 是否跟父布局顶部对齐

android:layout_alignParentRight 是否跟父布局右对齐

android:layout_alignParentBottom 是否跟父布局底部对齐

android:layout_centerVertical 在父布局中垂直居中

android:layout_centerHorizontal 在父布局中水平居中

android:layout_centerInParent 在父布局中居中

3.AbsoluteLayout 绝对布局

android:layout_x 指定控件在父布局的x轴坐标

android:layout_y 指定控件在父布局的y轴坐标

4.TableLayout 表格布局

android:shrinkColumns 收缩列

android:stretchColumns 拉伸列

android:collapseColumns 隐藏列

android:layout_column 指定列(作用在列的身上)

android:layout_span 合并列(作用在列的身上)

TableRow单元行里的单元格的宽度小于默认的宽度时就不起作用,其默认是

fill_parent,高度可以自定义大小

5.FrameLayout 帧布局

帧布局每次添加的控件都显示在最上面,最后显示在界面上的是最后添加的一个控件(六)……

二、笔记

(一)C amera 相机

权限

文件存储权限

android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

1.打开摄像头

用Camera.open()来获得一个camera对象的实例。

2.连接预览

用Camera.setPreviewDisplay()将camera连接到SurfaceView,准备实时预览。

3.开始预览

调用 Camera.startPreview()开始显示实时摄像画面。

4.开始录制视频

a.解锁Camera

Camera.unlock()

b.配置MediaRecorder

1.setCamera()

用当前Camera实例将摄像头用途设置为视频捕捉。

2.setAudioSource()

用MediaRecorder.AudioSource.CAMCORDER设置音频源

3.setVideoSource()

用MediaRecorder.VideoSource.CAMERA设置视频源。

4.设置视频输出格式和编码格式。

对于Android 2.2以上版本,使用MediaRecorder.setProfile方法,并

用CamcorderProfile.get()来获取一个profile实例。对于2.2以下版

本,必须设置视频输出格式和编码参数:

i.setOutputFormat()

设置输出格式, MediaRecorder.OutputFormat.MPEG_4 ii.setAudioEncoder()

设置声音编码类型,MediaRecorder.AudioEncoder.AMR_NB iii.setVideoEncoder()

设置视频编码类型,MediaRecorder.VideoEncoder.MPEG_4_SP

5.setOutputFile()

getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()设置输出文件

6.setPreviewDisplay()

c.准备MediaRecorder

调用MediaRecorder.prepare()设置配置

d.启动MediaRecorder

调用MediaRecorder.start()开始录制视频。

5.停止录制视频

a.停止MediaRecorder

MediaRecorder.stop()

b.重置MediaRecorder

可选步骤,调用MediaRecorder.reset()删除recorder中的配置信息。

c.释放MediaRecorder

调用MediaRecorder.release()释放MediaRecorder。

d.锁定摄像头

用Camera.lock()锁定摄像头,自Android 4.0开始,不再需要本调用了,除

非MediaRecorder.prepare()调用失败。

6.停止预览

activity使用完摄像头后,应用Camera.stopPreview()停止预览。

7.释放摄像头

使用Camera.release()释放摄像头,使其它应用程序可以使用它。

(二)D ilog 对话框

●使用AlertDialog创建对话框

1.创建AlertDialog.Builder对象

2.调用AlertDialog.Builder的setTitle()或setCustomTitle()方法设置标

3.调用AlertDialog.Builder的setIcon()方法设置标题

4.调用AlertDialog.Builder的相关设置方法设置对话框内容

setMessage():简单文本

setItem():简单列表项

setSingleChoiceItem():单选列表项

setMultiChoiceItem():多选列表项

setAdapter():自定义列表项

setView():自定义View

5.调用AlertDialog.Builder的setPostiviButton()、

setNegativeButton()或setNeutralButton()添加多个按钮

6.调用AlertDialog.Builder的create()方法创建AlertDialog对象,再调用

AlertDialog对象的show()方法将该对话框显示出来

●对话框风格的Activity

android:theme=”@android:stytle/Theme.Diaolg”

●DataPickerDialog日期选择对话框

DatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)

context:运行对话框的context

callBack:监听回调

year:年

monthOfYear:月

dayOfMonth:日

●TimePickerDialog时间选择对话框

TimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)

context:运行对话框的context

callBack:监听回调

hourOfDay:小时

minute:分钟

is24HourView:true 24小时制 false 12小时制

●ProgressDialog进度对话框

setIndeterminate(boolean indeterminate):设置进度条不显示进度值

setMax(int max):进度条的最大值

setMessage(CharSequence message):显示的消息

setProgress(int value):进度条的进度值

setProgressStyle(int style):进度条的风格

(三)L istView 列表

●ArrayAdapter

ArrayAdapter arrayAdapter = new ArrayAdapter( this , https://www.doczj.com/doc/7e1157434.html,yout.simple_list_item_1 , array);

ArrayAdapter(Context context, int resource, T[] objects)

resource:layout ID

simple_list_item_1: 每个列表项都是一个普通的TextView

simple_list_item_2: 有两个TextView,一个单独在一行,就是分两行显示simple_list_item_checked: 每个列表项都是一个已勾选的列表项

simple_list_item_multiple_choice: 每个列表项都是带多选框的文本

simple_list_item_single_choice :每个列表项都是带单选按钮的文本objects:数组或list

●SimpleAdapter

●BaseAdapter

(四)数据存储

●SharedPreferences

●SQLite

(五)……

(六)……

(七)……

package net.wujingchao.android.utility

import android.util.Log;

public final class L {

private final static int LEVEL = 5;

private final static String DEFAULT_TAG = "L";

private L() {

throw new UnsupportedOperationException("L cannot instantiated!");

}

public static void v(String tag,String msg) {

if(LEVEL >= 5)Log.v(tag == null ? DEFAULT_TAG:tag,msg == null?"":msg); }

public static void d(String tag,String msg) {

if(LEVEL >= 4)Log.d(tag == null ? DEFAULT_TAG:tag,msg == null?"":msg); }

public static void i(String tag,String msg) {

if(LEVEL >= 3)Log.i(tag == null ? DEFAULT_TAG:tag,msg == null?"":msg); }

public static void w(String tag,String msg) {

if(LEVEL >= 2)Log.w(tag == null ? DEFAULT_TAG:tag,msg == null?"":msg); }

public static void e(String tag,String msg) {

if(LEVEL >= 1)Log.e(tag == null ? DEFAULT_TAG:tag,msg == null?"":msg); }

}

Toast

package net.wujingchao.android.utility

import android.content.Context;

import android.widget.Toast;

public class T {

private final static boolean isShow = true;

private T(){

throw new UnsupportedOperationException("T cannot be instantiated");

}

public static void showShort(Context context,CharSequence text) {

if(isShow)Toast.makeText(context,text,Toast.LENGTH_SHORT).show();

}

public static void showLong(Context context,CharSequence text) {

if(isShow)Toast.makeText(context,text,Toast.LENGTH_LONG).show();

}

}

网络

package net.wujingchao.android.utility

import android.app.Activity;

import https://www.doczj.com/doc/7e1157434.html,ponentName;

import android.content.Context;

import android.content.Intent;

import https://www.doczj.com/doc/7e1157434.html,.ConnectivityManager;

import https://www.doczj.com/doc/7e1157434.html,workInfo;

import https://www.doczj.com/doc/7e1157434.html,.ssl.HttpsURLConnection;

import https://www.doczj.com/doc/7e1157434.html,.ssl.SSLContext;

import https://www.doczj.com/doc/7e1157434.html,.ssl.TrustManager;

import https://www.doczj.com/doc/7e1157434.html,.ssl.X509TrustManager;

public class NetworkUtil {

private NetworkUtil() {

throw new UnsupportedOperationException("NetworkUtil cannot be instantiated");

}

/**

* 判断网络是否连接

*

*/

public static boolean isConnected(Context context) {

ConnectivityManager connectivity = (ConnectivityManager)

context.getSystemService(Context.CONNECTIVITY_SERVICE);

if (null != connectivity) {

NetworkInfo info = connectivity.getActiveNetworkInfo();

if (null != info && info.isConnected()){

if (info.getState() == NetworkInfo.State.CONNECTED) {

return true;

}

}

}

return false;

}

/**

* 判断是否是wifi连接

*/

public static boolean isWifi(Context context){

ConnectivityManager connectivity = (ConnectivityManager)

context.getSystemService(Context.CONNECTIVITY_SERVICE);

if (connectivity == null) return false;

return connectivity.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI; }

/**

* 打开网络设置界面

*/

public static void openSetting(Activity activity) {

Intent intent = new Intent("/");

ComponentName componentName = new

ComponentName("com.android.settings","com.android.settings.WirelessSettings");

intent.setComponent(componentName);

intent.setAction("android.intent.action.VIEW");

activity.startActivityForResult(intent, 0);

}

/**

* 使用SSL不信任的证书

*/

public static void useUntrustedCertificate() {

// Create a trust manager that does not validate certificate chains

TrustManager[] trustAllCerts = new TrustManager[]{

new X509TrustManager() {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {

return null;

}

public void checkClientTrusted(

java.security.cert.X509Certificate[] certs, String authType) {

}

public void checkServerTrusted(

java.security.cert.X509Certificate[] certs, String authType) {

}

}

};

// Install the all-trusting trust manager

try {

SSLContext sc = SSLContext.getInstance("SSL");

sc.init(null, trustAllCerts, new java.security.SecureRandom());

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

} catch (Exception e) {

e.printStackTrace();

}

}

}

像素单位转换

package net.wujingchao.android.utility

import android.content.Context;

import android.util.TypedValue;

public class DensityUtil {

private DensityUtil() {

throw new UnsupportedOperationException("DensityUtil cannot be instantiated"); }

public int dip2px(Context context,int dipValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int)(dipValue*scale + 0.5f);

}

public int px2dip(Context context,float pxValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int)(pxValue/scale + 0.5f);

}

public static float px2sp(Context context, float pxValue){

return (pxValue / context.getResources().getDisplayMetrics().scaledDensity);

}

public static int sp2px(Context context, int spValue){

return (int) TypedValue.applyDimension(https://www.doczj.com/doc/7e1157434.html,PLEX_UNIT_SP,

spValue, context.getResources().getDisplayMetrics());

}

}

屏幕

package net.wujingchao.android.utility

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Rect;

import android.util.DisplayMetrics;

import android.view.View;

import android.view.WindowManager;

public class ScreenUtil {

private ScreenUtil()

{

throw new UnsupportedOperationException("ScreenUtil cannot be instantiated"); }

public static int getScreenWidth(Context context)

{

WindowManager wm = (WindowManager) context

.getSystemService(Context.WINDOW_SERVICE);

DisplayMetrics outMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(outMetrics);

return outMetrics.widthPixels;

}

public static int getScreenHeight(Context context) {

WindowManager wm = (WindowManager) context

.getSystemService(Context.WINDOW_SERVICE);

DisplayMetrics outMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(outMetrics);

return outMetrics.heightPixels;

}

public static int getStatusHeight(Context context) {

int statusHeight = -1;

try {

Class clazz = Class.forName("com.android.internal.R$dimen");

Object object = clazz.newInstance();

int height = Integer.parseInt(clazz.getField("status_bar_height")

.get(object).toString());

statusHeight = context.getResources().getDimensionPixelSize(height);

} catch (Exception e) {

e.printStackTrace();

}

return statusHeight;

}

/**

* 获取当前屏幕截图,包含状态栏

*/

public static Bitmap snapShotWithStatusBar(Activity activity){

View view = activity.getWindow().getDecorView();

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap bmp = view.getDrawingCache();

int width = getScreenWidth(activity);

int height = getScreenHeight(activity);

Bitmap bp = null;

bp = Bitmap.createBitmap(bmp, 0, 0, width, height);

view.destroyDrawingCache();

return bp;

}

/**

* 获取当前屏幕截图,不包含状态栏

*

*/

public static Bitmap snapShotWithoutStatusBar(Activity activity){

View view = activity.getWindow().getDecorView();

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap bmp = view.getDrawingCache();

Rect frame = new Rect();

activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top;

int width = getScreenWidth(activity);

int height = getScreenHeight(activity);

Bitmap bp = null;

bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height

- statusBarHeight);

view.destroyDrawingCache();

return bp;

}

}

App相关

package net.wujingchao.android.utility

import android.content.Context;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

public class AppUtil {

private AppUtil() {

throw new UnsupportedOperationException("AppUtil cannot instantiated"); }

/**

* 获取app版本名

*/

public static String getAppVersionName(Context context){

PackageManager pm = context.getPackageManager();

PackageInfo pi;

try {

pi = pm.getPackageInfo(context.getPackageName(),0);

return pi.versionName;

} catch (https://www.doczj.com/doc/7e1157434.html,NotFoundException e) {

e.printStackTrace();

return "";

}

/**

* 获取应用程序版本名称信息

*/

public static String getVersionName(Context context)

{

try{

PackageManager packageManager = context.getPackageManager();

PackageInfo packageInfo = packageManager.getPackageInfo(

context.getPackageName(), 0);

return packageInfo.versionName;

}catch (https://www.doczj.com/doc/7e1157434.html,NotFoundException e) {

e.printStackTrace();

}

return null;

}

/**

* 获取app版本号

*/

public static int getAppVersionCode(Context context){

PackageManager pm = context.getPackageManager();

PackageInfo pi;

try {

pi = pm.getPackageInfo(context.getPackageName(),0);

return pi.versionCode;

} catch (https://www.doczj.com/doc/7e1157434.html,NotFoundException e) {

e.printStackTrace();

}

return 0;

}

}

键盘

package net.wujingchao.android.utility

import android.content.Context;

import android.view.inputmethod.InputMethodManager;

import android.widget.EditText;

public class KeyBoardUtil{

private KeyBoardUtil(){

throw new UnsupportedOperationException("KeyBoardUtil cannot be instantiated");

}

/**

* 打卡软键盘

*/

public static void openKeybord(EditText mEditText, Context mContext){

InputMethodManager imm = (InputMethodManager)

mContext.getSystemService(Context.INPUT_METHOD_SERVICE);

imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY); }

* 关闭软键盘

*/

public static void closeKeybord(EditText mEditText, Context mContext) {

InputMethodManager imm = (InputMethodManager)

mContext.getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);

}

}

文件上传下载

package net.wujingchao.android.utility

import android.content.Context;

import android.os.Environment;

import java.io.ByteArrayOutputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import https://www.doczj.com/doc/7e1157434.html,.HttpURLConnection;

import https://www.doczj.com/doc/7e1157434.html,.MalformedURLException;

import https://www.doczj.com/doc/7e1157434.html,.ProtocolException;

import https://www.doczj.com/doc/7e1157434.html,.URL;

import java.util.UUID;

import com.mixiaofan.App;

public class DownloadUtil {

private static final int TIME_OUT = 30*1000; //超时时间

private static final String CHARSET = "utf-8"; //设置编码

private DownloadUtil() {

throw new UnsupportedOperationException("DownloadUtil cannot be instantiated");

}

/**

* @param file 上传文件

* @param RequestURL 上传文件URL

* @return服务器返回的信息,如果出错则返回为null

*/

public static String uploadFile(File file,String RequestURL) {

String BOUNDARY = UUID.randomUUID().toString(); //边界标识随机生成 String PREFIX = "--" , LINE_END = "\r\n";

String PREFIX = "--" , LINE_END = "\r\n";

String CONTENT_TYPE = "multipart/form-data"; //内容类型

try {

URL url = new URL(RequestURL);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setReadTimeout(TIME_OUT);

conn.setConnectTimeout(TIME_OUT);

conn.setDoInput(true); //允许输入流

conn.setDoOutput(true); //允许输出流

conn.setUseCaches(false); //不允许使用缓存

conn.setRequestMethod("POST"); //请求方式

conn.setRequestProperty("Charset", CHARSET);

conn.setRequestProperty("Cookie", "PHPSESSID=" + App.getSessionId());

//设置编码

conn.setRequestProperty("connection", "keep-alive");

conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); if(file!=null) {

/** * 当文件不为空,把文件包装并且上传 */

OutputStream outputSteam=conn.getOutputStream();

DataOutputStream dos = new DataOutputStream(outputSteam);

StringBuffer sb = new StringBuffer();

sb.append(PREFIX);

sb.append(BOUNDARY); sb.append(LINE_END);

/**

* 这里重点注意:

* name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件

* filename是文件的名字,包含后缀名的比如:abc.png

*/

sb.append("Content-Disposition: form-data; name=\"img\";

filename=\""+file.getName()+"\""+LINE_END);

sb.append("Content-Type: application/octet-stream; charset="+CHARSET+LINE_END);

sb.append(LINE_END);

dos.write(sb.toString().getBytes());

InputStream is = new FileInputStream(file);

byte[] bytes = new byte[1024];

int len;

while((len=is.read(bytes))!=-1)

{

dos.write(bytes, 0, len);

}

is.close();

dos.write(LINE_END.getBytes());

byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();

dos.write(end_data);

dos.flush();

/**

* 获取响应码 200=成功

* 当响应成功,获取响应的流

*/

ByteArrayOutputStream bos = new ByteArrayOutputStream();

InputStream resultStream = conn.getInputStream();

len = -1;

byte [] buffer = new byte[1024*8];

while((len = resultStream.read(buffer)) != -1) {

bos.write(buffer,0,len);

}

resultStream.close();

bos.flush();

bos.close();

String info = new String(bos.toByteArray());

int res = conn.getResponseCode();

if(res==200){

return info;

}else {

return null;

}

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (ProtocolException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

public static byte[] download(String urlStr) {

HttpURLConnection conn = null;

InputStream is = null;

byte[] result = null;

ByteArrayOutputStream bos = null;

try {

URL url = new URL(urlStr);

conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET");

conn.setConnectTimeout(TIME_OUT);

conn.setReadTimeout(TIME_OUT);

conn.setDoInput(true);

conn.setUseCaches(false);//不使用缓存

if(conn.getResponseCode() == 200) {

is = conn.getInputStream();

byte [] buffer = new byte[1024*8];

int len;

bos = new ByteArrayOutputStream();

while((len = is.read(buffer)) != -1) {

bos.write(buffer,0,len);

}

bos.flush();

result = bos.toByteArray();

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if(bos != null){

bos.close();

}

if (is != null) {

is.close();

}

if (conn != null)conn.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

return result;

}

/**

* 获取缓存文件

*/

public static File getDiskCacheFile(Context context,String filename,boolean isExternal) {

if(isExternal && (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))) { return new File(context.getExternalCacheDir(),filename);

}else {

return new File(context.getCacheDir(),filename);

}

}

/**

* 获取缓存文件目录

*/

public static File getDiskCacheDirectory(Context context) {

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

return context.getExternalCacheDir();

}else {

return context.getCacheDir();

}

}

}

加密

package net.wujingchao.android.utility

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class CipherUtil {

private CipherUtil() {

}

//字节数组转化为16进制字符串

public static String byteArrayToHex(byte[] byteArray) {

char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' };

char[] resultCharArray =new char[byteArray.length * 2];

int index = 0;

for (byte b : byteArray) {

resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];

resultCharArray[index++] = hexDigits[b & 0xf];

}

return new String(resultCharArray);

}

//字节数组md5算法

public static byte[] md5 (byte [] bytes) {

try {

MessageDigest messageDigest = MessageDigest.getInstance("MD5");

messageDigest.update(bytes);

return messageDigest.digest();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

return null;

}

}

时间

package net.wujingchao.android.utility

import java.text.SimpleDateFormat;

import java.util.Date;

public class DateUtil {

//转换中文对应的时段

public static String convertNowHour2CN(Date date) {

SimpleDateFormat sdf = new SimpleDateFormat("HH"); String hourString = sdf.format(date);

int hour = Integer.parseInt(hourString);

if(hour < 6) {

return "凌晨";

}else if(hour >= 6 && hour < 12) {

return "早上";

}else if(hour == 12) {

return "中午";

}else if(hour > 12 && hour <=18) {

return "下午";

}else if(hour >=19) {

return "晚上";

}

return "";

}

//剩余秒数转换

public static String convertSecond2Day(int time) {

int day = time/86400;

int hour = (time - 86400*day)/3600;

int min = (time - 86400*day - 3600*hour)/60;

int sec = (time - 86400*day - 3600*hour - 60*min);

StringBuilder sb = new StringBuilder();

sb.append(day);

sb.append("天");

sb.append(hour);

sb.append("时");

sb.append(min);

sb.append("分");

sb.append(sec);

sb.append("秒");

return sb.toString();

}

}

Android项目文档

课程代号:83308113 2014-2015学年第1学期《ISAS与项目训练(一)》 项目:Android 班级:网络2班 学号: 13734214 姓名:刘雨亭. 指导教师:温一军周洪斌 . 沙洲职业工学院 NIIT安艾艾迪

目录 一、系统简介 (3) 二、发展历程 (3) 三、发行版本 (4) 四、国内外手机应用状况 (4) 五、发展趋势 (5) 六、Android的相关技术介绍及分析 (6) 6.1、Android系统架构研究 (6) 6.2、应用程序框架 (7) 6.3、类库 (8) 七、Android的API (10) 八、Android活动的生命周期 (11)

一、系统简介 Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender 公司专门制作的称之为“Droid ”的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。 二、发展历程 2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。 2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发

android studio 控件常用属性

android studio 控件常用属性 下面是RelativeLayout各个属性 1.android:layout_above="@id/xxx" --将控件置于给定ID控件之上 2.android:layout_below="@id/xxx" --将控件置于给定ID控件之下 3. android:layout_toLeftOf="@id/xxx" --将控件的右边缘和给定ID控件的左边缘对齐 4.android:layout_toRightOf="@id/xxx" --将控件的左边缘和给定ID控件的右边缘对齐 5. android:layout_alignLeft="@id/xxx" --将控件的左边缘和给定ID控件的左边缘对齐 6.android:layout_alignTop="@id/xxx" --将控件的上边缘和给定ID控件的上边缘对齐 7.android:layout_alignRight="@id/xxx" --将控件的右边缘和给定ID控件的右边缘对齐 8.android:layout_alignBottom="@id/xxx" --将控件的底边缘和给定ID控件的底边缘对齐 9.android:layout_alignParentLeft="true" --将控件的左边缘和父控件的左边缘对齐 10. android:layout_alignParentTop="true" --将控件的上边缘和父控件的上边缘对齐 11. android:layout_alignParentRight="true" --将控件的右边缘和父控件的右边缘对齐 12.android:layout_alignParentBottom="true" --将控件的底边缘和父控件的底边缘对齐 13.android:layout_centerInParent="true" --将控件置于父控件的中心位置 14.android:layout_centerHorizontal="true" --将控件置于水平方向的中心位置 15.android:layout_centerVertical="true" --将控件置于垂直方向的中心位置 android:layout_width 设置组件的宽度 android:layout_height 设置组件的高度 android:id 给组件定义一个id值,供后期使用 android:background 设置组件的背景颜色或背景图片 android:text 设置组件的显示文字 android:textColor 设置组件的显示文字的颜色 android:layout_below 组件在参考组件的下面 android:alignTop 同指定组件的顶平行

Android期末考试复习试卷(仅供参考)

一、选择题(20分,每小题2分) 1、下列不是手机操作系统的是( D )。 A Android B Window Mobile C Apple IPhone IOS D Windows Vista 2、下列选项哪个不是 Activity 启动的方法(B ) A startActivity B goToActivity C startActivityForResult D startActivityFromChild 3、下列哪个不是 Activity 的生命周期方法之一(B ) A onCreate B startActivity C onStart D onResume 4、下列哪个可做 Android 数据存储(A ) A SQlite B M ySql C Oracle D DB2 5、下列哪个可做EditText编辑框的提示信息( D ) A android:inputType B android:text C android:digits D android:hint 6、Math.ceil(99.1) 的结果是(B ) A 99 B 100 C 99.1 D 99.0 7、android 中下列属于Intent的作用的是(C) A实现应用程序间的数据共享 B是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D处理一个应用程序整体性的工作 8、关于 res/raw 目录说确的是A A这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B这里的文件是原封不动的存储到设备上会转换为二进制的格式 C这里的文件最终以二进制的格式存储到指定的包中 D这里的文件最终不会以二进制的格式存储到指定的包中 9、Math.round(11.5)等于多少(). Math.round(-11.5)等于多少( C) A 11 ,-11 B 11 ,-12 C 12 ,-11 D 12 ,-12 10、我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(A ) A onDestroy() B onClear() C onFinish() D onStop() 二、填空题(10 分,共10 题,每空1 分) 1、为了使 android 适应不同分辨率机型,布局时字体单位应用( sp ),像素单位应用( sp )和(dip ) 2、定义 LinearLayout 水平方向布局时至少设置的三个属性: ( android:orientation), (android:layout width)和(android:layout height)

Android期末测试题(附带答案)

一、选择题 1、下列哪项不是Android四大组件( C ) A.Seivice B. Activity C. Handler D. Content Provider 2、Android是如何组织Activity的( B ) A.以堆的方式组织Activity B. 以栈的方式组织Activity C. 以树形方式组织Activity D. 以链式方式组织Activity 3、关于线程说法不正确的是( B ) A. 在 android 中,我们可以在主线程中,创建一个新的线程 B. 在创建的新线程中,它可以操作 UI 组件 C. 新线程可以和 Handler 共同使用 D. 创建的 Handler 对象,它隶属于创建它的线程 4、下列关于内存回收的说明,哪个是正确的(B ) A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 5、设置xml布局文件中的字体大小一般用什么单位( c ) A.dp B. px C. sp D. pt 6、关于service生命周期的onCreate()和onStart()说法正确的是( D ) A.当第一次启动的时候先后调用onCreate()和onStart()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果service已经启动,将先后调用onCreate()和onStart()方法 D.如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法 7、Android项目工程下面的assets目录,以下说法正确的是( A ) A.这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B.主要放置多媒体等数据文件 C.主要放置图片文件 D.放置字符串,颜色,数组等常量数据 8、在android中使用SQLiteOpenHelper这个辅助类,生成一个可操作的数据库,调用的方法是( A )A.getReadableDatabase() B.getDatabase() C.getEnbleDatabase() D.createDateBase() 9、Activity从可见状态变为半透明遮盖状态时,生命周期中哪个方法被调用( B )

(完整版)Android应用开发期末考试题

试题 一、选择题 1 android虚拟设备的缩写是(AVD) 2 Android SDK目前支持的操作系统(DOS) 3 Android开发工具插件(ADT)没有提供的开发功能(自动更新) 4Android SDK提供一些开发工具可以把应用软件打包成Android格式文件(APK) 5 Android当中基本的所有的UI都是由(view)或者其子类实现的 6以下不是Android中调试项目的正确步骤(测试用例) 7下列不是Activity的生命周期方法之一的是(OnResume) 8以下可以做EditText编辑框的提示信息是(adroid:hint) 9以下不是Activity启动的方法是(gotoActivity) 10以下不是手机操作系统的是(windows vista) 二、填空题 1 Android平台由操作系统,中间件,用户界面和应用软件组成的。 2 Android平台提供了2D,3D的图形支持,数据库支持SQLite,并且集成了浏览器 3目前已知的可以用来搭建Android开发环境的系统有windows,Linux,Mac 等4开发中推荐使用的IDE开发组合为IDE,eclipse,ADI来开发 5 Android SDK主要以java语言为基础 6创建工程时需要填写的信息名称有工程名,包的名字,Activity的名字还有应用的名字

7 Android.jar是一个标准的压缩包,其内容包含的是编译后的class,包含了全部的API 三、简答题 1 Android SDK中API的包结构的划分?至少五个 android.util,android.os,android.content,android.view,android.graphics,android.text 2 Android软件框架结构自上而下可分为哪些层? 应用程序(Application)、应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(RunTime)、操作系统层(OS) 3 Android应用程序的4大组件是什么? Activity、Broadcast Intent Receiver、Service、Content Provider 4 Android应用工程文件结构有哪些? 源文件(包含Activity),R.java文件,Android Library,assets目录res目录,drawble目录,layout目录,values目录,AndroidManifest.xml 5 Android开发应用程序最有可能使用到的应用框架部分是哪些? 一组View(UI)组件,Content Providers,Resource Manger,Notification Manger,Activiy Manger 6 Android底层库包含哪些? 系统C库,媒体库,Surface Manager,LibWebCore,SGL 四、编程 1实现点击一个按钮,结束当前Activity并将需要返回的数据放置并关闭当前窗体请编写核心代码 Bundle bundle = new Bundle ( ); Bundle.putString(“store”,”数据来自Activity1”) ;

Android项目打包成apk

Android开发把项目打包成apk 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk"。将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装。Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装。生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们会更加方便地完成整个流程,打包发布的过程非常简单。下面以前面开发的"Hello World"为例,演示如何生成APK。 右键单击项目名称,选择"Android Tools",再选择"Export Signed Application Package…",如下图所示。 进入左图所示页面,单击"Next>"按钮,进入如右图所示窗口。

其中,Location为证书库将要存放的位置,Password是证书库的密码。 打包程序时,系统要求使用数字证书。如果没有数字证书,我们选择"Create new keystore"新创建一个证书库,单击"Browse…"按钮选择证书库将要保存的位置并填入信息,如左图所示。单击"Next>"按钮,如右图所示。 其中,Alias是该证书的名字;password是该证书的密码;Validity是指定证书有效

年份。 如果已经拥有一个证书,那么可以选择"Use existing keystore",之后直接定位到证书库的位置并填入密码,如左图所示,接下来填入密码,单击"Next>"按钮,如右图所示。 单击"Browse…"按钮,选择文件保存的位置,如下图所示。 "Destination APK file "指定APK存储的位置。单击"Finish"按钮,打包完成。

Android常用控件

《Android基础应用》 Android常用控件 ?本章任务 ?使用Android开发使用时间组件 ?使用Android开发使用进度条组件 ?使用Android开发创建底部选项卡 ?本章目标 ?了解Android的组件层次结构 ?掌握常用的日期时间类控件 ?掌握常用的几个容器组件 1.Android组件的层次结构 UI组件都是View的子类,View有很多子类,它们之间存在树状的继承关系View及其子类结构图

TextView及其子类结构图

ViewGroup及其子类结构图 其下的子类一般作为容器或布局来使用 FrameLayout及其子类结构图 其下的子类通常作为容器或布局来使用

2.时间控件 2.1日期时间选择器 DatePicker组件可用于输入日期,TimePicker组件可用来选择时间,只能输入小时和分,默认12小时制 DatePicker ●使用onDateChangedListener监听器来获取用户的日期选择 ●使用init对组件进行初始化 ●使用getYear,getMonth,getDayOfMonth方法获得用户选择的年,月,日 TimePicker ●使用onTimeChangedListener监听器获取用户的时间选择 ●使用setIs24HourView设置是否以24小时制显示 ●使用getCurrentHour获得当前的小时数 ●使用getCurrentMinute获得当前的分钟数 示例

示例的实现结果

2.2时钟组件 AnalogClock组件用来以表盘的方式显示当前时间,该表只有时针和分针,DigitClock组件以数字的方式显示当前时间可以显示时分秒,由于DigitClock继承TextView,可以使用TextView 的属性 示例

总结android项目的基本开发步骤

总结android项目的基本开发步骤 做了几个android企业应用项目后,总结了项目的基本开发步骤,希望能够交流。一应用规划: -确定功能。 -必须的界面及界面跳转的流程。 -需要的数据及数据的来源及格式。 -是否需要服务端支持。 -是否需要本地数据库支持。 -是否需要特殊权限。 -是否需要后台服务。 二架构设计: -分层。 -网络连接。 -数据处理-xml、domain。 -封装Activity。 三界面设计: -主界面确定。 -模块界面、列表、查看、编辑界面。 -菜单、按钮、对话框、提示信息。 -界面总体颜色。 四数据操作和存储: -数据来源。 -数据类型。 -存储方式。 五业务实现: -客户端业务解析。 六页面跳转: -每个页面间的跳转。 -菜单、按钮、事件等。 #开发之前还需要做一些准备工作 1.技术储备 a.Java 重要程度:????? -框架,编程思想,编码规范,设计模式等 b.Xml 重要程度:???? -布局,选择器,配置文件等 c.数据库重要程度:??? -关系型数据库,SQLite

2.开发工具 a.Eclipse或者AndroidStudio b.Android SDK c.其他:svn / git,JDK,资源,数据库,模拟器,真机等 #开发过程中还有以下的一些流程 1.多种开源框架和优秀源码的引用 -xUtils,Volley,Vitamio,SlidingMenu等 2.数据访问 -访问框架 -传递方式 3.多种API的接入 -短信服务 -即时通信 -消息推送 -第三方登录等 4.后台开发 -后台的开发,为app提供接口 -后台的云服务器 5.内存优化 -垃圾回收 -一、二级缓存 -适配器的优化 -图片框架及资源的优化 6.多线程异步 -Handler -Asynctask 7.屏幕适配 #开发基本结束之后还有很多需要流程 1.多型号真机实测 2.云服务器优化 3.APK加密 4.数字签名 5.用户协议 6.应用平台 7.项目上线 8.应用推广和广告插入 9.版本更新和维护

android常用控件大全

android常用控件大全 在Android中使用各种控件(View) DatePicker-日期选择控件 TimePicker-时间选择控件 ToggleButton-双状态按钮控件 EditText-可编辑文本控件 ProgressBar-进度条控件 SeekBar-可拖动的进度条控件 AutoCompleteTextView-支持自动完成功能的可编辑文本控件 MultiAutoCompleteTextView-支持自动完成功能的可编辑文本控件,允许输入多值(多值之间会自动地用指定的分隔符分开) ZoomControls-放大/缩小按钮控件 Include-整合控件 VideoView-视频播放控件 WebView-浏览器控件 RatingBar-评分控件 Tab-选项卡控件 Spinner-下拉框控件 Chronometer-计时器控件 ScrollView-滚动条控件 在Android中使用的Layout FrameLayout:里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角 LinearLayout:里面可以放多个控件,但是一行只能放一个控件

TableLayout:这个要和TableRow配合使用,很像html里面的table AbsoluteLayout:里面可以放多个控件,并且可以自己定义控件的x,y的位置 RelativeLayout:里面可以放多个控件,不过控件的位置都是相对位置 (Android界面布局好像还可以直接引用一些view,如ScrollView等) 常用控件: 1,EditText 主要函数:setText/getText设置/获取文本内容,setHint设置缺省显示内容; 2,RadioGroup,RadioButton RadioButton的isChecked()判断是否被选中 获取选中RadioButon的ID:设置 RadioGroup.setOnCheckedChangeListener方法 publiconCheckedChanged(RadioGroupgroup,intcheckedId)//checkedId 是选中RadioButton的ID 3,CheckBox isChecked()判断是否被选中 setOnCheckedChangeListener方法监视选中状态改变情况 4,Spinner a,显示数据 1),硬编码加载 通过setAdapter方法设置类型为 ArrayAdapter(Contextcontext,inttextViewResId,String[]objects) textViewResourceId:显示内容的ViewID默认设置为 https://www.doczj.com/doc/7e1157434.html,yout.simple_spinner_item

安卓实训总结报告

安卓实训总结报告 安卓实训的总结与体会【1】 不知不觉中为期三周的实训已经接近尾声。 虽然时间很短,不过我确实学到了一些我觉得有用的东西,并且是平时上课学不到的东西。 三周的实训,时间很短,确实很短。 原本刚开始,乃至之前听说有为期三周的实训的时候,都觉得,这样的实训不过就是走过场罢了,只有三周的时间,能学到什么东西呢?所以一开始也没当回事。 就这样,带着这样的心态,开始了实训。 安卓实训。 因为第一天周一上午没有课,下午,才算是正式开始了三周的实训。 一开始听老师讲课的时候,感觉很舒服啊,噼里啪啦一讲一堆,不过我就喜欢这样的,听着爽啊。 平时老师上课的时候都是讲一句顿一顿,或者一句话反复琢磨半天,这样的话,虽然老师的出发点是好的,是为了让学生更容易理解,但这样的话,教学的整体进度就下来了。 而且就算是一个知识点反复讲,也不见得能就精通了这个东西,或者说对这个有多么理解。 反而容易让学生产生一种懈怠的情绪。 一、第一件事:说话做事要有真凭实据

而这样一开始,老师就给我一种耳目一新的感觉:这老师上课带劲啊!不过也就仅此而已了。 老师花了一下午的时间着重介绍了老师所在的公司,以及我们接下来三周的实训计划。 接下来一周实训之后,这个实训在老师的刻意营造下,尽量模仿公司的氛围。 而让我感受最受的就是:凭事实说话。 就是无论要下什么结论的时候,都要拿得出能够说服人的数据。 这是我在第一周中感受最深的一件事。 也是我学到的第一件事。 说话下结论要有真凭实据。 二、第二件事:专业技术的不断学习 在这一周中,老师着重讲了如何进行系统构架。 因为之前也跟老师做过项目,所以对进行系统构架的理解要稍微深入些,对其重要性的了解也要多一些。 这样,在老师的讲解下,再和我以前的理解相互验证,感觉就像武功高手,在前辈的点拨下顿悟了一样。 这就是我学到的第二件事,是在专业技能方面的收获。 三、第三件事:学会寻找动力 然后在接下来的一周中,这样的学习中老师让我们每组一个白板,然后把每天的任务完成情况着实记录。

《Android程序设计》期末试题B

一、判断题(每小题2分,共10分) 1、Android是J2ME的一个实现。() 2、View是ViewGroup的子类。() 3、一个Intent可以包含多个category。() 4、Android系统下的文件,可以被本系统里的所有应用程序访问。() 5、无论Service是以启动方式还是绑定方式运行,该Service类都要重写onBind 方法。() 二、单项选择题(在每小题的四个备选答案中,有且只有一个正确答案,请将正确答案的序号填在题干的括号内。每小题2分,共20分) 1、下列关于继承的哪项叙述是正确的?() A、在Java中类允许多重继承 B、在Java中一个类只能实现一个接口 C、在Java中一个类不能同时继承一个类和实现一个接口 D、在Java中接口允许继承自另一个接口 2、以下哪种方式不能退出当前活动状态的Activity?() A、调用finish()方法 B、单击(返回)按钮 C、单击(回到桌面)按钮 D、Activity运行时出现异常 3、对于TextView,使用哪个属性来设置显示的文本?() A、android:textSize B、android:text C、android:textColor D、android:string 4、要处理Button的点击事件,需要注册哪个监听器?() A、OnClickListener() B、OnButtonClickListener() C、OnButtonListener() D、OnItemClickListener() 5、浏览网页使用的Intent的Action是什么?() A、ACTION_CALL B、ACTION_EDIT C、ACTION_SEND D、ACTION_VIEW 6、Android 关于启动方式的service生命周期的onCreate()和onStartCommand()方法,说法正确的是()

Android应用开发基础习题

-- 任务一Android 开发环境的搭建 第一部分知识回顾与思考 1.Android 的四层架构分别包括哪几层?分别起到什么作用? 答:Linux 内核层(Linux Kernel ):基于Linux 内核,内核为上层系统提供了系统服务。 系统库层(Libraries ):系统库基于C/C++ 语言实现,通过接口向应用程序框架层提供编程接口。 应用框架层(Application Framework ):为开发者提供了一系列的Java API,包括图形用户界面组件

View 、SQLite 数据库相关的API 、Service 组件等。 应用程序层(Applications ):包含了Android 平台中各式各样的应用程序。 第二部分职业能力训练 一、单项选择题(下列答案中有一项是正确的,将正确答案填入括号内) 1.Android 四层架构中,应用框架层使用的是什么语法?(C)A .CB .C++C.Java D.Android 2.Android 四层架构中,系统库层使用的是什么语法?(B)A .VBB.C /C++C.Java D .Android 3.应用程序员编写的Android 应用程序,主要是调用(B)提供的接口进行实现。 A .应用程序层DCB.应用框架层.应用视图层.系统库层

二、填空题(请在括号内填空) 1.在Android 智能终端中,有很多应用如拍照软件、联系人管理软件,它们都属于Android 的(应用程 序)层。 2.为了让程序员更加方便的运行调试程序,Android 提供了(模拟器),可以方便的将程序运行其上, 而不要实际的移动终端。 程序运行,我们需要安装(Java 3.为了支持)。JDK 三、简答题 1.简述Android 开发环境安装的步骤。 答:下载并安装JDK ,配置JDK 的环境变量; 从Anroid 官网上下载Android 开发组件(包含Eclipse 和

Android项目开发报告

目录 1 项目简介 (2) 2 开发环境 (2) 2.1Android 平台结构介绍 (2) 22 MVC 框架 (3) 3 功能介绍 (3) 3.1 登录 (3) 3.2 注册 (3) 3.3添加 (4) 3.4 查询 (5) 3.5主页面 (6) 4 数据库结构 (7) 4.1 数据表设计 (7) 5 项目结构 (7) 5.1 src 文件夹 (7) 52 gen 文件夹 (7) 5.3 libs 文件夹 (8) 5.4 bin 文件夹 (8) 5.5 res 文件夹 (8) 5.6 AndroidManifest.xml (8) 6 项目总结 (8)

Android 项目开发报告 1 项目简介 本次中软培训主要是关于android 的基本应用开发,培训的任务主要是开发一个与日常生活花费有关的现金日记账软件,由于时间紧张此软件只实现了登录、注册、添加、查询等功能,未涉及细节处理。此次项目开发主要是帮助大家培养理财观念,清楚直白的了解每笔前是怎么消费,何时消费掉的,利于节约一部分开支。 2 开发环境 2.1Android 平台结构介绍 Android 系统架构和其操作系统一样,采用了分层的架构。Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux 核心层。 开发人员可以完全访问核心应用程序所使用的API 框架。该应用程序的架构设计简化了组件的重用。任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 应用程序。Android 会同一些核心程序包一起发布,包括日历、地图、浏览器等。所有的应用程序均是用Java 语言编写。 应用程序框架。这种框架可以使开发人员可以完全的访问核心程序所使用 的API 框架,简化了组件的使用。同时也使用户可以方便的替换程序组件。 系统运行库。An droid包含一些C/C++库,这些库能被An droid系统中不同的组件使用。一般情况下如果要将Android 移植到其他硬件去运行,只需要实现这部分代码即可。Android 也包括了一个核心库,该核心库提供了Java 编程语言核心库的大多数功能。 Linux 内核。Android 的核心系统服务依赖于Linux 2.6 内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux 内核也同时作为硬件和软件栈之间的抽象层。2.2 MVC 框架 MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制

Android 标题栏添加控件及Button控件背景颜色的设置

Android 标题栏添加控件及Button控件背景颜色的设置 一、Android中标题栏添加按 现在很多的Android程序都在标题栏上都显示了一些按钮和标题,如下图: 下面通过实例来看一下如何实现。 1、在layout下创建一个titlebtn.xml文件,内容如下:

android期末考大题(沈阳师范大学)

1.SQLite数据库 public class MySqliteDB extends SQLiteOpenHelper { public MySqliteDB(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version);} public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists people ("+"pid integer primary key,"+ "pname text,"+"page integer)");} public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}} public class MainActivity extends Activity { Button btn;MySqliteDB mydb; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/7e1157434.html,yout.activity_main); mydb=new MySqliteDB(this, "MyDB", null, 1); btn=(Button)findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SQLiteDatabase db=mydb.getReadableDatabase();}});} public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true;}} 2.添加ToggleButton public class Example_55 extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/7e1157434.html,yout.main); ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); toggleButton.setChecked(true); 3.Spinner下拉列表框

android项目心得体会.doc

android项目心得体会 篇一:Android实训心得 Android实训心得 刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的AndroidSdK开发范例大全中的例子以及Android提供的APIdEmoS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。 我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。 通过半个月的android实习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。 通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过bundle对数据在界面之间进行

传输。 在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的currentActivity这个变量进行控制,进行处理。 在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android 系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,cc++高级编程才能深入的涉及Androidframework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。 由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对Sd卡存取需要权限,在写SqL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。 通过Android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据

如何在Android中添加控件

How to: Android 'Hello Widget' Table of Contents Document history (1) Tutorial (1) Prerequisites (1) Let’s start from scratch (1) The Java-way Time-Widget (6) The Service-way Time-Widget (8) Were to go from here? (8) Document history Version Date User Description 1.02009-07-11Norbert M?hring moehring.n [at] https://www.doczj.com/doc/7e1157434.html, Initial document. 1.12009-07-21Norbert M?hring moehring.n [at] https://www.doczj.com/doc/7e1157434.html, Small fixes in code (copy&paste erros ?). Thanks to Andreas Kompanez (ak@https://www.doczj.com/doc/7e1157434.html,) for the review. Better layout. Added document history and table of contents. Put all links behind text → looks better ? 1.22009-07-23Norbert M?hring moehring.n [at] https://www.doczj.com/doc/7e1157434.html, Fixed some typos Tutorial Since there is only the one not that self explaining example of a widget I decided to invest some nightly hours to cut that example into pieces and then start from scratch with an easy to follow “Hello Widget” tutorial. Prerequisites You should already have the android SDK and android Eclipse IDE plug-in installed and running. If not, go here to learn how to get started with the android plug-in. Also you should have at least basic knowledge about Java programming since this is not a Java tutorial. Let’s start from scratch In Eclipse, go to File → new Project … → other … and select 'Android Project' The project name will be “Hello Widget” and in this case the target platform will be ‘Android 1.5’. Uncheck the probably already checked Box “Create Activity”. We won’t create an Activity here we just want a simple widget.

相关主题
文本预览
相关文档 最新文档