转: http://www.it165.NET/pro/html/201504/38370.html?bsh_bid=950898232

  • 一、 获取系统版本号:

    view sourceprint?
    1.PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
    2.int versionCode=nfo.versionCode
    3.string versionName=info.versionNam

    二、获取系统信息:

    view sourceprint?
    01.String archiveFilePath="sdcard/download/Law.apk";//安装包路径
    02.PackageManager pm = getPackageManager();
    03.PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);
    04.if(info != null){
    05.ApplicationInfo appInfo = info.applicationInfo;
    06.String appName = pm.getApplicationLabel(appInfo).toString();
    07.String packageName = appInfo.packageName; //得到安装包名称
    08.String version=info.versionName; //得到版本信息
    09.Toast.makeText(test4.this"packageName:"+packageName+";version:"+version, Toast.LENGTH_LONG).show();
    10.Drawable icon = pm.getApplicationIcon(appInfo);//得到图标信息
    11.TextView tv = (TextView)findViewById(R.id.tv); //显示图标
    12.tv.setBackgroundDrawable(icon);

    三、获取安装路径和已安装程序列表

    view sourceprint?
    1.android中获取当前程序路径
    2.getApplicationContext().getFilesDir().getAbsolutePath()
    3.(2)android取已安装的程序列表
    4.List<PackageInfo> packageInfoList = getPackageManager().getInstalledPackages(0);

    四、获取图片、应用名、包名

    view sourceprint?
    01.PackageManager pManager = MessageSendActivity.this.getPackageManager();
    02.List<PackageInfo> appList = Utils.getAllApps(MessageSendActivity.this);
    03.for(int i=0;i<appList.size();i++) {
    04.PackageInfo pinfo = appList.get(i);
    05.ShareItemInfo shareItem = new ShareItemInfo();
    06.//set Icon
    07.shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
    08.//set Application Name shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
    09.//set Package Name shareItem.setPackageName(pinfo.applicationInfo.packageName);
    10.}

    五、解决listview上 Item上有按钮时 item本身不能点击的问题

    view sourceprint?
    1.1. 在item试图上面添加代码: android:descendantFocusability="blocksDescendants"
    2.2.在listview里 添加代码 android:focusable="true"

    六、不让文本框输入中文:

    view sourceprint?
    1.android:digits="1234567890qwertyuiopasdfghjklzxcvbnm`-=[];,./~!@#$%^*()_+}{:?&<>"'"
    2.这样就不会输入中文了。

    七、获取屏幕宽高

    view sourceprint?
    1.DisplayMetrics displayMetrics = new DisplayMetrics();
    2.this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    3.int height = displayMetrics.heightPixels;
    4.int width = displayMetrics.widthPixels;

    八、将TabWidget显示在屏幕下方

    view sourceprint?
    1.设置TabWidget的属性 android:layout_alignParentBottom="true"

    九、获取线程ID和线程名称:

    view sourceprint?
    1.Log.v("@@@@@@@@@@",Thread.currentThread().getId()+" "+Thread.currentThread().getName());

    十、android中调用其它android应用

    view sourceprint?
    1.ComponentName comp = new ComponentName("com.Test","com.login.Main");
    2.intent = new Intent();
    3.intent.setComponent(comp);
    4.intent.setAction("android.intent.action.VIEW");
    5.startActivity(intent);

    十一、禁止软键盘弹出

    EditText有焦点(focusable为true)阻止输入法弹出 editText.setInputType(InputType.TYPE_NULL); // 关闭软键盘 当EidtText无焦点(focusable=false)时阻止输入法弹出

    view sourceprint?
    1.InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
    2.imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

    【Android】EditText标签调用键盘
    在xml文件中EditText标签有一个属性android:editable="false"和android:numeric="integer"

    android:numeric="integer"表示只允许输入数字,此属性可以限制用户只能输入数字内容。
    android:editable表示是否可以输入内容TRUE表示可以输入,false表示不允许输入内容;
    当为android:editable="false"时,点击输入框,虚拟键盘是显示不出来的,不过当设置了 android:editable=""属性时,不管是false还是true,在其后加入android:numeric="integer"属性时,是可以输入数字内容了;这里没搞明白是怎么回事,也许是numeric把前面的属性覆盖掉了。
    当android:editable="false"时,在java类里如果再规定EditText.setEnabled(true)时,虚拟键盘还是不会显示的。

    十二、模拟器的各种规格与分辨率对照:

    view sourceprint?
    1.单位:像素
    2.WVGA854: 854*480
    3.WVGA800: 800*480
    4.HVGA: 480*320
    5.QVGA: 320*240
    6.WQVGA432:432*240
    7.WQVGA400:400*240

    十三、调用Android其他Context的Activity

    view sourceprint?
    1.Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
    2.//载入这个类
    3.Class clazz = c.getClassLoader().loadClass("chroya.demo.Main");
    4.//新建一个实例
    5.Object owner = clazz.newInstance();
    6.//获取print方法,传入参数并执行
    7.Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello");

    这个方法有两个参数:
    1、packageName 包名,要得到Context的包名
    2、 flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。 CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思 是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。

    十四、android4.0Dialog风格小技巧

    4.0上如果还用Theme.Dialog,只能说很土,跟整体UI风格差别很大

    请使用Android:theme="@android:style/Theme.Holo.DialogWhenLarge"

    十五、程序中安装apk(其中“apk”为你要安装的那个文件)

    view sourceprint?
    1.Intent intent = new Intent();          
    2.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    3.intent.setAction(android.content.Intent.ACTION_VIEW);
    4.intent.setDataAndType(Uri.fromFile(“APK”),"application/vnd.android.package-archive");
    5.startActivity(intent);

    十六、获取设备型号、SDK版本及系统版本

    view sourceprint?
    1.String device_model = Build.MODEL; // 设备型号 
    2.String version_sdk = Build.VERSION.SDK; // 设备SDK版本 
    3.String version_release = Build.VERSION.RELEASE; // 设备的系统版本

    十七、图片分析功能

    view sourceprint?
    1.public void SharePhoto(String photoUri,final Activity activity) { 
    2.Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    3.File file = new File(photoUri); 
    4.shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); 
    5.shareIntent.setType("image/jpeg"); 
    6.StartActivity(Intent.createChooser(shareIntent, activity.getTitle())); 
    7.}

    十八、linux关机命令(乱入一条

    在Windows下,按着电源键4秒强制关机,在Linux下强烈不建议这么做。Windows由于是单用户、“假多”任务的情况,所以即使你的计算机关机,也不会对别人造成影响。不过在Linux中,由于每个程序都是在后台执行的,因此,在你看不到的屏幕背后可能有很多人同时在你的主机上工作。而且,若不正常关机可能会造成文件系统的损毁。所以,正常情况下,要关机时需要注意下面几件事情:

    (1)查看系统的使用状态。

    要看目前有谁在线,可以用who命令。要看网络的联机状态,可以用netstat-a命令。要看后台执行那个的程序可以执行ps-aux命令。

    (2)通知在线用户的关机时刻

    这个时候可以使用shutdown命令

    view sourceprint?
    01.Shutdown命令:
    02.语法:shutdown[-t秒][-arkhncfF]时间 警告消息
    03.-t:后面加描述表示过几秒之后关机。
    04.-k:不是真的关机,仅仅发出警告消息。
    05.-r:将系统服务停掉之后重启。
    06.-h:将系统服务停掉之后立即关机。
    07.-f:关机并开机之后,强制跳过fsck的磁盘检查。
    08.-F:系统重启之后,强制进行fsck的磁盘检查。
    09.-c:取消已经进行的shutdown命令内容。
    10. 
    11.另外,重启关机命令有reboot、halt、poweroff。其实在默认情况下,都完成一样的工作。
    12.halt先调用shutdown,而shutdown最后调用halt。不过,shutdown可以根据目前已经启动的服务来逐次关闭服务后才关机;而halt能够在不理会目前系统情况下,进行硬件关机的特殊功能。
    13. 
    14.除了这些,还有一个关机命令是init 0
    15.init是切换执行等级的命令。Linux共有7种执行等级,比较重要的是下面4种等级:
    16.run level 0:关机
    17.run level 3:纯命令行模式
    18.run level 5:含有图形界面模式
    19.run level 6:重启

    十九、让自己的应用不被kill掉

    可以在frameworksaseservicesjavacomandroidserveramActivityManagerService.java这个类的forceStopPackage中加一个条件:

    view sourceprint?
    01.public void forceStopPackage(final String packageName) {
    02.if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES)
    03.!= PackageManager.PERMISSION_GRANTED) {
    04.String msg = "Permission Denial: forceStopPackage() from pid="
    05.+ Binder.getCallingPid()
    06.", uid=" + Binder.getCallingUid()
    07." requires " + android.Manifest.permission.FORCE_STOP_PACKAGES;
    08.Slog.w(TAG, msg);
    09.throw new SecurityException(msg);
    10.}       
    11.long callingId = Binder.clearCallingIdentity();
    12.try {
    13.IPackageManager pm = ActivityThread.getPackageManager();
    14.int pkgUid = -1;
    15.synchronized(this) {
    16.try {
    17.pkgUid = pm.getPackageUid(packageName);
    18.catch (RemoteException e) {
    19.}
    20.if (pkgUid == -1) {
    21.Slog.w(TAG, "Invalid packageName: " + packageName);
    22.return;
    23.}
    24.//begin:加入一个判断条件
    25.if (packageName.equals("你的进程名")) {
    26.return;
    27.}
    28.//end: 加入一个判断条件                                forceStopPackageLocked(packageName, pkgUid);
    29.}
    30.finally {
    31.Binder.restoreCallingIdentity(callingId);
    32.}
    33.}

    这样的话在任务管理器里可以保证KISS不掉的;
    还有在这个方法上还有个方法clearApplicationUserData中保证如果是该进程就不让调用forceStopPackage()方法。

    另:其他方法: 1,首先在你的service的onDestory方法里面写上启动你自己的代码,为什么要写这个?因为如果用户是在设置->应用程序->正在运行服务这里面杀掉你service的话会调用到onDestory方法的,这里就可以启动了, 2:监听屏幕关闭广播,屏幕已关闭,就启动服务。 3:监听屏幕解锁广播,一样的道理,这样,基本上,你的service就达到永不停止了。对用户来说有点变态,但很多软件都这样。

    二十、EditText获取焦点:

    view sourceprint?
    1.EditText.requestFoucus()

    二十一、获取手机屏幕分辨率

    view sourceprint?
    1.DisplayMetrics  dm = new DisplayMereics(); 
    2. 
    3.getWindowManager().getDefaultDisplay().getMetrics(dm); 
    4. 
    5.float width = dm.widthPixels * dm.density; 
    6. 
    7.float height = dm.heightPixels * dm.density

    二十二、在Activity里面播放背景音乐

    view sourceprint?
    1.public void onCreate(Bundle savedInstanceState) { 
    2.super.onCreate(savedInstanceState); 
    3.setContentView(R.layout.mainlay); 
    4.mediaPlayer = MediaPlayer.create(this, R.raw.mu); 
    5.mediaPlayer.setLooping(true); 
    6.mediaPlayer.start(); 
    7. 
    8.

    二十三、让程序的界面不随机器的重力感应而翻转

    第一种方法,在manifast文件里面

    view sourceprint?
    1.<activity 
    2.android:screenOrientation="portrait"
    3.</activity>

    第二种,在代码里面

    view sourceprint?
    1.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    二十四、使activity全屏显示

    view sourceprint?
    1.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    2.getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,WindowManager.LayoutParams. FLAG_FULLSCREEN);

    二十五、在RelativeLayout中使selector要注意点

    关于selector的使用方法,可以参考http://blog.csdn.net/aomandeshangxiao/article/details/6759576这篇文章,今天,遇到在RelativeLayout中添加background为selector后没有反应的问题,寻摸了很长时间,一直没有找到原因,其实只要加上一句代码就完全可以解决:

    view sourceprint?
    1.RelativeLayout 里面加上android:clickable="true"

    二十六、显示或隐藏虚拟键盘

    view sourceprint?
    1.显示: 
    2.InputMethodManager imm = (InputMethodManager)(getSystemService(Context.INPUT_METHOD_SERVICE)); 
    3.imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
    4. 
    5.隐藏: 
    6.InputMethodManager imm = (InputMethodManager)(getSystemService(Context.INPUT_METHOD_SERVICE)); 
    7.imm.hideSoftInputFromWindow(m_edit.getWindowToken(), 0);

    二十七、退出程序时清除通知中信息

    view sourceprint?
    1.NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    2.nm.cancelAll();

    二十八、创建快捷方式

    view sourceprint?
    1.Intent intent=new Intent(); 
    2.//设置快捷方式的图标 
    3.intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.img)); 
    4.//设置快捷方法的名称 
    5.intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "点击启动哥的程序");            //设置点击快键图标的响应操作

    view sourceprint?
    1.intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(this,MainActivity.class)); 
    2.//传递Intent对象给系统 
    3.setResult(RESULT_OK, intent); 
    4.finish();

    二十九、获取文件中的类名:

    view sourceprint?
    1.String path = context.getPackageManager().getApplicationInfo( 
    2.context.getPackageName(), 0).sourceDir; 
    3.DexFile dexfile = new DexFile(path); 
    4.Enumeration<String> entries = dexfile.entries(); 
    5.while (entries.hasMoreElements()) { 
    6.String name = (String) entries.nextElement(); 
    7....... 
    8.}

    三十. TextView中的getTextSize返回值是以像素(px)为单位的,

    而setTextSize()是以sp为单位的.

    所以如果直接用返回的值来设置会出错,解决办法是:

    用setTextSize()的另外一种形式,可以指定单位

    view sourceprint?
    1.TypedValue.COMPLEX_UNIT_PX : Pixels   
    2.TypedValue.COMPLEX_UNIT_SP : Scaled Pixels   
    3.TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels

    三十一. 在继承自View时,绘制bitmap时,需要将图片放到新建的drawable-xdpi

    中,否则容易出现绘制大小发生改变

    三十二. 在文字中加下划线: textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

    三十三. scrollView是继承自frameLayout,所以在使用LayoutParams时需要用frameLayout的

    三十四、android阴影字体设置

    view sourceprint?
    01.<TextView 
    02.android:id="@+id/tvText1"  
    03.android:layout_width="wrap_content"  
    04.android:layout_height="wrap_content"  
    05.android:text="text1"  
    06.android:textSize="30sp"  
    07.android:textStyle="bold"  
    08.android:textColor="#FFFFFF"  
    09.android:shadowColor="#ff0000ff" 
    10.android:shadowDx="5" 
    11.android:shadowDy="5"      
    12.android:shadowRadius="10"/>

    android:shadowColor 阴影颜色

    android:shadowDx 阴影的水平偏移量

    android:shadowDy 阴影的垂直偏移量

    android:shadowRadius 阴影的范围

    为了统一风格和代码的复用,通常可以把这个样式抽取放入到style.xml文件中

    view sourceprint?
    01.<?xml version="1.0" encoding="utf-8"?> 
    02.<resources> 
    03.<style name="textstyle">        
    04.<item name="android:shadowColor">#ff0000ff</item> 
    05.<item name="android:shadowRadius">10</item> 
    06.<item name="android:shadowDx">5</item> 
    07.<item name="android:shadowDy">5</item>      
    08.</style> 
    09.</resources>

    view sourceprint?
    1.<TextView 
    2.style="@style/textstyle" 
    3.android:layout_width="fill_parent" 
    4.android:layout_height="wrap_content" 
    5.android:text="字体样式" 
    6.android:textSize="30sp" 
    7.android:textStyle="bold" />

    三十五、android实现手机震动功能(这个还可以创建一个数组来控制震动,达到震动几秒然后再震动几秒,,你懂得)

    view sourceprint?
    01.import android.app.Activity; 
    02.import android.app.Service; 
    03.import android.os.Vibrator; 
    04. 
    05.public class TipHelper {  
    06.public static void Vibrate(final Activity activity, long milliseconds) { 
    07.Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); 
    08.vib.vibrate(milliseconds); 
    09.
    10.public static void Vibrate(final Activity activity, long[] pattern,boolean isRepeat) { 
    11.Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); 
    12.vib.vibrate(pattern, isRepeat ? 1 : -1); 
    13.
    14.}

    还需要在AndroidManifest.xml 中添加震动权限:

    view sourceprint?
    1.<uses-permission android:name="android.permission.VIBRATE" />

    通过上面操作,我们可以使用TipHelper所定义的函数了。两个Vibrate函数的参数简单介绍如下:

    final Activity activity :调用该方法的Activity实例

    long milliseconds :震动的时长,单位是毫秒

    long[] pattern :自定义震动模式 。数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长。。。]时长的单位是毫秒

    boolean isRepeat : 是否反复震动,如果是true,反复震动,如果是false,只震动一次

    三十六、常用的正则表达式

    ^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$    //email地址
    ^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$  //url
    ^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$ //年-月-日
    ^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$ //月/日/年
    ^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$ //Emil
    ^((+?[0-9]{2,4}-[0-9]{3,4}-)|([0-9]{3,4}-))?([0-9]{7,8})(-[0-9]+)?$ //电话号码
    ^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$ //IP地址

    (^s*)|(s*$) // 首尾空格

    ^[a-zA-Z][a-zA-Z0-9_]{4,15}$ // 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)

    ^[1-9]*[1-9][0-9]*$ // 腾讯QQ号

    三十七、输入框不挤压activity布局

    在manifest的activity下添加

    1. android:windowSoftInputMode="adjustPan"

      三十八、listview中item中button可点击:

      view sourceprint?
      1.android:descendantFocusability="blocksDescendants"

      三十九、获取移动设备的IP地址:

      view sourceprint?
      01.public class Tools { 
      02.public static String getLocalIpAddress() {   
      03.try {   
      04.for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {   
      05.NetworkInterface intf = en.nextElement();   
      06.for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {   
      07.InetAddress inetAddress = enumIpAddr.nextElement();   
      08.if (!inetAddress.isLoopbackAddress()) {   
      09.return inetAddress.getHostAddress().toString();   
      10.}   
      11.}   
      12.}   
      13.catch (SocketException ex) {   
      14.Log.e("出错啦", ex.toString());   
      15.}   
      16.return null;   
      17.}   
      18.
      19.然后 
      20.WifiManager wm = (WifiManager)getSystemService(WIFI_SERVICE); 
      21.WifiInfo wi = wm.getConnectionInfo(); 
      22.System.out.println("IP地址是:"+Tools.getLocalIpAddress()); 
      23.System.out.println("SSID:"+wi.getSSID()); 
      24.最后记得加两个权限 
      25.<uses-permission android:name="android.permission.INTERNET"/> 
      26.<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

      四十、高仿小米launcher跨屏拖动item(GridView长按item进行拖动

      触发长按事件后浮动原理:

      view sourceprint?
      01.windowParams = new WindowManager.LayoutParams(); 
      02.  windowParams.gravity = Gravity.TOP | Gravity.LEFT; 
      03.  windowParams.x = x - itemWidth / 2
      04.  windowParams.y = y - itemHeight / 2
      05.  windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; 
      06.  windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; 
      07.  ImageView iv = new ImageView(getContext()); 
      08.  iv.setImageBitmap(bm); 
      09.  windowManager = (WindowManager) getContext().getSystemService( 
      10.  Context.WINDOW_SERVICE);// "window" 
      11.  windowManager.addView(iv, windowParams);

      拖动效果:

      view sourceprint?
      1.if (dragImageView != null) { 
      2.  windowParams.alpha = 0.6f; 
      3.  windowParams.x = x - itemWidth / 2
      4.  windowParams.y = y - itemHeight / 2
      5.  windowManager.updateViewLayout(dragImageView, windowParams); 
      6.  }

      四十一、数据库写入图片信息:

      view sourceprint?
      01.数据库中的字段设置为 binary类型
      02.Bitmap bitmap = BitmapFactory.decodeFile(path);
      03.ByteArrayOutputStream baos = new ByteArrayOutputStream();
      04.bitmap.compress(CompressFormat.JPEG, 50, baos);
      05.String sql = "insert into pic_info(pic_data, pic_name,pic_size,send_date,is_success) " +"values(?,?,?,?,?)";
      06.Object[] args = new Object[]{baos.toByteArray(), name, size, now, isSucess};
      07.db.insert(sql, args);
      08.读取数据库的图片信息:
      09.byte[] picData = cursor.getBlob(cursor.getColumnIndex("pic_data"));
      10.bitmap.setImageBitmap(BitmapFactory.decodeByteArray(picData, 0, picData.length));

      四十二、listView的addView的问题。

      在listView里使用addView()、addFooterView(v)、addHeaderView(v)时,要在setAdepter以前添加,或者在重写的Adapter中添加。因为setAdapter以后,就是listView已经绘制完毕,不能再进行添加。

      四十三、progressBar修改颜色

      有的时候,我们使用progressBar的时候,后面的背景色是白色或者是亮色,使得progressBar效果很不明显,所以,我们可以在下面三条中随意添加一条熟悉就可以了:

      view sourceprint?
      1.<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/>
      2.<ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/>
      3.<ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/>

      四十四、窗口透明(背景模糊等)

      先看下效果图:

      第一种效果:

      在styles.xml中定义

      view sourceprint?
      1.<style name="Theme.Translucent" parent="android:style/Theme.Translucent">
      2.<item name="android:windowBackground">
      3.@drawable/translucent_background
      4.</item>
      5.<item name="android:windowNoTitle">true</item>
      6.<item name="android:colorForeground">#fff</item>
      7.</style>

      第二种效果是在源代码里面修改,在onCreate方法里面添加:

      view sourceprint?
      1.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
      2.setContentView(R.layout.translucent_background);

      设置模糊效果是通过窗口管理器(WindowManager)设置参数来完成的,这种设置只有在背景设置为透明后才能显示效果。

      四十五、Android输入框和文本框滚动条ScrollView

      我们都知道EditText与TextView是Android的文本输入框和文本显示框,但是基于手机屏幕的大小因素,如果在需要输入较多文字或者显示较多内容的时候,手机屏幕是远远不够的,因此让文本框具有滚动条的功能是手机上必备的,要加上滚动条,其实很简单,只需要在文本输入框或者文本显示框上面加上滚动条控件即可,该控件名字为ScrollView,以下我们对比下(以TextView举例)。

      view sourceprint?
      01.<ScrollView
      02.android:id="@+id/scrollView"
      03.android:layout_width="fill_parent"
      04.android:layout_height="200px"
      05.android:scrollbarStyle="outsideOverlay" android:background="@android:drawable/edit_text">
      06.<TextView
      07.android:layout_width="fill_parent"
      08.android:layout_height="wrap_content"
      09.android:id="@+id/textView"
      10./>
      11.</ScrollView>

      四十六、Android模拟器启动内存错误(内存不能为read)

如图

运行模拟器的时候总是会内存错误。

这种情况偶尔出现,没什么关系,不用管他。点击‘取消’就可以了。

经常出现就危险了,弄不好就得重装系统了。

运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。
“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。
“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。
一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件

开始 运行 输入:cmd 确定:

在DOS提示符下输入:

for %1 in (%windir%system32*.dll) do regsvr32.exe /s %1

等待3分钟,左右后,搞定了。(如果怕输错,就把这句话复制上去)。

四十七、通过路径获取媒体文件信息

通过路径获取媒体文件信息 http://blog.csdn.Net/aomandeshangxiao/article/details/6600725

四十八、Java中有用的文件操作

Java文件操作 http://blog.csdn.net/aomandeshangxiao/article/details/6597302

四十九、Android文件读写

Android文件的读写 http://blog.csdn.net/aomandeshangxiao/article/details/6589510

五十、 scaleType属性与ImagView中图片的显示的关系

五十一、 Notification的属性notification的各种属性:

http://blog.csdn.net/aomandeshangxiao/article/details/6608101

五十二、Android控件实现震动:

先在res下面新创建anim文件夹,在该文件夹中创建shake.xml文件:

view sourceprint?
1.<?xml version="1.0" encoding="utf-8"?>
2.<translate xmlns:android="http://schemas.android.com/apk/res/android"
3.android:duration="1000"
4.android:fromYDelta="0"
5.android:toYDelta="10"
6.android:fromXDelta="0"
7.android:toXDelta="10"
8.android:interpolator="@anim/cycle_7" />

最后引用了cycle_7,再在该文件夹中创建cycle_7.xml文件

view sourceprint?
1.<?xml version="1.0" encoding="utf-8"?>
2. 
3.<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
4.android:cycles="10" />

在Java代码里面:

view sourceprint?
1.Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
2.findViewById(R.id.image).startAnimation(shake);

五十三、Android 页面切换动画效果

http://hi.baidu.com/fountainblog/blog/item/66cb9918b0220eaa4bedbc2e.html

五十四、Android2.2完全退出程序

http://www.eoeandroid.com/thread-62284-1-1.html

五十五、Android按下back键非退出隐藏到后台

view sourceprint?
01.public boolean onKeyDown(int keyCode, KeyEvent event) { 
02.if (keyCode == KeyEvent.KEYCODE_BACK) { 
03.Intent intent = new Intent(Intent.ACTION_MAIN); 
04.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
05.intent.addCategory(Intent.CATEGORY_HOME); 
06.startActivity(intent); 
07.return true
08.
09.return super.onKeyDown(keyCode, event); 
10.}

五十六、在Android开发中使用Gallery实现多级联动

http://mobile.51cto.com/hot-230282.htm

五十七、获取view在屏幕中的位置:

view sourceprint?
1.int[] points = { 00 };
2.view.getLocationInWindow(points);

这里用数组存储view的x和y坐标,point[0]是x坐标,point[1]是y坐标。

五十八、在图形中添加文字

view sourceprint?
01.@Override
02.protected synchronized void onDraw(Canvas canvas) {
03.super.onDraw(canvas);
04.Rect rect = new Rect();
05.this.mPaint.getTextBounds(this.text, 0this.text.length(), rect);
06.int x = (getWidth() / 2) - rect.centerX();
07.int y = (getHeight() / 2) - rect.centerY();
08.canvas.drawText(this.text, x, y, this.mPaint);
09.}

五十九、使用Vibrator实现手机震动

view sourceprint?
01.@Override
02.public boolean onTouchEvent(MotionEvent event) {
03. 
04.if(event.getAction() == MotionEvent.ACTION_DOWN){
05.vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
06.long[] pattern = {80040,40030}; // OFF/ON/OFF/ON...
07.vibrator.vibrate(pattern, 2);//-1不重复,非-1为从pattern的指定下标开始重复
08.}
09.return super.onTouchEvent(event);
10.}

六十、界面重绘

invalidate()或者view.postinvalidate()方法

六十一、Android创建桌面快捷方式:

view sourceprint?
01./**
02.* 为程序创建桌面快捷方式
03.*/
04.private void addShortcut(){ 
05.Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 
06. 
07.//快捷方式的名称 
08.shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); 
09.shortcut.putExtra("duplicate"false); //不允许重复创建 
10. 
11.//指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer 
12.//注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序 
13.ComponentName comp = new ComponentName(this.getPackageName(), "."+this.getLocalClassName()); 
14.shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); 
15. 
16.//快捷方式的图标 
17.ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); 
18.shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes); 
19. 
20.sendBroadcast(shortcut); 
21.}

需要声明权限

view sourceprint?
1.<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

参考博客:

http://www.cnblogs.com/-OYK/archive/2011/05/31/2064797.html

http://www.apkbus.com/android-17389-1-1.html

http://dev.10086.cn/cmdn/wiki/index.php?edition-view-8836-1.html

六十二、android画图去锯齿效果

paint.setAntiAlias(true);

画图片的时候,前面设置没有用

canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTE

六十三、获取sd卡里文件信息

view sourceprint?
01.public class SDFileExplorer extends Activity{
02.ListView listView;
03.TextView textView;
04.// 记录当前的父文件夹
05.File currentParent;
06.// 记录当前路径下的所有文件的文件数组
07.File[] currentFiles;
08. 
09.@Override
10.public void onCreate(Bundle savedInstanceState){
11.super.onCreate(savedInstanceState);
12.setContentView(R.layout.main);
13.//获取列出全部文件的ListView
14.listView = (ListView) findViewById(R.id.list);
15.textView = (TextView) findViewById(R.id.path);
16.//获取系统的SD卡的目录
17.File root = new File("/mnt/sdcard/");
18.//如果 SD卡存在
19.if (root.exists()){
20.currentParent = root;
21.currentFiles = root.listFiles();
22.//使用当前目录下的全部文件、文件夹来填充ListView
23.inflateListView(currentFiles);
24.}
25.// 为ListView的列表项的单击事件绑定监听器
26.listView.setOnItemClickListener(new OnItemClickListener(){
27.@Override
28.public void onItemClick(AdapterView<?> parent, View view,
29.int position, long id){
30.// 用户单击了文件,直接返回,不做任何处理
31.if (currentFiles[position].isFile())
32.return;
33.// 获取用户点击的文件夹下的所有文件
34.File[] tmp = currentFiles[position].listFiles();
35.if (tmp == null || tmp.length == 0){
36.Toast.makeText(SDFileExplorer.this"当前路径不可访问或该路径下没有文件",
37.20000).show();
38.}else{
39.//获取用户单击的列表项对应的文件夹,设为当前的父文件夹
40.currentParent = currentFiles[position];
41.//保存当前的父文件夹内的全部文件和文件夹
42.currentFiles = tmp;
43.// 再次更新ListView
44.inflateListView(currentFiles);
45.}
46.}
47.});
48.// 获取上一级目录的按钮
49.Button parent = (Button) findViewById(R.id.parent);
50.parent.setOnClickListener(new OnClickListener(){
51.@Override
52.public void onClick(View source){
53.try{
54.if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")){
55.// 获取上一级目录
56.currentParent = currentParent.getParentFile();
57.// 列出当前目录下所有文件
58.currentFiles = currentParent.listFiles();
59.// 再次更新ListView
60.inflateListView(currentFiles);
61.}
62.}
63.catch (IOException e){
64.e.printStackTrace();
65.}
66.}
67.});
68.}
69. 
70.private void inflateListView(File[] files){
71.// 创建一个List集合,List集合的元素是Map
72.List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
73.for (int i = 0; i < files.length; i++){
74.Map<String, Object> listItem = new HashMap<String, Object>();
75.//如果当前File是文件夹,使用folder图标;否则使用file图标
76.if (files[i].isDirectory()){
77.listItem.put("icon", R.drawable.folder);
78.}else{
79.listItem.put("icon", R.drawable.file);
80.}
81.listItem.put("fileName", files[i].getName());
82.//添加List项
83.listItems.add(listItem);
84.}
85.// 创建一个SimpleAdapter
86.SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
87.R.layout.line, new String[] { "icon""fileName" }, new int[] {
88.R.id.icon, R.id.file_name });
89.// 为ListView设置Adapter
90.listView.setAdapter(simpleAdapter);
91.try{
92.textView.setText("当前路径为:" + currentParent.getCanonicalPath());
93.}catch (IOException e){
94.e.printStackTrace();
95.}
96.}
97.}

六十四、Android标题栏显示progressBar

view sourceprint?
1.protected void onCreate(Bundle savedInstanceState) {
2.super.onCreate(savedInstanceState);
3.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能
4.setContentView(R.layout.main);
5.setProgressBarIndeterminateVisibility(true);//在需要显示进度条的时候调用这个方法
6.setProgressBarIndeterminateVisibility(false);//在不需要显示进度条的时候调用这个方法
7.}

六十五、单击EditText全选内容

view sourceprint?
01.percent.setOnTouchListener(this);
02. 
03.@Override
04.public boolean onTouch(View v, MotionEvent event) {
05.if(v.getId()==R.id.seekPercent) {
06.percent.selectAll();
07.InputMethodManager imm = (InputMethodManager)
08.context.getSystemService(Context.INPUT_METHOD_SERVICE);
09.imm.showSoftInput(v, 0);
10.return true;
11.}
12.return false;
13.}

六十六、Android设置图片圆角

view sourceprint?
01./**
02.* 将图片设置为圆角
03.*/
04.public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
05.Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
06.bitmap.getHeight(), Config.ARGB_8888);
07.Canvas canvas = new Canvas(output);
08.final int color = 0xff424242;
09.final Paint paint = new Paint();
10.final Rect rect = new Rect(00, bitmap.getWidth(), bitmap.getHeight());
11.final RectF rectF = new RectF(rect);
12.final float roundPx = pixels;
13.paint.setAntiAlias(true);
14.canvas.drawARGB(0000);
15.paint.setColor(color);
16.canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
17.paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
18.canvas.drawBitmap(bitmap, rect, rect, paint);
19.return output;
20.}

六十七、把图片转换成圆形

view sourceprint?
01.bitmap = ((BitmapDrawable)imageView1.getDrawable()).getBitmap();
02.bitmap = getRoundedCornerBitmap(bitmap);
03.imageView1.setImageBitmap(bitmap);
04. 
05.public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
06.Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
07.bitmap.getHeight(), Config.ARGB_8888);
08.Canvas canvas = new Canvas(output);
09. 
10.final int color = 0xff424242;
11.final Paint paint = new Paint();
12.final Rect rect = new Rect(00, bitmap.getWidth(), bitmap.getHeight());
13.final RectF rectF = new RectF(rect);
14.final float roundPx = bitmap.getWidth() / 2;
15. 
16.paint.setAntiAlias(true);
17.canvas.drawARGB(0000);
18.paint.setColor(color);
19.canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
20. 
21.paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
22.canvas.drawBitmap(bitmap, rect, rect, paint);
23.return output;
24.}

六十八、TextView高级应用

1. 自定义字体

可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的 Typeface又使用TTF字体文件来设置字体

所以,我们可以在程序中放入TTF字体文件,在程序中使用Typeface来设置字体:第一步,在assets目录下新建fonts目录,把TTF字体文件放到这里。第二步,程序中调用:

TextViewtv = (TextView)findViewById(R.id.textView);

AssetManagermgr=getAssets();//得到AssetManager

Typefacetf=Typeface.createFromAsset(mgr, "fonts/mini.TTF");//根据路径得到Typeface

tv.setTypeface(tf);//设置字体

效果如下图所示:

2. 显示多种颜色的字

Android支持html格式的字符串,通过调用Html.fromHtml(str)方法可以转换html格式的字符串str。

示例如下:

StringtextStr1 = "<font color="#ffff00">如果有一天,</font><br>";

StringtextStr2 = "<font color="#00ff00">我厌倦了这里,</font><br>";

StringtextStr3 = "<font color="#ff00ff">我会乘着梦,</font><br>";

StringtextStr4 = "<font color="#00ffff">飞向那个属于自己的<br>世界……</font><br>";

tv.setText(Html.fromHtml(textStr1+textStr2+textStr3+textStr4));

运行后效果如下:

3. 字体加粗

在xml布局文件中使用android:textStyle=”bold”可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:使用TextPaint的仿“粗体”设置setFakeBoldText为true。示例代码如下:

tv.getPaint().setFakeBoldText(true);

效果如下:

4. 添加阴影

在xml布局文件中使用一系列android:shadowXXX属性可添加设置阴影。具体为:shadowColor设置阴影颜色;shadowDx设置阴影水平偏移量;shadowDy设置阴影垂直偏移量;shadowRadius设置阴影半径。

示例代码:

android:shadowColor="#ffffff"

android:shadowDx="15.0"

android:shadowDy="5.0"

android:shadowRadius="2.5"

显示效果如下:

5. 插入图片

插入图片有两种方法,第一种方法就是用上面说的html格式的字符串,不过转换稍微有些麻烦。需要用到ImageGetter类来对图片的src属性进行转换。示例代码如下:

StringimgStr = "<img src=""+R.drawable.sidai+""/>";

Html.ImageGetterimageGetter = new Html.ImageGetter() {

public Drawable getDrawable(Stringarg0) {

// TODO Auto-generated methodstub

int id =Integer.parseInt(arg0);

Drawable draw =getResources().getDrawable(id);

draw.setBounds(10, 10, 228,300);

return draw;

}

};

tv.append(Html.fromHtml(imgStr,imageGetter,null));

第二种方法是使用xml布局文件中一系列android:drawableXXX属性来实现插入图片。具体为:drawableBottom是在文本框内文本的底端绘制指定图像;drawableLeft是在文本框内文本的左边绘制指定图像;drawableRight是在文本框内文本的右边绘制指定图像;drawableTop是在文本框内文本的顶端绘制指定图像;drawablePadding设置文本框内文本与图像之间的间距。示例代码:

android:drawableBottom=”@drawable/sidai”

插入图片后的显示效果如下:

六十九、资源plurals表示数量的各种方式,

比如:一个教室有多少学生。考虑下面的例子:
there is 1 student;
there are 2 students;
there are 50 students;
显然对于2,50句子格式是一样的,对于1不同,Android支持将这种变体表示为plurals资源。

view sourceprint?
01.<pre name="code" class="html">    <?xml version="1.0" encoding="utf-8"?> 
02.<resources> 
03.<string name="hello">Hello World, Resource_Plurals!</string> 
04.<string name="app_name">Resource_Plurals</string> 
05.<plurals name="student"
06.<item quantity="one">There is 1 student</item> 
07.<item quantity="other">There are %d  students</item> 
08.</plurals> 
09.</resources>

view sourceprint?
1. 

在Java代码中获取定义的plurals资源

view sourceprint?
01.public class Resource_Plurals extends Activity { 
02./** Called when the activity is first created. */ 
03.@Override 
04.public void onCreate(Bundle savedInstanceState) { 
05.super.onCreate(savedInstanceState); 
06.setContentView(R.layout.main); 
07. 
08.Resources r = getResources(); 
09.String s1 = r.getQuantityString(R.plurals.student, 1,1); 
10.Log.i("plurals", s1); 
11.String s2 = r.getQuantityString(R.plurals.student, 2,2); 
12.Log.i("plurals", s2); 
13.String s3 = r.getQuantityString(R.plurals.student, 50,50); 
14.Log.i("plurals", s3); 
15. 
16.
17.}

七十、Android 自定义json解析类

view sourceprint?
001.import java.lang.reflect.Method; 
002.import java.util.Collection; 
003.import java.util.Map; 
004.import java.util.Set; 
005.public final class JsonUtil{ 
006./**
007.* 把对象封装为JSON格式
008.*
009.* @param o
010.* 对象
011.* @return JSON格式
012.*/ 
013.@SuppressWarnings"unchecked") 
014.public static String toJson(final Object o){ 
015.if (o == null){ 
016.return "null"; 
017.
018.if (o instanceof String) //String{ 
019.return string2Json((String) o); 
020.
021.if (o instanceof Boolean) //Boolean{ 
022.return boolean2Json((Boolean) o); 
023.
024.if (o instanceof Number) //Number{ 
025.return number2Json((Number) o); 
026.
027.if (o instanceof Map) //Map{ 
028.return map2Json((Map<String, Object>) o); 
029.
030.if (o instanceof Collection) //List Set{ 
031.return collection2Json((Collection) o); 
032.
033.if (o instanceof Object[]) //对象数组{ 
034.return array2Json((Object[]) o); 
035.
036.if (o instanceof int[])//基本类型数组 
037.
038.return intArray2Json((int[]) o); 
039.
040.if (o instanceof boolean[])//基本类型数组 
041.
042.return booleanArray2Json((boolean[]) o); 
043.
044.if (o instanceof long[])//基本类型数组 
045.
046.return longArray2Json((long[]) o); 
047.
048.if (o instanceof float[])//基本类型数组 
049.
050.return floatArray2Json((float[]) o); 
051.
052.if (o instanceof double[])//基本类型数组 
053.
054.return doubleArray2Json((double[]) o); 
055.
056.if (o instanceof short[])//基本类型数组 
057.
058.return shortArray2Json((short[]) o); 
059.
060.if (o instanceof byte[])//基本类型数组 
061.
062.return byteArray2Json((byte[]) o); 
063.
064.if (o instanceof Object) //保底收尾对象 
065.
066.return object2Json(o); 
067.
068.throw new RuntimeException("不支持的类型: " + o.getClass().getName()); 
069.
070./**
071.* 将 String 对象编码为 JSON格式,只需处理好特殊字符
072.*
073.* @param s
074.* String 对象
075.* @return JSON格式
076.*/ 
077.static String string2Json(final String s) 
078.
079.final StringBuilder sb = new StringBuilder(s.length() + 20); 
080.sb.append('"'); 
081.for int i = 0; i < s.length(); i++) 
082.
083.final char c = s.charAt(i); 
084.switch (c) 
085.
086.case '"': 
087.sb.append("\""); 
088.break; 
089.case '\': 
090.sb.append("\\"); 
091.break; 
092.case '/': 
093.sb.append("\/"); 
094.break; 
095.case '': 
096.sb.append("\b"); 
097.break; 
098.case ' ': 
099.sb.append("\f"); 
100.break; 
101.case '
102.': 
103.sb.append("\n"); 
104.break; 
105.case '
106.': 
107.sb.append("\r"); 
108.break; 
109.case '  ': 
110.sb.append("\t"); 
111.break; 
112.default: 
113.sb.append(c); 
114.
115.
116.sb.append('"'); 
117.return sb.toString(); 
118.
119./**
120.* 将 Number 表示为 JSON格式
121.*
122.* @param number
123.* Number
124.* @return JSON格式
125.*/ 
126.static String number2Json(final Number number) 
127.
128.return number.toString(); 
129.
130./**
131.* 将 Boolean 表示为 JSON格式
132.*
133.* @param bool
134.* Boolean
135.* @return JSON格式
136.*/ 
137.static String boolean2Json(final Boolean bool) 
138.
139.return bool.toString(); 
140.
141./**
142.* 将 Collection 编码为 JSON 格式 (List,Set)
143.*
144.* @param c
145.* @return
146.*/ 
147.static String collection2Json(final Collection<Object> c) 
148.
149.final Object[] arrObj = c.toArray(); 
150.return toJson(arrObj); 
151.
152./**
153.* 将 Map<String, Object> 编码为 JSON 格式
154.*
155.* @param map
156.* @return
157.*/ 
158.static String map2Json(final Map<String, Object> map) 
159.
160.if (map.isEmpty()) 
161.
162.return "{}"; 
163.
164.final StringBuilder sb = new StringBuilder(map.size() << 4); //4次方 
165.sb.append('{'); 
166.final Set<String> keys = map.keySet(); 
167.for final String key : keys) 
168.
169.final Object value = map.get(key); 
170.sb.append('"'); 
171.sb.append(key); //不能包含特殊字符 
172.sb.append('"'); 
173.sb.append(':'); 
174.sb.append(toJson(value)); //循环引用的对象会引发无限递归 
175.sb.append(','); 
176.
177.// 将最后的 ',' 变为 '}': 
178.sb.setCharAt(sb.length() - 1, '}'); 
179.return sb.toString(); 
180.
181./**
182.* 将数组编码为 JSON 格式
183.*
184.* @param array
185.* 数组
186.* @return JSON 格式
187.*/ 
188.static String array2Json(final Object[] array) 
189.
190.if (array.length == 0) 
191.
192.return "[]"; 
193.
194.final StringBuilder sb = new StringBuilder(array.length << 4); //4次方 
195.sb.append('['); 
196.for final Object o : array) 
197.
198.sb.append(toJson(o)); 
199.sb.append(','); 
200.
201. 
202.// 将最后添加的 ',' 变为 ']': 
203.sb.setCharAt(sb.length() - 1, ']'); 
204.return sb.toString(); 
205.
206.static String intArray2Json(final int[] array) 
207.
208.if (array.length == 0) 
209.
210.return "[]"; 
211.
212.final StringBuilder sb = new StringBuilder(array.length << 4); 
213.sb.append('['); 
214.for final int o : array) 
215.
216.sb.append(Integer.toString(o)); 
217.sb.append(','); 
218.
219.// set last ',' to ']': 
220.sb.setCharAt(sb.length() - 1, ']'); 
221.return sb.toString(); 
222.
223.static String longArray2Json(final long[] array) 
224.
225.if (array.length == 0) 
226.
227.return "[]"; 
228.
229.final StringBuilder sb = new StringBuilder(array.length << 4); 
230.sb.append('['); 
231.for final long o : array) 
232.
233.sb.append(Long.toString(o)); 
234.sb.append(','); 
235.
236.// set last ',' to ']': 
237.sb.setCharAt(sb.length() - 1, ']'); 
238.return sb.toString(); 
239.
240.static String booleanArray2Json(final boolean[] array) 
241.
242.if (array.length == 0) 
243.
244.return "[]"; 
245.
246.final StringBuilder sb = new StringBuilder(array.length << 4); 
247.sb.append('['); 
248.for final boolean o : array) 
249.
250.sb.append(Boolean.toString(o)); 
251.sb.append(','); 
252.
253.// set last ',' to ']': 
254.sb.setCharAt(sb.length() - 1, ']'); 
255.return sb.toString(); 
256.
257.static String floatArray2Json(final float[] array) 
258.
259.if (array.length == 0) 
260.
261.return "[]"; 
262.
263.final StringBuilder sb = new StringBuilder(array.length << 4); 
264.sb.append('['); 
265.for final float o : array) 
266.
267.sb.append(Float.toString(o)); 
268.sb.append(','); 
269.
270.// set last ',' to ']': 
271.sb.setCharAt(sb.length() - 1, ']'); 
272.return sb.toString(); 
273.
274.static String doubleArray2Json(final double[] array) 
275.
276.if (array.length == 0) 
277.
278.return "[]"; 
279.
280.final StringBuilder sb = new StringBuilder(array.length << 4); 
281.sb.append('['); 
282.for final double o : array) 
283.
284.sb.append(Double.toString(o)); 
285.sb.append(','); 
286.
287.// set last ',' to ']': 
288.sb.setCharAt(sb.length() - 1, ']'); 
289.return sb.toString(); 
290.
291.static String shortArray2Json(final short[] array) 
292.
293.if (array.length == 0) 
294.
295.return "[]"; 
296.
297.final StringBuilder sb = new StringBuilder(array.length << 4); 
298.sb.append('['); 
299.for final short o : array) 
300.
301.sb.append(Short.toString(o)); 
302.sb.append(','); 
303.
304.// set last ',' to ']': 
305.sb.setCharAt(sb.length() - 1, ']'); 
306.return sb.toString(); 
307.
308.static String byteArray2Json(final byte[] array) 
309.
310.if (array.length == 0) 
311.
312.return "[]"; 
313.
314.final StringBuilder sb = new StringBuilder(array.length << 4); 
315.sb.append('['); 
316.for final byte o : array) 
317.
318.sb.append(Byte.toString(o)); 
319.sb.append(','); 
320.
321.// set last ',' to ']': 
322.sb.setCharAt(sb.length() - 1, ']'); 
323.return sb.toString(); 
324.
325.public static String object2Json(final Object bean) 
326.
327.//数据检查 
328.if (bean == null) 
329.
330.return "{}"; 
331.
332.final Method[] methods = bean.getClass().getMethods(); //方法数组 
333.final StringBuilder sb = new StringBuilder(methods.length << 4); //4次方 
334.sb.append('{'); 
335.for final Method method : methods) 
336.
337.try 
338.
339.final String name = method.getName(); 
340.String key = ""; 
341.if (name.startsWith("get")) 
342.
343.key = name.substring(3); 
344.//防死循环 
345.final String[] arrs = 
346."Class" }; 
347.boolean bl = false; 
348.for final String s : arrs) 
349.
350.if (s.equals(key)) 
351.
352.bl = true; 
353.continue; 
354.
355.
356.if (bl) 
357.
358.continue; //防死循环 
359.
360.
361.else if (name.startsWith("is")) 
362.
363.key = name.substring(2); 
364.
365.if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && method.getParameterTypes().length == 0) 
366.
367.if (key.length() == 1) 
368.
369.key = key.toLowerCase(); 
370.
371.else if (!Character.isUpperCase(key.charAt(1))) 
372.
373.key = key.substring(0, 1).toLowerCase() + key.substring(1); 
374.
375.final Object elementObj = method.invoke(bean); 
376.//System.out.println("###" + key + ":" + elementObj.toString()); 
377.sb.append('"'); 
378.sb.append(key); //不能包含特殊字符 
379.sb.append('"'); 
380.sb.append(':'); 
381.sb.append(toJson(elementObj)); //循环引用的对象会引发无限递归 
382.sb.append(','); 
383.
384.
385.catch final Exception e) 
386.
387.//e.getMessage(); 
388.throw new RuntimeException("在将bean封装成JSON格式时异常:" + e.getMessage(), e); 
389.
390.
391.if (sb.length() == 1) 
392.
393.return bean.toString(); 
394.
395.else 
396.
397.sb.setCharAt(sb.length() - 1, '}'); 
398.return sb.toString();} 
399.
400.private JsonUtil(){ 
401.
402.}

七十一、android自动跳转

有些时候需要类似这样的功能,在一个页面停留2秒后,跳转到另外一个页面!

第一种方法:

view sourceprint?
01.Timer timer = new Timer();
02. 
03.TimerTask timerTask = new TimerTask() {
04. 
05.@Override
06.public void run() {
07.// 你要干的活
08. 
09.}
10.};
11.timer.schedule(timerTask, 1000 2); //2秒后执行

在run()方法里面写上你的跳转就可以了。

第二种方法:

view sourceprint?
01.private final int SPLASH_DISPLAY_LENGHT = 2000;
02. 
03.@Override
04.public void onCreate(Bundle savedInstanceState) {
05.super.onCreate(savedInstanceState);
06.this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
07.WindowManager.LayoutParams.FLAG_FULLSCREEN); 
08.setContentView(R.layout.splash);
09.new Handler().postDelayed(new Runnable() {
10.@Override
11.public void run() {
12.Intent intent = new Intent(Splash.this, XXX.class);
13.Splash.this.startActivity(intent);
14.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
15.Splash.this.finish();
16.}
17. 
18.}, SPLASH_DISPLAY_LENGHT);
19.}

使用handler延迟2秒后跳转。

七十二、Gally选中高亮状态

没有选中,在GalleryActivity中,设置gallery.setUnselectedAlpha(0.3f); 透明度为0.3 选中,在ImageAdapter的getView(int position, View convertView, ViewGroup parent)中,设置imageview.setBackgroundColor(Color.alpha(1)); 背景色为1

七十三、TextView颜色设置

view sourceprint?
1.android:textColor                    //设置文本颜色
2. 
3.android:textColorHighlight           //被选中文字的底色,默认为蓝色
4. 
5.android:textColorHint                //设置提示信息文字的颜色,默认为灰色。与hint一起使用。

七十四、Button使用Shape

view sourceprint?
01.<?xml version="1.0" encoding="utf-8"?>
02.<selector
03.xmlns:android="http://schemas.android.com/apk/res/android">
04.<item android:state_pressed="true" >
05.<shape>
06.<gradient
07.android:startColor="#ff8c00"
08.android:endColor="#FFFFFF"
09.android:angle="270" />
10.<stroke
11.android:width="2dp"
12.android:color="#dcdcdc" />
13.<corners
14.android:radius="2dp" />
15.<padding
16.android:left="10dp"
17.android:top="10dp"
18.android:right="10dp"
19.android:bottom="10dp" />
20.</shape>
21.</item>     <item android:state_focused="true" >
22.<shape>
23.<gradient
24.android:startColor="#ffc2b7"
25.android:endColor="#ffc2b7"
26.android:angle="270" />
27.<stroke
28.android:width="2dp"
29.android:color="#dcdcdc" />
30.<corners
31.android:radius="2dp" />
32.<padding
33.android:left="10dp"
34.android:top="10dp"
35.android:right="10dp"
36.android:bottom="10dp" />
37.</shape>
38.</item>     <item>     
39.<shape>
40.<gradient
41.android:startColor="#ff9d77"
42.android:endColor="#ff9d77"
43.android:angle="270" />
44.<stroke
45.android:width="2dp"
46.android:color="#fad3cf" />
47.<corners
48.android:radius="2dp" />
49.<padding
50.android:left="10dp"
51.android:top="10dp"
52.android:right="10dp"
53.android:bottom="10dp" />
54.</shape>
55.</item>
56.</selector>

七十五、Android Drawable叠加处理方法

大家可能知道Bitmap的叠加处理在Android平台中可以通过Canvas一层一层的画就行了,而Drawable中如何处理呢? 除了使用BitmapDrawable的getBitmap方法将Drawable转换为Bitmap外,今天Android123给大家说下好用简单的LayerDrawable类,LayerDrawable顾名思义就是层图形对象。下面直接用一个简单的代码表示:

view sourceprint?
1.Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);
2.Drawable[] array = new Drawable[3];      array[0] = new PaintDrawable(Color.BLACK); //黑色
3.array[1] = new PaintDrawable(Color.WHITE); //白色
4.array[2] = new BitmapDrawable(bm); //位图资源
5.LayerDrawable ld = new LayerDrawable(array); //参数为上面的Drawable数组
6.ld.setLayerInset(11111);  //第一个参数1代表数组的第二个元素,为白色
7.ld.setLayerInset(22222); //第一个参数2代表数组的第三个元素,为位图资源
8.mImageView.setImageDrawable(ld);

上面的方法中LayerDrawable是关键,Android开发网提示setLayerInset方法原型为public void setLayerInset (int index, int l, int t, int r, int b) 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom。对于简单的图片合成我们可以将第一和第二层的PaintDrawable换成BitmapDrawable即可实现简单的图片合成。

七十六、Android发信息时观察者

发信息大致的流程是:

观察者,ContentObserver

观察信息变化,它只能观察所有 就是 :Uri:content://sms/

你点击了发送按钮后,状态还是正在发送,这时这条信息已在你不注意时插入到发件箱中(调用 onChange一次,你可以查一下outbox的内容),当发送成功后(就会打发件箱的临时信息删除 又调用一次 onChange),成功后插入到已发信息sent(这是又会调用 onChange),它会调用三次,所以你们在观察发送信息时会出现onChange出现三次,这个解决方案我暂时只想到两种方案:

view sourceprint?
01.1:就是在contetnobserver类里定义一个变量 int count=0;
02. 
03.@Override
04. 
05.public void onChange(boolean selfChange) {
06. 
07.count++;
08. 
09.//调用第三次才是已发信息
10. 
11.if(count==3){
12. 
13.//代表发送了一条信息
14. 
15.Log.i("wet""发送了一条信息");
16. 
17.count=0;//以便第下次用
18. 
19.}
20. 
21. 
22. 
23.2:还有一个是:
24. 
25.记录  context.getContentResolver().query(Uri.parse("content://sms/sent"), nullnullnullnull);
26. 
27.首先记录它上次的条数
28. 
29.然后再记录它这次的条数,如果改变了,那就代表它改变了

七十七、Android屏幕解锁和点亮屏幕

最近在做一个闹钟的项目,当闹钟响起的时候需要用到自动解锁和点亮屏幕,因此记录一下解屏幕锁与点亮屏幕的代码:

view sourceprint?
01.KeyguardManager  km= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); //得到键盘锁管理器对象
02.KeyguardLock kl = km.newKeyguardLock("unLock"); //参数是LogCat里用的Tag
03. 
04.kl.disableKeyguard(); //解锁
05. 
06.PowerManager pm=(PowerManager) getSystemService(Context.POWER_SERVICE);//获取电源管理器对象
07.PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
08.//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
09.wl.acquire();//点亮屏幕
10.wl.release();//释放
11. 
12.要实现自动解锁和点亮屏幕的功能则需要在AndroidManifest.xml添加权限:
13. 
14.<uses-permission android:name="android.permission.WAKE_LOCK" />
15.<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

七十八、去掉listView中间隔断线

view sourceprint?
1.方法1:listView.setDividerHeight(0);
2.方法2this.getListView().setDivider(null);
3.方法3:android:divider="@null"
4. 
5.android:cacheColorHint="#00000000" 设置其为透明!! 默认为黑色!!!!!


Android常用实用功能代码片大全相关推荐

  1. 安卓常用实用功能代码片大全(长期更新)

    ↑duang!电脑浏览上面的'目录+'点击蓝字有惊喜 看别人博客,有些小技巧就直接转过来了,以后做开发可以大大提高开发效率.以下代码片摘自多个博客和自己平时的学习积累,若原作者认为侵犯著作权,请私信告 ...

  2. Android常用开源库种类大全

    ## 1.基本控件 ### [](https://www.yundashi168.com/articles/2018/09/12/1536725366888.html#11textview)1.1.T ...

  3. android 常用混淆,Android常用的代码混淆整理【原创】

    android里的代码混淆是比不可少的东西,下面就贴一些常用的代码混淆. #指定代码的压缩级别 -optimizationpasses 5 #包明不混合大小写 -dontusemixedcasecla ...

  4. android 常用的代码

    最近在用android 随时不停更新的一些常用代码,以备查找 目录 进制转换 二进制转10进制 10进制转二进制 10进制转16进制 16进制转10进制 二进制转16进制 16进制转二进制 16进制高 ...

  5. Android常用透明度代码

    透明度具体对应百分比: 100% - FF    95% - F2    90% - E6    85% - D9    80% - CC    75% - BF    70% - B3    65% ...

  6. android常用代码合集,Android常用代码

    1.图片旋转 Bitmap bitmapOrg = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable. ...

  7. Android常用面试题大全

    1.TCP和UDP之间的区别?什么是URL ? TCP被称为用户数据报协议;UDP被称为信息传输控制协议;URL被称为统一资源定位符,通过统一资源定位符可以唯一定位到互联网上的某个资源(图片.视频.音 ...

  8. Android 编程实用代码大全

    转载:Android 编程实用代码大全 http://www.juapk.com/forum.php?mod=viewthread&tid=325&fromuid=263 1. 查看是 ...

  9. Android常用代码和插件 持续更新~~

    总结一下常用的插件和资料,方便以后查阅. 目录 1.Android studio常用插件 1.1 通过Json快速生成Model 1.2 注释模板 2.Android常用代码 2.1 无线调试 2.2 ...

最新文章

  1. 课堂上的社死现场...
  2. poj 1981(单位圆覆盖点)
  3. php输出下划线,使用php GD库输出带下划线文本的图像
  4. SAP CRM WebClient UI点了产品主数据搜索结果超链接后的跳转调试
  5. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)
  6. linux系统用户迁移
  7. Linux iperf 网络传输性能测试工具
  8. 北邮 复习 软件工程_软件工程专业最厉害的32所大学,共分4个档次,第一档当之无愧!...
  9. NodeSchool: JavaScript函数式编程
  10. mysql查询时间提前五天_mysql选择月份查询该月有付款的数据(间隔x月并提前5天付款)...
  11. 2021-08-09
  12. easyui datagrid 遇到的坑 cannot read property ·· pageNum bug and so on
  13. 自己编写vb进度条控件
  14. php 到处excel 乱码,php导出Excel乱码怎么解决?
  15. 51单片机C语言程序100例
  16. OA办公系统审批流程是什么?
  17. (2-分类问题)Accuracy,Precision,Sensitivity,Specificity
  18. word恢复到安装时的状态?
  19. 大学慕课MOOC设计一个简单的计算工具
  20. ESP8266入门教程-ESP8266睡眠和唤醒功能

热门文章

  1. SQL server 2012 SP4设置TLS1.2
  2. 【模拟电子技术Analog Electronics Technology 27】—— 非正弦波发生电路参数的详细计算分析(阈值电压和周期)
  3. spring @value注解
  4. 【计算机体系结构】很难理解?带你从头到尾捋一遍
  5. ~~设计师的助手,值得收藏!~~
  6. CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局——也聊聊双飞翼
  7. 最新2023基于微信小程序的学生公寓生活管理系统+后台管理系统(SSM+mysql)-JAVA.VUE(毕业设计+论文+开题报告+运行)
  8. C#中什么是托管什么是非托管??
  9. vs+qt使用过程中遇到的问题(一)
  10. 设置wifi5G热点后重启后变成2.4G分析过程