Android開發小知識點

jopen 10年前發布 | 33K 次閱讀 Android Android開發 移動開發

一、隱藏活動標題

1、代碼設置:在onCreate()方法中

    requestWindowFeature(Window.FEATURE_NO_TITLE);

2、  在manifest.xml中設置

android:theme="@android:style/Theme.NoTitleBar"

 

二、Toast中傳入Context實例

Toast在Activity中,使用this返回一個Context實例

Toast在AlertDialog中使用,因此使用getApplicationContext()方法返回一個Context實例

 

注意:

TextView tv=new TextView(this);

創建View對象時,傳入的參數是Context對象,因為Activity類是Context類的子類,因此可以使用this關鍵字來代表這個Context對象。

 

三、Activity和Fragment的一個區別

當Activity進入后天后時,會被放到back stack中。這樣當用戶按Back鍵時,Activity可以恢復。但是,Fragment在進入后臺時不會被自動放到back stack中。要實現這一目的,需要在Fragment處理期間顯示調用addToBackStack()方法。

如:

FragmnetManangermanager=getFragmentManager();

FragmentTransactionfragmentTransaction=fragmentMananger.beginTransaction();

fragmentTransaction.replace(android.R.id.content,myfragment);

fragmentTransaction.addToBackStack(null);

fragmentTransaction.commit();

這段代碼確保了當Fragment添加到Activity中,用戶可以點擊Back按鈕移除它

四、Intent調用系統應用,使用startActivity(intent)就可以跳轉頁面

1、  瀏覽器

Intent intent=new Intent(android.content.Intent.ACTION_VIEW,Uri.

parse(“http://www.baidu.com”));

選擇器(可以不要)

startAtivity(Intent.createChooser(intent,”selectBrower..”));

2、  撥打電話

Intent intent=newIntent(android.content.Intent.ACTION_DIAL,Uri.

parse(“tel:+3444444”));

如果想讓應用程序直接呼叫特定號碼,需要為應用程序添加android.permission.CALL_PHONE權限。

只打開撥號應用程序:

Intent intent=newIntent(android.content.Intent.ACTION_DIAL);

3、  地圖

Intent intent=newIntent(android.content.Intent.ACTION_VIEW,Uri.

parse(“geo:37.0,-122.0”));

4、  顯示聯系人列表

Intent intent=newIntent(android.content.Intent.ACTION_VIEW,Uri.

parse(“content://contacts”));

5、  選擇聯系人

Intent intent=newIntent(android.content.Intent.ACTION_PICK,Uri.

parse(“content://contacts”));

android.content.Intent.ACTION_VIEW常量實際上指的是“android.intent.action.VIEW”動作,所以還可以這樣寫,如選擇聯系人:

Intent intent=new Intent(“android.intent.action.VIEW”, Uri.

parse(“content://contacts”));

還可以這樣寫:

Intent intent=new Intent(“android.intent.action.VIEW”);

intent.setData( Uri.parse(“content://contacts”));

 

五、啟動Activity

1、常規方法

Intent intent=new Intent(this,OtherActivity.class);

startActivity(intent);

2、使用action啟動

在manifest.xml中Activity聲明的時候,設置action

<activity

   android:label=”OtherActivity”

  android:name=”com.example.OtherActivity”

 <Intent-filter>

<action android:name=”raleigh.OtherActivity”/>//最好使用包路徑做action

. <category android:name=”android.intent.category.DEFAULT”/>

</intent-filter> 

</activity>

啟動Activity

Intent intent=new Intent(”raleigh.OtherActivity”);

startActivity(intent);

 

六、GroupView視圖組

1、  LinearLayout

2、  AbsoluteLayout

3、  TableLayout

4、  RelativeLayout

5、  FrameLayout

6、  ScrollView

使用絕對布局AbsoluteLayout時可以結合layout_x和layout_y使用,指定View控件的位置。

七、獲取焦點問題

1、  某控件獲取焦點,加下面兩句就可以獲取了

android:focusable=”true”

android:focusableInTouchMode=”true”

2、  使EditText自動獲取焦點,但不彈出虛擬鍵盤

需要在manifest.xml文件中,聲明Activity時設置stateHidden,如

<activity

  android:name=”.MainActivity”

  android:windowSoftInputMode=”stateHidden”

</activity>

八、橫豎屏切換

(一)  適應顯示方向

1、錨定

使用RelativeLayout調整拉伸屏幕

2、調整大小和重新定位

使用兩個布局,(layout-land)一個橫向布局,(layout)一個縱向布局

(二)  配置改變是保持狀態信息

1、  onPause()—當一個Activity被終止或轉入后臺時都會觸發

2、  onSaveInstanceState()—當一個Activity將要被終止或轉入后臺時觸發

與Pause()方法不同的是,當一個Activity從棧中卸載時(例如用戶按下了Back按鈕),不會觸發onSaveInstanceState(),這是因為后面無需恢復其狀態了。

例子,保存:

@Override

protected void onSaveInstanceState(BundleoutState) {

           //注意super的順序

           outState.putString("ID","1234");

           super.onSaveInstanceState(outState);

}

onRestoreInstanceState方法取出:

@Override

protected void onRestoreInstanceState(BundlesavedInstanceState) {

           super.onRestoreInstanceState(savedInstanceState);

           StringID=savedInstanceState.getString("ID");

}

3、  onRetainNonConfigurationInstance()—當一個Activity由于配置改變(例如橫豎屏切換、鍵盤是否可用等),將要被銷毀時觸發。

當需要臨時保存一些數據,例如從Web服務中下載了數據,而用戶改變了屏幕的方向時,可以使用這個方法保存數據。

保存,可以返回任何對象:

@Override

public ObjectonRetainNonConfigurationInstance() {

           String result="some text topreserve";

           returnresult;

}

讀取數據:

@Override

protected void onCreate(BundlesavedInstanceState) {

           super.onCreate(savedInstanceState);

           String str=(String)getLastNonConfigurationInstance();

}

(三)  檢查方向的改變

@Override

         protected void onCreate(BundlesavedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.main);

                   WindowManagerwm=getWindowManager();

// getDefaultDisplay()方法返回一個表示設備屏幕的Display對象

                   Displayd=wm.getDefaultDisplay();

                   if(d.getWidth()>d.getHeight()){

                            //landscape mode

                   }else{

                            //portraitmode

                   }

         }

(四)  控制Activity的方向,設置橫豎屏方向

1、代碼設置,在onCreate()方法中:

   橫向

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

          縱向

          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

3、     在manifest.xml中設置(portrait縱向,landscape橫向)

<activity

           android:name="com.example.test.MainActivity"

           android:label="@string/app_name"

            android:screenOrientation="portrait">

            <!-- 或者android:screenOrientation="landscape" -->

        </activity>

 

九、Action Bar(支持Android 3.0以上)

(一)  打開或隱藏ActionBar

1、隱藏ActionBar,可以在manifest.xml中設置,還可以在代碼中設置         actionBar.hide();

<activity

           android:label="@string/app_name"

           android:name=".MyActionBarActivity"

            android:theme="@android:style/Theme.Holo.NoActionBar"

            />

2、打開ActionBar,代碼設置

@Override

protected void onCreate(BundlesavedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.main);

           ActionBar actionBar=getActionBar();

//隱藏      actionBar.hide();

           actionBar.show();//打開

}

注意,此時manifest.xml中的android:theme不能設置值,否則會報null

(二)  定制動作項和應用程序圖標

1、  定制動作項

menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

說明:

a)        MenuItem.SHOW_AS_ACTION_IF_ROOM如果Action Bar上有空間,將該菜單項顯示為一個動作項,顯示的菜單項沒有文本。

b)        (MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_WITH_TEXT)動作項同時顯示圖標和文本。

2、  ActionBar為了使應用程序圖標可被點擊,需要調用setDisplayHomeAsUpEnabled()方法:

  @Override

protected void onCreate(BundlesavedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.main);

           ActionBar actionBar=getActionBar();

//      actionBar.hide();

           actionBar.show();//顯示Action Bar

           //為了使應用程序圖標可被點擊,需要調用setDisplayHomeAsUpEnabled()方法

           actionBar.setDisplayHomeAsUpEnabled(true);

}

監聽:

 @Override

public boolean onOptionsItemSelected(MenuItemitem) {

     switch (item.getItemId()) {

           case android.R.id.home:

                    Toast.makeText(this,"Youclicked on the Application icon", Toast.LENGTH_SHORT).show();       

                    break;

}

           return true;

}

 

 

(三)   

 

十、Intent Flag

1、Intent.FLAG_ACTIVITY_CLEAR_TOP:確保了當用戶點擊Action Bar中的應用程序圖標時,Backstack中的一系列活動被清除,這樣,如果用戶點擊Back按鈕,應用程序中的其他活動就不會再次顯示

十一、      菜單

1、  為某菜單項設置快捷鍵方法:

menu.setQwertyMode(true);

menuItem.setAlphabeticShortcut()

2、  將某個View與上下文菜單綁定:view.setOnCreateContextMenuListener(this);

十二、      時間視圖,顯示系統時間,不可更改

1、  AnalogClock有分針和時針

<AnaglogClock

 android:layout_width=”wrap_content”

 android:layout_height=”wrap_content”

/>

 

 

2、  DigitalClock數字顯示時間

<DigitalClock

 android:layout_width=”wrap_content”

 android:layout_height=”wrap_content”

/>

 

十三、      WebView

1、  避免頁面免重定向,需實現WebViewClient類并重寫shouldOverrideUrlLoading()方法。

class Callback extends WebViewClient{

@override

public boolean shouldOverrideUrlLoading(WebView view,Stringurl){

return(false);

}

}

webview.setWebViewClient(new Callback());

2、  創建HTML字符串,loadDataWithBaseURL()

String mimeType=”text/html”;

String encoding=”UTF-8”;

String html=”<h1>A simple HTMLpage</h1><body><p>lazy dog</p></body>”

webView.loadDataWithBaseURL(“”,html,mimeType,encoding,””);

十四、      Content Provider

1、  查詢字符串

a)        content://media/internal/images  返回一個一個存儲在設備上的返回內部圖像的列表

b)        content://media/external/images  返回一個存儲在設備的外部存儲器(如SD卡)上的所有圖像的列表

c)        content://call_log/calls  返回一個在CallLog中記錄所有通話的列表

d)        content://brower/bookmarks  返回一個存儲在瀏覽器中的書簽列表

2、  檢測當前運行應用程序的版本

android.os.Build.VERSION.SDK_INT---取值范圍(3-19)

3、  預定義查詢字符串常量

Contacts.CONTENT_URI

Browser.BOOKMARKS_URI

Browser.SEARCHES_URI

CallLog.CONTENT_URI

          MediaStore.image.Media.INTERNAL_CONTENT_URI

          MediaStore.image.Media.EXTERNAL_CONTENT_URI

          Settings.CONTENT_URI

4、  其他

1)        查詢聯系人

UriallContacts=Uri.parse("content://contacts/people");

         或者:

Uri allContacts=ContactsContract.Contacts.CONTENT_URI;

說明:對于Android2.0或更高版本,需要使用Contacts.CONTENT_URI的方式,CONTENT_URI用來查詢基本的Contacts記錄。

2)        檢索第一個聯系人

Uri allContacts=Uri.parse("content://contacts/people/1");

或者

Uri allContacts=ContactsUris.widthAppendedId

(ContactsContract.Contacts.CONTENT_URI,1);

3)        遍歷聯系人

 private void printContacts(Cursor c){

               if(c.moveToFirst()){

                         do{

                                  StringcontactId=c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));

                                  StringcontactDisplayName=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                                  Log.v("ContentProviders",contactId+","+contactDisplayName);

                             //為了訪問一個聯系人的號碼,需要對存儲于

//ContactsContract.ConmmonDataKinds.Phone.CONTENT_URI中的URI進行查詢

                                  inthasPhone=c.getInt(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

                             if(hasPhone==1){

                                      Cursor phoneCursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,

                                                         ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"= "+contactId, null,null);

                                      while(phoneCursor.moveToNext()){

                                                Log.v("Content Providersphone=",phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));

                                      }

                                      phoneCursor.close();

                             }

                         }while(c.moveToNext());

               }

     }

5、  檢索一個托管游標

managedQuery(uri, projection, selection, selectionArgs,sortOrder);

a)        uri

如:Uri allContacts=ContactsContract.Contacts.CONTENT_URI;

b)        投影

如:String[]projection=new String[]{

                    ContactsContract.Contacts._ID,

                    ContactsContract.Contacts.DISPLAY_NAME,

                    ContactsContract.Contacts.HAS_PHONE_NUMBER

           };

c)        篩選

String selection=ContactsContract.Contacts.DISPLAY_NAME+"LIKE '%Lin'";

篩選條件,前后結合使用

String selection=ContactsContract.Contacts.DISPLAY_NAME+" LIKE ?";

String[]  selectionArgs=newString{“%Lin”};

d)        排序

String sortOrder =ContactsContract.Contacts.DISPLAY_NAME+"ASC

 

十五、      SMS

1、   發消息

SmsManager sms=SmsManager.getDefault();

         sms.sendTextMessage(destinationAddress,scAddress, text, sentIntent, deliveryIntent);

說明:

a)        destinationAddress—收件人的電話號碼

b)        scAddress—服務中心地址,null代表默認的SMSC

c)        text—SMS消息的內容

d)        sentIntent—發送消息后調用的掛起的Intent,可以為null

e)        deliveryIntent—消息遞送后調用的掛起的Intent,可以為null

        注意,如果使用SmsManager類以編程的方式發送SMS消息,發送的消息不會出現在發送者的內置Messaging應用程序中

 

十六、      常用快捷鍵

1.        Ctrl+Shift+O  導入該類所需要的所有包

2.        Alt+/  打開提示

3.        Ctrl+Shift+Enter  上一行空行

4.        Shift+Enter 下一行空行

5.        Ctrl+Shift+G 查找調用某方法/對象/類的代碼行

6.        Ctrl+Shift+R 查找資源(需雙擊資源名,如查找layout)

7.        Shift+Alt+R 重命名,方法名/對象名/類名/資源名

8.        Ctrl+/ 注釋某行

9.        Shif+Alt+J  為某方法寫注解

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!