Android学习笔记-常用的一些源码,防止忘记了。。。1.长点击控件菜单,即我们常说的右键菜单,不过好像ContextMenu不支持ICON的,
所以即使在源码里面可以使用setIcon函数,但是还是不会有效果的。。。 一般有下面三个步骤: // 通常在onCreate函数中注册一个控件,btn为需要弹出ContextMenu的控件 this.registerForContextMenu(btn); /////////////////////////////////////////////////////////////////////////////// // 下面函数是创建ContextMenu的,v是被点击的控件 // 根据v进行判断可以对不同的控件,创建不同的ContextMenu public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) /////////////////////////////////////////////////////////////////////////////// // 下面函数是响应ContextMenu点击事情的。。 public boolean onContextItemSelected(MenuItem item) 2. Toast显示信息,可以方便的来输出信息 Toast.makeText(this, "Info", Toast.LENGTH_LONG).show(); 3. 关于MENU的操作 有两个比较重要的了,函数原型: public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title); public abstract SubMenu addSubMenu (CharSequence title); 一般的函数有: menu.setHeaderTitle("MenuTitle"); menu.setHeaderIcon(R.drawable.icon); menu.add(0, 0, 0, "item0").setIcon(R.drawable.icon); menu.add(0, 1, 1, "item1"); /////////////////////////////////////////////////////////////////////////////// SubMenu sub = menu.addSubMenu("SubMenu"); sub.add(0, 5, 5, "item5"); sub.add(0, 6, 6, "item6"); 4. 获取屏幕的分辨率 isplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); dm.widthPixels dm.heightPixels 5. 显示POPUP对话框,类似于Windows的MessageBox函数,不过这个要比MessageBox强大多了,,, 可以设置单选或者多选项,以及其响应,有两种方法可以 一: 实现Activity的onCreateDialog函数。 showDialog(ID_TEST_DIALOG); protected Dialog onCreateDialog(int id) { // TODO Auto-generated method stub switch (id) { case ID_TEST_DIALOG: Dialog dialog = new AlertDialog.Builder(this) .setTitle("AlertDialog Test") .setMessage("This is a test for AlertDialg!") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }) .create(); return dialog; default: break; } return super.onCreateDialog(id); } 这里有个配套的函数 dismissDialog(D_TEST_DIALOG); 这个可以关闭相应的Dialog. /////////////////////////////////////////////////////////////////////////////// 二: 直接调用Builder函数去完成创建与显示。 new AlertDialog.Builder(this) .setTitle("AlertDialog Test") .setMessage("This is a test for AlertDialg!") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }) .show(); 6. 从一个xml布局获取其View的方法。 这个好像有两种方法,不过都是得到一个LayoutInflater之后再inflate得到指定xml布局相对应的View. 一: LayoutInflater li; li = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); View v = li.inflate(R.layout.la_test, null); 二: LayoutInflater li; li = LayoutInflater.from(this); View v = li.inflate(R.layout.la_test, null); 7. 知道第二个方法和第六个方法之后,我们可以把这两个方法综合起来。 就是可以自定义的显示一段时间的图形,这个说法有点抽象,简单一点就是做一个类似音量调节那样的浮动窗口。 思路是这样的,可以新建一个Toast,然后再inflate一个布局,设置里面的内容,然后再把内容放到Toast里面显示 LayoutInflater li; li = LayoutInflater.from(this); View v = li.inflate(R.layout.la_test, null); Toast toast = new Toast(this); toast.setDuration(Toast.LENGTH_LONG); toast.setView(v); toast.show(); 8. 当按返回键时,完全按退出系统 @Override protected void onDestroy() { // TODO Auto-generated method stub android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK) { finish(); return true; } return super.onKeyDown(keyCode, event); } 9. 获取状态栏和标题栏的高度 获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。 于是,我们就可以算出状态栏的高度了。 Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; 获取标题栏高度: getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。 int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); //statusBarHeight是上面所求的状态栏的高度 int titleBarHeight = contentTop - statusBarHeight 10. 关于窗口的一些操作 不显示标题栏 getWindow().requestFeature(Window.FEATURE_NO_TITLE); 或者是设置一个style属性,主题,加入下面的项 <item name="android:windowNoTitle">true</item> 设置背景半暗 LayoutParams lp = getWindow().getAttributes(); lp.dimAmount = 0.5f; // 设置透明度是alpha的值 // lp.alpha = 0.8f; getWindow().setAttributes(lp); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 设置背景模糊 getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 一般可能有用的style设置,以防以后忘记了,,, <item name="android:windowBackground">@drawable/color_translucent</item> <item name="android:windowIsTranslucent">true</item> 11. 获取SD卡总空间和可用空间 public static String getSDcardStorage() { String state = Environment.getExternalStorageState(); if(Environment.MEDIA_MOUNTED.equals(state)) { File sdcardDir = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(sdcardDir.getPath()); long blockSize = sf.getBlockSize(); long blockCount = sf.getBlockCount(); long availCount = sf.getAvailableBlocks(); return "SD卡:" + formatSize(blockSize*blockCount) + " 可用空间:" + formatSize(availCount*blockCount); } return null; } 获取系统空间和可用空间 public static String getSystemStorage() { File root = Environment.getRootDirectory(); StatFs sf = new StatFs(root.getPath()); long blockSize = sf.getBlockSize(); long blockCount = sf.getBlockCount(); long availCount = sf.getAvailableBlocks(); return "总空间:" + formatSize(blockSize*blockCount) + " 可用空间:" + formatSize(availCount*blockSize); } 12. 在资源文件中使用Android定义的资源的方法 在Android系统中定义了很多动画与样式,我们可能在eclipse开发程序的时候使用系统定义的资源, 哈哈,这样可以保持与系统显示的样式一致~~~ 对于定义为:android.R.drawable.status_bar_item_background的样式, 只需在eclipse的资源文件中写为:@android:drawable/status_bar_item_background 总结一下,所以可以写为下面的样子。。。 android:background="@android:drawable/status_bar_item_background" 13. Android.mk文件的说明。 JAR: include $(BUILD_JAVA_LIBRARY),源文件为java SO:include $(BUILD_SHARED_LIBRARY),源文件为 c或c++ APK:include $(BUILD_PACKAGE),源文件为java 二进制可执行文件:include $(BUILD_EXECUTABLE),源文件为c或c++ 如需要在java文件中调用so文件,如:libabc.so则需在Android.mk文件中添加: LOCAL_JNI_SHARED_LIBRARIES := libabc 同时,需要在java文件中System.loadLibrary("abc");,注意此时不需要在加上lib前缀 14. 模拟按键消息 private void sendVKeyDelay(int key) { final int keyCode = key; Thread sendKeyDelay = new Thread(){ public void run() { try { Thread.sleep(100); long now = SystemClock.uptimeMillis(); KeyEvent keyDown = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, 0); IWindowManager wm = IWindowManager.Stub.asInterface( ServiceManager.getService("window")); wm.injectKeyEvent(keyDown, false); KeyEvent keyUp = new KeyEvent(now, now, KeyEvent.ACTION_UP, keyCode, 0); wm.injectKeyEvent(keyUp, false); } catch (InterruptedException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }; sendKeyDelay.start(); } 15. 使用startActivity应该注意的异常,处理各种情况跟异常!!! void startActivitySafely(Intent intent) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); } catch (SecurityException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); e(LOG_TAG, "Launcher does not have the permission to launch " + intent + ". Make sure to create a MAIN intent-filter for the corresponding activity " + "or use the exported attribute for this activity.", e); } } 16. 创建动画效果。 public void createAnimation() { if (mInAnimation == null) { mInAnimation = new AnimationSet(false); final AnimationSet ani = mInAnimation; ani.setInterpolator(new AnticipateOvershootInterpolator(2.5f)); ani.addAnimation(new AlphaAnimation(0.0f, 1.0f)); ani.addAnimation(new TranslateAnimation(Animation.ABSOLUTE, 0.0f, Animation.ABSOLUTE, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f)); ani.setDuration(1000); } if (mOutAnimation == null) { mOutAnimation = new AnimationSet(false); AnimationSet ano = mOutAnimation; ano.setInterpolator(new AnticipateOvershootInterpolator(2.5f)); ano.addAnimation(new AlphaAnimation(1.0f, 0.0f)); ano.addAnimation(new TranslateAnimation(Animation.ABSOLUTE, 0.0f, Animation.ABSOLUTE, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f)); ano.setDuration(1000); } } 17. 显示一个浮动的窗口(任意View). mWindowManager = (WindowManager)getSystemService( Context.WINDOW_SERVICE); mDialog = LayoutInflater.from(mContext).inflate( R.layout.popup, null); WindowManager.LayoutParams lp = new WindowManager.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, (int)event.getX(), (int)event.getY(), WindowManager.LayoutParams.TYPE_APPLICATION, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); lp.gravity = Gravity.TOP | Gravity.LEFT; mWindowManager.addView(mDialog, lp); 如果需要隐藏,则remove即可 mWindowManager.removeView(mDialog); 18. 设置应用程序全屏显示 this.requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 19. 获取系统所有的安装程序 final PackageManager packageManager = getPackageManager(); final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); final List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0); 20. 手机振动,代码片段。 Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(pattern, -1); 需要在AndroidManifest.xml文件添加权限 <uses-permission android:name="android.permission.VIBRATE" /> 21. 设置开机运行程序,需要在AndroidManifest.xml中添加 <intent-filter> <!-- 系统启动完成后会调用--> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> 22. 简单的使用ListView的方法, 一,单行文字的 List<String> list = new ArrayList<String>(); lvData.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, list)); 二,双行文字,使用SimpleAdapter List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map = new HashMap<String, String>(); map.put("ID", cursor.getString(0)); map.put("UserName", cursor.getString(1)); list.add(map); lvData.setAdapter(new SimpleAdapter(this, list, android.R.layout.simple_expandable_list_item_2, new String[]{"ID","UserName"}, new int[]{android.R.id.text1, android.R.id.text2})); 23. SQLiteDatabase中模拟使用Truncate方法清空数据表跟计数器的方法 先使用"DELETE FROM TableName"语句清空数据表数据 再使用"UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME=\"TableName\""置0计数器 下面是清空表“Users” try { mDatabase.execSQL("DELETE FROM Users"); mDatabase.execSQL("update sqlite_sequence set seq=0 where name=\"Users\""); } catch (SQLException se) { Toast.makeText(this, se.getMessage(), Toast.LENGTH_LONG).show(); se.printStackTrace(); } 24. 使用ADB以可读写方式重新挂载根目录,可以读写sbin文件夹 ./adb shell su mount -o remount,rw dev/block/mtdblock3 / 25. android中通过代码实现文件权限修改 try { String command = "chmod 777 " + destFile.getAbsolutePath(); Log.i("zyl", "command = " + command); Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec(command); } catch (IOException e) { Log.i("zyl","chmod fail!!!!"); e.printStackTrace(); } 26. Android 隐藏应用程序图标 把<category android:name="android.intent.category.LAUNCHER" />删除即可 27. 使用Tab分页内容。 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TabHost mTabHost = this.getTabHost(); Intent intent = new Intent(this, TabContent.class); intent.setAction(Intent.ACTION_VIEW); intent.putExtra("Yao.GUET", 0); mTabHost.addTab(mTabHost.newTabSpec("Tab_1") .setIndicator("Tab 1", getResources().getDrawable(R.drawable.icon)) .setContent(intent)); Intent intent2 = new Intent(this, TabContent.class); intent2.setAction(Intent.ACTION_VIEW); intent2.putExtra("Yao.GUET", 1); mTabHost.addTab(mTabHost.newTabSpec("Tab_2") .setIndicator("Tab 2", getResources().getDrawable(R.drawable.icon)) .setContent(intent2)); mTabHost.setCurrentTab(0); } 28. 设置透明背景,修改AndroidManifest.xml文件,在对应的Activity里面加上下面的属性: android:theme="@android:style/Theme.Translucent" 使用系统背景作为应用的背景,在onCreate的时候添加窗口标志: getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER); 29. |
|
来自: 知识储备库_wu... > 《我的图书馆》