Androidの階段を進むコードの応用テクニック


ブログの起源:http://blog.csdn.net/liuxian13183転載は出典を明記します!All Rights Reerved! 
1、文字に下線を付ける
email_name.setText(Html.fromHtml("<u>" + email.title + "</u>"));
2、文字図を並べて、間隔を入れる
        android:drawableLeft="@drawable/user_id"
        android:drawablePadding="10dip"
3、携帯電話のシリアルナンバーを取得する
TelephonyManager telephonyManager = (TelephonyManager) MarketApplication.sContext
.getSystemService(Context.TELEPHONY_SERVICE); 
String imei = telephonyManager.getDeviceId(); 
4、tabwidgetの背景色を変える
		tabWidget.getChildAt(i).setBackgroundResource(
					R.drawable.tab_bar_mask3);
5、tabhostの下の白い線を抜きます。
	tabHost.setPadding(tabHost.getPaddingLeft(), tabHost.getPaddingTop(),
				tabHost.getPaddingRight(), tabHost.getPaddingBottom() - 10);
6、Viewを得るコントロールの上下左右の間隔
		int[] loc = new int[2];
		// if (fromWindowsLoc) {
		// anchor.getLocationInWindow(loc);
		// } else {
		anchor.getLocationOnScreen(loc);
		// // }
		int l = loc[0];// 
		int t = loc[1];// 
		//     :445:474
		int r = l + anchor.getWidth();//  
		int b = t + anchor.getHeight();//  
		Rect localRect = new Rect(l, t, r, b);
7、sdカード上の写真を取得し、読み込む
ImageView.setImageUri(Uri.fromFile(new File("/sdcard/cats.jpg"))); 
8、解析文字
URLDecoder.decode(searchkeyword, "gb2312")
9、ActivityにActivityを埋め込む
		ll.removeAllViews();
				Intent it = new Intent(new Intent(SearchActivity.this,
						SearchAndroidList.class));
				it.putExtra(AppData.PAPER_QUERY, query);
				ll.addView(getLocalActivityManager().startActivity(
						"SearchAndroidList",
						it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
						.getDecorView());
10、androidスクリーンは常に明るく保持しています。
関連する変数:
 PowerManager powerManager = null;
    WakeLock wakeLock = null;
初期化:
powerManager = (PowerManager) this
                .getSystemService(Service.POWER_SERVICE);
        wakeLock = this.powerManager.newWakeLock(
                PowerManager.SCREEN_DIM_WAKE_LOCK, "My Lock");
スクリーンを開くと常に明るくなります。
 wakeLock.setReferenceCounted(false);
            wakeLock.acquire();
プログラム設定の画面を閉じます。
 wakeLock.release();
注意するところ:実際のデバッグの過程で、ウォークロック.set ReferenceCounted(false)が設定されていません。これは、エラーがありました。java.lang.RuntimeException:WakeLock under-lockedです。                 ソースを読む:
acquire()    :

                        public void acquire()
        {
            synchronized (mToken) {
                if (!mRefCounted || mCount++ == 0) {
                    try {
                        mService.acquireWakeLock(mFlags, mToken, mTag);
                    } catch (RemoteException e) {
                    }
                    mHeld = true;
                }
            }
        }

  release()    :

               public void release()
        {
            release(0);
        }

       public void release(int flags)
        {
            synchronized (mToken) {
                if (!mRefCounted || --mCount == 0) {
                    try {
                        mService.releaseWakeLock(mToken, flags);
                    } catch (RemoteException e) {
                    }
                    mHeld = false;
                }
                if (mCount < 0) {
                    throw new RuntimeException("WakeLock under-locked " + mTag);
                }
            }
        }
エラーはrelease(int flags)の中に抱えています。mCountはマイナスです。例外を除いて、私達はもう見てみます。
   public void setReferenceCounted(boolean value)
        {
            mRefCounted = value;
        }
この関数の役割はロックの数を計算する必要がありますか?falseに設定した場合、release()に設定した場合、何回もacquire()を使っても、release WakeLockを落とすことができます。
11、画面全体に画像を変形させない
	imageView.setAdjustViewBounds(true);//        
12、背景色を透明にする
getWindow().setBackgroundDrawable(new ColorDrawable(0));
13、中国語のレイアウトが不揃いで、一つのmatch_parentは問題を解決します。