【特】
1.WebView加载各种类型的网页
//打开本包内asset目录下的index.html文件wView.loadUrl(" file:///android_asset/index.html "); //打开本地sd卡内的index.html文件wView.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html");//打开指定URL的html文件wView.loadUrl(" http://m.oschina.net");
2.在一个应用程序中启动另外一个应用程序
Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName("com.android.androidweb", "com.android.androidweb.AndroidWeb"); //前面是包名,后面是主类名 intent.setComponent(cn);startActivity(intent);
下面记录一个很特殊的,是系统自带的相册程序:
Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName("com.android.gallery", "com.android.camera.GalleryPicker"); intent.setComponent(cn);startActivity(intent);
知道包名获取启动类的方法:
PackageManager pm = getPackageManager();PackageInfo pi;try { pi = pm.getPackageInfo("com.android.androidweb", 0);//此处加入包名~ Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); Listapps = pm.queryIntentActivities(resolveIntent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null ) { String packageName = ri.activityInfo.packageName; String className = ri.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); startActivity(intent); } } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
6.SQLite数据库中实现ID自增
将字段声明为:INTEGER PRIMARY KEY AUTOINCREMENT
7.读取返回的Cursor的内容
1 Cursor cursor = ThumbnailsImages.queryPicDirectory(getContentResolver()); 2 String display = ""; 3 cursor.moveToFirst(); 4 while(!cursor.isAfterLast()){ 5 display = display + cursor.getString(0) + "/"; 6 display = display + cursor.getString(1) + "/"; 7 cursor.moveToNext(); 8 } 9 view.setText(display);10 cursor.close();
10.文件过滤器
1 mFiles = mDirectory.listFiles(new FilenameFilter() { 2 public boolean accept(File file, String name) { 3 if (name.toLowerCase().endsWith(".pdf")) 4 return true; 5 if (name.toLowerCase().endsWith(".xps")) 6 return true; 7 if (name.toLowerCase().endsWith(".cbz")) 8 return true; 9 return false;10 }11 });12 13 Arrays.sort(mFiles, new Comparator() {14 public int compare(File arg0, File arg1) {15 return arg0.getName().compareToIgnoreCase(arg1.getName());16 }17 });
11.操作软键盘(出现和隐藏)
1 void showKeyboard() { 2 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 3 if (imm != null) 4 //mSearchText是一个搜索输入框(EditText) 5 imm.showSoftInput(mSearchText, 0); 6 } 7 8 void hideKeyboard() { 9 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);10 if (imm != null)11 imm.hideSoftInputFromWindow(mSearchText.getWindowToken(), 0);12 }
12.移动Dialog的位置
1 Dialog dialog = new Dialog(this); 2 3 // setContentView可以设置为一个View也可以简单地指定资源ID 4 // LayoutInflater 5 // li=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 6 // View v=li.inflate(R.layout.dialog_layout, null); 7 // dialog.setContentView(v); 8 dialog.setContentView(R.layout.dialog_layout); 9 10 dialog.setTitle("Custom Dialog");11 12 /* 13 * 获取圣诞框的窗口对象及参数对象以修改对话框的布局设置,14 * 可以直接调用getWindow(),表示获得这个Activity的Window15 * 对象,这样这可以以同样的方式改变这个Activity的属性.16 */17 Window dialogWindow = dialog.getWindow();18 WindowManager.LayoutParams lp = dialogWindow.getAttributes();19 dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);20 21 /*22 * lp.x与lp.y表示相对于原始位置的偏移.23 * 当参数值包含Gravity.LEFT时,对话框出现在左边,所以lp.x就表示相对左边的偏移,负值忽略.24 * 当参数值包含Gravity.RIGHT时,对话框出现在右边,所以lp.x就表示相对右边的偏移,负值忽略.25 * 当参数值包含Gravity.TOP时,对话框出现在上边,所以lp.y就表示相对上边的偏移,负值忽略.26 * 当参数值包含Gravity.BOTTOM时,对话框出现在下边,所以lp.y就表示相对下边的偏移,负值忽略.27 * 当参数值包含Gravity.CENTER_HORIZONTAL时28 * ,对话框水平居中,所以lp.x就表示在水平居中的位置移动lp.x像素,正值向右移动,负值向左移动.29 * 当参数值包含Gravity.CENTER_VERTICAL时30 * ,对话框垂直居中,所以lp.y就表示在垂直居中的位置移动lp.y像素,正值向右移动,负值向左移动.31 * gravity的默认值为Gravity.CENTER,即Gravity.CENTER_HORIZONTAL |32 * Gravity.CENTER_VERTICAL.33 * 34 * 本来setGravity的参数值为Gravity.LEFT | Gravity.TOP时对话框应出现在程序的左上角,但在35 * 我手机上测试时发现距左边与上边都有一小段距离,而且垂直坐标把程序标题栏也计算在内了,36 * Gravity.LEFT, Gravity.TOP, Gravity.BOTTOM与Gravity.RIGHT都是如此,据边界有一小段距离37 */38 lp.x = 100; // 新位置X坐标39 lp.y = 100; // 新位置Y坐标40 lp.width = 300; // 宽度41 lp.height = 300; // 高度42 lp.alpha = 0.7f; // 透明度43 44 // 当Window的Attributes改变时系统会调用此函数,可以直接调用以应用上面对窗口参数的更改,也可以用setAttributes45 // dialog.onWindowAttributesChanged(lp);46 dialogWindow.setAttributes(lp);47 48 /*49 * 将对话框的大小按屏幕大小的百分比设置50 */51 // WindowManager m = getWindowManager();52 // Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用53 // WindowManager.LayoutParams p = getWindow().getAttributes(); // 获取对话框当前的参数值54 // p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.655 // p.width = (int) (d.getWidth() * 0.65); // 宽度设置为屏幕的0.9556 // dialogWindow.setAttributes(p);57 58 dialog.show();
13.数据库操作
14.环形ProgressBar的实现
1 android:fromDegrees="0" 2 android:pivotX="50%" 3 android:pivotY="50%" 4 android:toDegrees="360" > 5 6 7 android:innerRadiusRatio="3" 8 android:shape="ring" 9 android:thicknessRatio="30"10 android:useLevel="false" >11 12 13 android:centerColor="#FFFFFF"14 android:centerY="0.01"15 android:endColor="#FFFFFF"16 android:startColor="#000000"17 android:type="sweep"18 android:useLevel="false" />
1
gradient里的属性没什么好介绍的, 这里主要是shape.
下列属性只在android:shape=”ring”时使用:
android:innerRadiux
尺寸值,它用尺寸值或尺寸资源指定圆环内部的半径(指中间的圆孔的半径)。
android:innerRadiusRatio
浮点值,它用圆环宽度的比率来表示内部圆环的半径。例如,如果android:innerRadiusRatio=”5”,那么内部半径就等于圆环的宽度除以5。这个值会被android:innerRadius的值覆盖。默认是9。
android:thickness
尺寸值,它用一个尺寸值或尺寸资源来定义圆环的厚度。
android:thicknessRatio
浮点值。它用圆环宽度的比率来表示圆环的厚度。例如,如果android:thicknessRatio=”2”,那么厚度就等于圆环的宽度除以2。这个值会被android:innerRadius覆盖。默认值是3。也就是说这个值设置的越大圆环就越细了。
android:useLevel
布尔值,如果这个形状要用于LevelListDrawable对象,那么就设置为true。通常应该设置为false或者让形状不可见。
15、Notification中如何打开一个已经存在的Activity?
Notification并不要求一定重新启动一个全新的Activity(如果已经存在),如果想要打开一个已经存在的Activity,则将生成PendingIntent的intent设置为:
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
即可。