亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android點(diǎn)滴

系統(tǒng) 2274 0
如何在一個(gè)apk中調(diào)用另外一個(gè)apk中的activity?
系統(tǒng)提供了很多可以直接調(diào)用的Activity,通過指定的Intent就可以調(diào)用,比如打開搜索的:
Java代碼 收藏代碼
  1. Intentintent= new Intent(Intent.ACTION_WEB_SEARCH);
  2. intent.putExtra(SearchManager.QUERY, "searchString" )
  3. startActivity(intent);

Intent.ACTION_WEB_SEARCH是一個(gè)字符串,是“搜索”這個(gè)Activity的標(biāo)識(shí),extra是傳給這個(gè)activity的一些數(shù)據(jù)。發(fā)送出這個(gè)intent之后,系統(tǒng)根據(jù)action字符串Intent.ACTION_WEB_SEARCH知道了是要調(diào)用哪個(gè)activity,如果有重名,會(huì)彈出一個(gè)選擇對(duì)話框。然后打開此activity,實(shí)現(xiàn)想要做的事情。
那么,我們自己怎么來實(shí)現(xiàn)呢。
首先,寫一個(gè)activity,在AndroidManifest.xml里面的intent-filter中,給這個(gè)activity命名,
Xml代碼 收藏代碼
  1. < intent-filter >
  2. < action android:name = "chroya.foo" />
  3. < category android:name = "android.intent.category.DEFAULT" />
  4. </ intent-filter >

然后安裝。安裝完畢之后,你會(huì)發(fā)現(xiàn),系統(tǒng)中找不到這個(gè)程序。別急,它確實(shí)安裝在手機(jī)里面了,但是因?yàn)樗皇莔ain的,所以系統(tǒng)不會(huì)把他當(dāng)做Application的入口程序。
而要想打開這個(gè)activity,只有知道它名字的人才可以。跟系統(tǒng)的intent一樣使用。它的名字定義為"chroya.foo",所以,這里用這個(gè)字符串就可以調(diào)用它了:
Java代碼 收藏代碼
  1. Intentintent= new Intent( "chroya.foo" );
  2. startActivity(intent);

用剛才舉的那個(gè)系統(tǒng)的intent說明,它的activity里面使用getIntent().getBundleExtra(SearchManager.QUERY)來接收傳遞進(jìn)來的搜索字符串參數(shù)。而這個(gè)SearchManager.QUERY是關(guān)鍵字。如果要自己實(shí)現(xiàn)這種功能,只需要定義好關(guān)鍵字,然后從BundleExtra中取就行了。

如何獲取屏幕上正顯示的activity?
用過ActivityManager的童鞋估計(jì)都知道,可以從ActivityManager里面可以獲取到當(dāng)前運(yùn)行的所有任務(wù),所有進(jìn)程和所有服務(wù),這是任務(wù)管理器的核心。
那么,從里面我們可以發(fā)掘點(diǎn)什么出來嗎?
仔細(xì)看getRunningTasks的文檔,里面說獲取的是系統(tǒng)中"running"的所有task,"running"狀態(tài)包括已經(jīng)被系統(tǒng)凍結(jié)的task。而且返回的這個(gè)列表是按照順序排列的,也就是說第一個(gè)肯定比第二個(gè)后運(yùn)行。
getRunningTasks有個(gè)整型參數(shù),表示返回列表的最大個(gè)數(shù)。那么,我們?nèi)绻?作為參數(shù)給進(jìn)去,那么他返回的task就是當(dāng)前運(yùn)行的那個(gè)task,然后從task中獲取到最頂層的activity,這個(gè)activity就是當(dāng)前顯示給用戶的那個(gè)activity了。
Java代碼 收藏代碼
  1. ActivityManageram=(ActivityManager)getSystemService(ACTIVITY_SERVICE);
  2. ComponentNamecn=am.getRunningTasks( 1 ).get( 0 ).topActivity;
  3. Log.d( "" , "pkg:" +cn.getPackageName());
  4. Log.d( "" , "cls:" +cn.getClassName());

至于這個(gè)能做什么,嘿嘿,我相信你知道的。

如何判斷一個(gè)activity是否存在于系統(tǒng)中?
已知包名和類名,如何判斷這個(gè)activity是否在系統(tǒng)中存在呢?很簡(jiǎn)單,通過intent就行。
Java代碼 收藏代碼
  1. Intentintent= new Intent();
  2. intent.setClassName( "包名" , "類名" );
  3. if (getPackageManager().resolveActivity(intent, 0 )== null ){
  4. //說明系統(tǒng)中不存在這個(gè)activity
  5. }


如何讓應(yīng)用程序動(dòng)態(tài)全屏和退出全屏?
讓程序全屏的方法,大家都知道,那是靜態(tài)的,程序運(yùn)行之初就申明了。但是如果有這樣的需求:要在程序運(yùn)行的過程中,執(zhí)行了某個(gè)操作而使之全屏,然后還需要退出全屏,怎么做?
如下:
Java代碼 收藏代碼
  1. WindowManager.LayoutParamsattrs=getWindow().getAttributes();
  2. attrs.flags|=WindowManager.LayoutParams.FLAG_FULLSCREEN;
  3. getWindow().setAttributes(attrs);
  4. getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

修改window的LayoutParams參數(shù),然后加上FLAG_LAYOUT_NO_LIMITS標(biāo)志,就OK了。window會(huì)自動(dòng)重新布局,呈現(xiàn)全屏的狀態(tài)。
要退出全屏,只需要清除剛才加上的FLAG_FULLSCREEN參數(shù),然后去掉FLAG_LAYOUT_NO_LIMITS標(biāo)志。
如下:
Java代碼 收藏代碼
  1. WindowManager.LayoutParamsattrs=getWindow().getAttributes();
  2. attrs.flags&=(~WindowManager.LayoutParams.FLAG_FULLSCREEN);
  3. getWindow().setAttributes(attrs);
  4. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);


如何獲取狀態(tài)欄和標(biāo)題欄的高度?
1.獲取狀態(tài)欄高度:
decorView是window中的最頂層view,可以從window中獲取到decorView,然后decorView有個(gè)getWindowVisibleDisplayFrame方法可以獲取到程序顯示的區(qū)域,包括標(biāo)題欄,但不包括狀態(tài)欄。于是,我們就可以算出狀態(tài)欄的高度了。
Java代碼 收藏代碼
  1. Rectframe= new Rect();
  2. getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
  3. int statusBarHeight=frame.top;

2.獲取標(biāo)題欄高度:
getWindow().findViewById(Window.ID_ANDROID_CONTENT)這個(gè)方法獲取到的view就是程序不包括標(biāo)題欄的部分,然后就可以知道標(biāo)題欄的高度了。
Java代碼 收藏代碼
  1. int contentTop=getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
  2. //statusBarHeight是上面所求的狀態(tài)欄的高度
  3. int titleBarHeight=contentTop-statusBarHeight;


如何將一個(gè)視窗(windows)蓋在整個(gè)Application的最上面?
Java代碼 收藏代碼
  1. private ImageViewwaitView;
  2. private final void showWaiting(){
  3. try {
  4. WindowManager.LayoutParamslp= null ;
  5. lp= new WindowManager.LayoutParams(
  6. ViewGroup.LayoutParams.WRAP_CONTENT,
  7. ViewGroup.LayoutParams.WRAP_CONTENT,
  8. WindowManager.LayoutParams.TYPE_TOAST,
  9. WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  10. |WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
  11. |WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
  12. PixelFormat.TRANSLUCENT
  13. |WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW);
  14. WindowManagermWindowManager=(WindowManager)G.appInstance
  15. .getSystemService(Context.WINDOW_SERVICE);
  16. if (waitView== null ){
  17. LayoutInflaterinflate=(LayoutInflater)G.appInstance
  18. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  19. waitView=(ImageView)inflate.inflate(R.layout.waiting_layout,
  20. null );
  21. }
  22. mWindowManager.addView(waitView,lp);
  23. } catch (Throwablee){
  24. }
  25. }

注意:
1. 要將window的類型配置成Type_toast。
2.G.appInstance 上下文需要使用Application的context.

如何判斷快捷方式是否已經(jīng)創(chuàng)建?
快捷方式信息是保存在com.android.launcher的launcher.db的favorites表中
Java代碼 收藏代碼
  1. boolean isInstallShortcut= false ;
  2. final ContentResolvercr=context.getContentResolver();
  3. final StringAUTHORITY= "com.android.launcher.settings" ;
  4. final UriCONTENT_URI=Uri.parse( "content://" +
  5. AUTHORITY+ "/favorites?notify=true" );
  6. Cursorc=cr.query(CONTENT_URI,
  7. new String[]{ "title" , "iconResource" },
  8. "title=?" ,
  9. new String[]{ "XXX" }, null ); //XXX表示應(yīng)用名稱。
  10. if (c!= null &&c.getCount()> 0 ){
  11. isInstallShortcut= true ;
  12. }
  13. /*try{
  14. while(c.moveToNext()){
  15. Stringtmp="";
  16. tmp=c.getString(0);
  17. }
  18. }catch(Exceptione){
  19. }finally{
  20. c.close();
  21. }*/
  22. return isInstallShortcut;
  23. }

要有權(quán)限:
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
注意:2.2及其之后的版本不能用這個(gè)方法判斷!(雖然在launcher.db數(shù)據(jù)庫(kù)里還有favorites這個(gè)表)

如何讓ListView中TextView的字體顏色跟隨焦點(diǎn)的變化?
我們通常需要ListView中某一項(xiàng)選中時(shí),他的字體顏色和原來的不一樣。 如何設(shè)置字體的顏色呢? 在布局文件中TextColor一項(xiàng)來設(shè)置顏色,但是不是只設(shè)置一種顏色,而是在不同的條件下設(shè)置不同的顏色: 下面是個(gè)例子:
Xml代碼 收藏代碼
  1. <? xml version = "1.0" encoding = "utf-8" ?>
  2. < selector xmlns:android = "http://schemas.android.com/apk/res/android" >
  3. < item android:state_enabled = "false" android:color = "@color/orange" > </ item >
  4. < item android:state_window_focused = "false" android:color = "@color/orange" > </ item >
  5. < item android:state_pressed = "true" android:color = "@color/white" > </ item >
  6. < item android:state_selected = "true" android:color = "@color/white" > </ item >
  7. < item android:color = "@color/orange" > </ item >
  8. </ selector >
  9. 在獲取焦點(diǎn)或者選中的情況下設(shè)置為白色,其他情況設(shè)置為橘黃色。



如何在android的一個(gè)應(yīng)用中調(diào)用另外一個(gè)應(yīng)用?
Java代碼 收藏代碼
  1. Intentintent= new Intent();
  2. //第一個(gè)參數(shù)另一個(gè)應(yīng)用的包名,第二個(gè)是需要啟動(dòng)的類
  3. intent.setComponent( new ComponentName( "com.Ex03_03" , "com.Ex03_03.Ex03_03" ));
  4. startActivity(intent);


如何遍歷listView 的的單選框?
Java代碼 收藏代碼
  1. ListViewlistView=(ListView)findViewById(R.id.配置文件中ListView的ID);
  2. //全選遍歷ListView的選項(xiàng),每個(gè)選項(xiàng)就相當(dāng)于布局配置文件中的RelativeLayout
  3. for ( int i= 0 ;i<listView.getChildCount();i++){
  4. Viewview=listView.getChildAt(i);
  5. CheckBoxcb=(CheckBox)view.findViewById(R.id.CheckBoxID);
  6. cb.setChecked( true );
  7. }


如何獲取程序版本號(hào)?
Java代碼 收藏代碼
  1. <?xmlversion= "1.0" encoding= "utf-8" ?>
  2. <manifestxmlns:android= "http://schemas.android.com/apk/res/android"
  3. package = "com.yourcompany.yourapp"
  4. android:versionCode= "109"
  5. android:versionName= "0.1.6.109dev" >
  6. ...
  7. </manifest>
  8. public static int getVersionCode(Contextcontext){
  9. PackageManagerpm=context.getPackageManager();
  10. try {
  11. PackageInfopi=pm.getPackageInfo(context.getPackageName(), 0 );
  12. return pi.versionCode;
  13. } catch (NameNotFoundExceptionex){}
  14. return 0 ;
  15. }


如何讓Toast充滿全屏?
Java代碼 收藏代碼
  1. Toastt=Toast.makeText( this , "Hello" ,Toast.LENGTH_SHORT);
  2. t.setGravity(Gravity.FILL_HORIZONTAL, 0 , 0 );


如何更高效簡(jiǎn)單的實(shí)現(xiàn)界面中的分隔線?
Java代碼 收藏代碼
  1. <View
  2. android:layout_width= "fill_parent"
  3. android:layout_height= "1px"
  4. android:background= "?android:attr/listDivider"
  5. />


如何發(fā)起或刪除另一個(gè)程序?
Java代碼 收藏代碼
  1. final Intentintent= new Intent(Intent.ACTION_MAIN, null );
  2. intent.addCategory(Intent.CATEGORY_LAUNCHER);
  3. final ComponentNamecn= new ComponentName( "com.android.settings" , "com.android.settings.fuelgauge.PowerUsageSummary" );
  4. intent.setComponent(cn);
  5. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  6. startActivity(intent);

Java代碼 收藏代碼
  1. //ComponentName兩個(gè)參數(shù)一個(gè)是包名一個(gè)是包下的主類
  2. Uriuri=Uri.fromParts( "package" ,“YourPackagenamehere”, null );
  3. IntentdeleteIntent= new Intent(Intent.ACTION_DELETE,uri);
  4. startActivity(deleteIntent);


如何為TextView添加陰影?
values/styles
Xml代碼 收藏代碼
  1. < style name = "AudioFileInfoOverlayText" >
  2. < item name = "android:paddingLeft" > 4px </ item >
  3. < item name = "android:paddingBottom" > 4px </ item >
  4. < item name = "android:textColor" > #ffffffff </ item >
  5. < item name = "android:textSize" > 12sp </ item >
  6. < item name = "android:shadowColor" > #ff00ff00 </ item >
  7. < item name = "android:shadowDx" > 5 </ item >
  8. < item name = "android:shadowDy" > 3 </ item >
  9. < item name = "android:shadowRadius" > 6 </ item >
  10. </ style >

<TextView android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/AudioFileInfoOverlayText"
android:text="aaaa"
android:gravity="center" />

如何監(jiān)測(cè)是否靜音?
Java代碼 收藏代碼
  1. AudioManageram=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
  2. switch (am.getRingerMode()){
  3. case AudioManager.RINGER_MODE_SILENT:
  4. Log.i( "MyApp" , "Silentmode" );
  5. break ;
  6. case AudioManager.RINGER_MODE_VIBRATE:
  7. Log.i( "MyApp" , "Vibratemode" );
  8. break ;
  9. case AudioManager.RINGER_MODE_NORMAL:
  10. Log.i( "MyApp" , "Normalmode" );
  11. break ;
  12. }


如何設(shè)置控件的隨機(jī)顯示位置?
Java代碼 收藏代碼
  1. RelativeLayout.LayoutParamsparms=(RelativeLayout.LayoutParams)img.getLayoutParams();
  2. parms.leftMargin=( int )(Math.random()* 320 );
  3. parms.topMargin=( int )(Math.random()* 480 );
  4. img.setLayoutParams(parms);
  5. img.invalidate();


如何讓軟鍵盤顯示/消失?
Java代碼 收藏代碼
  1. InputMethodManagerimm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
  2. Viewview=getCurrentFocus();
  3. if (view!= null ){
  4. //imm.showSoftInput(view,0);//顯示軟鍵盤
  5. imm.toggleSoftInput( 0 ,InputMethodManager.HIDE_NOT_ALWAYS);
  6. //imm.hideSoftInputFromWindow(view.getWindowToken(),0);//隱藏軟鍵盤//InputMethodManager.HIDE_NOT_ALWAYS);
  7. }


如何為Activity屏幕的標(biāo)題欄添加圖標(biāo)?
Java代碼 收藏代碼
  1. @Override
  2. public void onCreate(Bundleicicle){
  3. super .onCreate(icicle);
  4. Windowwin=getWindow();
  5. win.requestFeature(Window.FEATURE_LEFT_ICON);
  6. setContentView(R.layout.mylayout);
  7. win.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.icon);
  8. }

要注意的是,win.setFeatureDrawableResource必須在setContentView之后,不然就沒有效果。

如何讓ListView自動(dòng)滾動(dòng)?
注意stackFromBottom以及transcriptMode這兩個(gè)屬性。類似Market客戶端的低端不斷滾動(dòng)。
<ListView android:id="listCWJ"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
/>

如何設(shè)置桌面壁紙?
希望在你的程序中能設(shè)置桌面壁紙嗎?很簡(jiǎn)單,首先我們需要取得設(shè)置壁紙的權(quán)限。和其它權(quán)限一樣,只要在配置文件中加上以下配置信息即可。
<uses-permission android:name="android.permission.SET_WALLPAPER" />
然后在程序中調(diào)用如下代碼即可設(shè)置桌面壁紙:
getApplicationContext().setWallpaper(bitmap)

如何在標(biāo)題欄(titlebar)顯示進(jìn)度條?
Java代碼 收藏代碼
  1. protected void onCreate(BundlesavedInstanceState){
  2. super .onCreate(savedInstanceState);
  3. requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); //先給Activity注冊(cè)界面進(jìn)度條功能
  4. setContentView(R.layout.main);
  5. setProgressBarIndeterminateVisibility( true ); //在需要顯示進(jìn)度條的時(shí)候調(diào)用這個(gè)方法
  6. setProgressBarIndeterminateVisibility( false ); //在不需要顯示進(jìn)度條的時(shí)候調(diào)用這個(gè)方法
  7. }


如何去掉activity頂部的gradient?
<style name="Theme.Foo" parent="android:style/Theme.Light">
<item name="android:windowContentOverlay">@null</item>
</style>
<activity android:name=".FooActivity"
android:theme="@style/Theme.Foo"> ...
http://wang-peng1.iteye.com/blog/680015

如何讓ScrollView強(qiáng)制滑到底部?
scroll.fullScroll(View.FOCUS_DOWN) 就可以了

如何ViewFlipper去掉多余空間?
ViewFlipper flipper = (ViewFlipper)findViewById(R.id.flipper);
flipper.setMeasureAllChildren(false);

如何去掉tabhost橫線?
Java代碼 收藏代碼
  1. 很簡(jiǎn)單簡(jiǎn)單的有時(shí)候是因?yàn)槲覀兲≡?
  2. <LinearLayoutxmlns:android= "http://schemas.android.com/apk/res/android"
  3. android:orientation= "vertical"
  4. android:layout_width= "fill_parent"
  5. android:layout_height= "fill_parent"
  6. android:gravity= "center_horizontal" >
  7. <TabHost
  8. android:id= "@android:id/tabhost"
  9. android:layout_width= "fill_parent"
  10. android:layout_height= "fill_parent"
  11. >
  12. ...
  13. ...
  14. ...
  15. </TabHost>
  16. </LinearLayout>
  17. 外面加一層LinearLayout


如何判斷國(guó)家?
Java代碼 收藏代碼
  1. Stringlocale=context.getResources().getConfiguration().locale.getCountry();
  2. Stringlocale=context.getResources().getConfiguration().locale.getDisplayCountry();
  3. TelephonyManagertm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  4. StringcountryCode=tm.getSimCountryIso();


如何讓屏幕保持一直亮?
Java代碼 收藏代碼
  1. @Override
  2. protected void onCreate(Bundleicicle){
  3. super .onCreate(icicle);
  4. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  5. }

http://wang-peng1.iteye.com/blog/769561

如何檢查sim卡狀態(tài)?
Java代碼 收藏代碼
  1. TelephonyManagertelMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  2. int simState=telMgr.getSimState();
  3. switch (simState){
  4. case TelephonyManager.SIM_STATE_ABSENT:
  5. //dosomething
  6. break ;
  7. case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
  8. //dosomething
  9. break ;
  10. case TelephonyManager.SIM_STATE_PIN_REQUIRED:
  11. //dosomething
  12. break ;
  13. case TelephonyManager.SIM_STATE_PUK_REQUIRED:
  14. //dosomething
  15. break ;
  16. case TelephonyManager.SIM_STATE_READY:
  17. //dosomething
  18. break ;
  19. case TelephonyManager.SIM_STATE_UNKNOWN:
  20. //dosomething
  21. break ;
  22. }


如何從SMS獲取聯(lián)系人信息?
Java代碼 收藏代碼
  1. ContactItemgetContactByAddr(Contextcontext, final SMSItemsms){
  2. UripersonUri=Uri.withAppendedPath(
  3. ContactsContract.PhoneLookup.CONTENT_FILTER_URI,sms.mAddress);
  4. Cursorcur=context.getContentResolver().query(personUri,
  5. new String[]{PhoneLookup.DISPLAY_NAME},
  6. null , null , null );
  7. if (cur.moveToFirst()){
  8. int nameIdx=cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);
  9. ContactItemitem= new ContactItem();
  10. item.mName=cur.getString(nameIdx);
  11. cur.close();
  12. return item;
  13. }
  14. return null ;
  15. }


如何在使用gallery在flinging拖動(dòng)時(shí)候不出現(xiàn)選擇的情況?
這時(shí)候需要注意使用
gallery.setCallbackDuringFling(false)

TabHost組件,怎么調(diào)整tab的高度?
Java代碼 收藏代碼
  1. TabWidgettabWidget=mTabHost.getTabWidget();
  2. int count=tabWidget.getChildCount();
  3. for ( int i= 0 ;i<count;i++){
  4. Viewview=tabWidget.getChildTabViewAt(i); //tabWidget.getChildAt(i);
  5. view.getLayoutParams().height= 40 ;
  6. }


如何模擬SDcard?
看圖:
Android點(diǎn)滴
Android點(diǎn)滴
應(yīng)該能看明白。

如何自定義ListView行間的分割線?
在Android平臺(tái)中系統(tǒng)控件提供了靈活的自定義選項(xiàng),所有基于ListView或者說AbsListView實(shí)現(xiàn)的widget控件均可以通過下面的方法設(shè)置行間距的分割線,分割線可以自定義顏色、或圖片。
在ListView中我們使用屬性 android:divider="#FF0000" 定義分隔符為紅色,當(dāng)然這里值可以指向一個(gè)drawable圖片對(duì)象,如果使用了圖片可能高度大于系統(tǒng)默認(rèn)的像素,可以自己設(shè)置高度比如6個(gè)像素 android:dividerHeight="6px" ,Android開發(fā)網(wǎng)提示當(dāng)然在Java中ListView也有相關(guān)方法可以設(shè)置。

如何在EditText中顯示隱藏Android輸入法窗口?
細(xì)心的網(wǎng)友可能發(fā)現(xiàn)我們?cè)谑褂肊ditText時(shí),會(huì)自動(dòng)的彈出輸入法面板,這里我們提供多種方法可以不讓程序默認(rèn)升起IME窗口。
1.讓EditText失去焦點(diǎn),使用EditText的clearFocus方法
2. 強(qiáng)制隱藏Android輸入法窗口,在IME類中我們通過
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 實(shí)例化輸入法控制對(duì)象,通過hideSoftInputFromWindow來控制,其中第一個(gè)參數(shù)綁定的為需要隱藏輸入法的EditText對(duì)象,比如imm.hideSoftInputFromWindow(etAndroid123.getWindowToken(), 0);

如何實(shí)現(xiàn)TextView多行本文滾動(dòng)?
Android中我們?yōu)榱藢?shí)現(xiàn)文本的滾動(dòng)可以在ScrollView中嵌入一個(gè)TextView,其實(shí)TextView自己也可以實(shí)現(xiàn)多行滾動(dòng)的,畢竟ScrollView必須只能有一個(gè)直接的子類布局。只要在layout中簡(jiǎn)單設(shè)置幾個(gè)屬性就可以輕松實(shí)現(xiàn)
<TextView
android:id="@+id/tvCWJ"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" <!--垂直滾動(dòng)條 -->
android:singleLine="false" <!--實(shí)現(xiàn)多行 -->
android:maxLines="15" <!--最多不超過15行 -->
android:textColor="#FF0000"
/>
當(dāng)然我們?yōu)榱俗孴extView動(dòng)起來,還需要用到TextView的setMovementMethod方法設(shè)置一個(gè)滾動(dòng)實(shí)例,代碼如下
TextView tvAndroid123 = (TextView)findViewById(R.id.tvCWJ);
tvAndroid123.setMovementMethod(ScrollingMovementMethod.getInstance());

如何對(duì)View截屏?
對(duì)于自己的View實(shí)現(xiàn)一些繪圖或子類化的技術(shù)時(shí)可以不用系統(tǒng)級(jí)這樣的方法,我們可以通過
view.setDrawingCacheEnabled(true); //其中View是你需要截圖的的View
Bitmap bm = view.getDrawingCache();

如何區(qū)別onRetainNonConfigurationInstance和getLastNonConfigurationInstance?
很多網(wǎng)友可能知道Android橫豎屏切換時(shí)會(huì)觸發(fā)onSaveInstanceState,而還原時(shí)會(huì)產(chǎn)生onRestoreInstanceState,但是Android的Activity類還有一個(gè)方法名為onRetainNonConfigurationInstance和getLastNonConfigurationInstance這兩個(gè)方法。
我們可以通過 onRetainNonConfigurationInstance 代替 onSaveInstanceState,比如距離2
@Override
public Object onRetainNonConfigurationInstance()
{
//這里需要保存的內(nèi)容,在切換時(shí)不是bundle了,我們可以直接通過Object來代替
return obj;
}

在恢復(fù)窗口時(shí),我們可以不使用 onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。我們可以直接在onCreate中使用,比如
Object obj = getLastNonConfigurationInstance(); 最終obj的內(nèi)容就是上次切換時(shí)的內(nèi)容。
這里Android123提醒大家,每次Activity橫豎屏切換時(shí)onCreate方法都會(huì)被觸發(fā)。

如何區(qū)別AsyncTask和Thread+Handler?
很多網(wǎng)友可能發(fā)現(xiàn)Android平臺(tái)很多應(yīng)用使用的都是AsyncTask,而并非Thread和Handler去更新UI,這里Android123給大家說下他們到底有什么區(qū)別,我們平時(shí)應(yīng)該使用哪種解決方案。從Android 1.5開始系統(tǒng)將AsyncTask引入到android.os包中,過去在很早1.1和1.0 SDK時(shí)其實(shí)官方將其命名為UserTask,其內(nèi)部是JDK 1.5開始新增的concurrent庫(kù),做過J2EE的網(wǎng)友可能明白并發(fā)庫(kù)效率和強(qiáng)大性,比Java原始的Thread更靈活和強(qiáng)大,但對(duì)于輕量級(jí)的使用更為占用系統(tǒng)資源。Thread是Java早期為實(shí)現(xiàn)多線程而設(shè)計(jì)的,比較簡(jiǎn)單不支持concurrent中很多特性在同步和線程池類中需要自己去實(shí)現(xiàn)很多的東西,對(duì)于分布式應(yīng)用來說更需要自己寫調(diào)度代碼,而為了Android UI的刷新Google引入了Handler和Looper機(jī)制,它們均基于消息實(shí)現(xiàn),有事可能消息隊(duì)列阻塞或其他原因無法準(zhǔn)確的使用。

Android開發(fā)網(wǎng)推薦大家使用AsyncTask代替Thread+Handler的方式,不僅調(diào)用上更為簡(jiǎn)單,經(jīng)過實(shí)測(cè)更可靠一些,Google在Browser中大量使用了異步任務(wù)作為處理耗時(shí)的I/O操作,比如下載文件、讀寫數(shù)據(jù)庫(kù)等等,它們?cè)诒举|(zhì)上都離不開消息,但是AsyncTask相比Thread加Handler更為可靠,更易于維護(hù),但AsyncTask缺點(diǎn)也是有的比如一旦線程開啟即dobackground方法執(zhí)行后無法給線程發(fā)送消息,僅能通過預(yù)先設(shè)置好的標(biāo)記來控制邏輯,當(dāng)然可以通過線程的掛起等待標(biāo)志位的改變來通訊,對(duì)于某些應(yīng)用Thread和Handler以及Looper可能更靈活。

如何使多個(gè)Drawable疊加(合成圖片)?
大家可能知道Bitmap的疊加處理在Android平臺(tái)中可以通過Canvas一層一層的畫就行了,而Drawable中如何處理呢? 除了使用BitmapDrawable的getBitmap方法將Drawable轉(zhuǎn)換為Bitmap外,今天Android123給大家說下好用簡(jiǎn)單的LayerDrawable類,LayerDrawable顧名思義就是層圖形對(duì)象。下面直接用一個(gè)簡(jiǎn)單的代碼表示:
Java代碼 收藏代碼
  1. Bitmapbm=BitmapFactory.decodeResource(getResources(),R.drawable.cwj);
  2. Drawable[]array= new Drawable[ 3 ];
  3. array[ 0 ]= new PaintDrawable(Color.BLACK); //黑色
  4. array[ 1 ]= new PaintDrawable(Color.WHITE); //白色
  5. array[ 2 ]= new BitmapDrawable(bm); //位圖資源
  6. LayerDrawableld= new LayerDrawable(array); //參數(shù)為上面的Drawable數(shù)組
  7. ld.setLayerInset( 1 , 1 , 1 , 1 , 1 ); //第一個(gè)參數(shù)1代表數(shù)組的第二個(gè)元素,為白色
  8. ld.setLayerInset( 2 , 2 , 2 , 2 , 2 ); //第一個(gè)參數(shù)2代表數(shù)組的第三個(gè)元素,為位圖資源
  9. mImageView.setImageDrawable(ld);

上面的方法中LayerDrawable是關(guān)鍵,Android開發(fā)網(wǎng)提示setLayerInset方法原型為public void setLayerInset (int index, int l, int t, int r, int b) 其中第一個(gè)參數(shù)為層的索引號(hào),后面的四個(gè)參數(shù)分別為left、top、right和bottom。對(duì)于簡(jiǎn)單的圖片合成我們可以將第一和第二層的PaintDrawable換成BitmapDrawable即可實(shí)現(xiàn)簡(jiǎn)單的圖片合成。

Android點(diǎn)滴


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产99在线播放免费 | 免费观看呢日本天堂视频 | 日本大蕉香蕉大视频在线观看 | 啊用力嗯快国产在线观看 | 99精品久久99久久久久 | 久草在线视频中文 | www.97影院| 亚1洲二区三区四区免费 | 五月天婷婷免费视频观看 | 免费播放国产一级 | 曰本还a大片免费无播放器 曰本黄色录像 | 亚洲精品久久久久久久无 | 欧美特黄a级高清免费大片 欧美特黄a级猛片a级 | 国产乱子伦视频大全 | 免费一级黄色录像 | 2020久久精品永久免费 | 婷婷色九月综合激情丁香 | 国产在线不卡视频 | 国产探花在线观看 | 久久伊人影视 | 日韩区 | 手机精品在线 | 久久婷婷丁香七月色综合 | 日韩欧美综合在线二区三区 | 在线看福利视频120秒 | 69做爰视频在线观看 | 国产亚洲精品在天天在线麻豆 | 日韩有码在线视频 | 成人国产精品免费视频不卡 | 久久综合九色 | 朴妮唛禁福利视频在线 | 91不卡在线精品国产 | 国产波波社区精品视频 | 日本一级毛片私人影院 | 日日做夜夜做 | 国产精品第7页 | 国产亚洲欧美日韩国产片 | 日本特黄在线观看免费 | 国产精品123区 | 日本一区二区三区不卡在线视频 | 色综合综合 |