Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發小知識點

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

android:label=”OtherActivity”

android:name=”com.example.OtherActivity”

>

//最好使用包路徑做action

.

啟動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,如

android:name=”.MainActivity”

android:windowSoftInputMode=”stateHidden”

>

八、橫豎屏切換

(一) 適應顯示方向

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橫向)

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

android:label="@string/app_name"

android:screenOrientation="portrait">

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

(一) 打開或隱藏ActionBar

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

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有分針和時針

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

/>

\

2、 DigitalClock數字顯示時間<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PERpZ2l0YWxDbG9jazwvcD4KPHA+IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPaGxd3JhcF9jb250ZW50obE8L3A+CjxwPiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9obF3cmFwX2NvbnRlbnShsTwvcD4KPHA+Lz48L3A+CjxwPiA8L3A+CjxwPsquyP2hoiAgICAgIFdlYlZpZXc8L3A+CjxwPjGhoiAgsdzD4tKzw+bD4tbYtqjP8qOs0OjKtc/WV2ViVmlld0NsaWVudMDgsqLW2NC0c2hvdWxkT3ZlcnJpZGVVcmxMb2FkaW5nKCm3vbeooaM8L3A+CjxwPmNsYXNzIENhbGxiYWNrIGV4dGVuZHMgV2ViVmlld0NsaWVudHs8L3A+CjxwPkBvdmVycmlkZTwvcD4KPHA+cHVibGljIGJvb2xlYW4gc2hvdWxkT3ZlcnJpZGVVcmxMb2FkaW5nKFdlYlZpZXcgdmlldyxTdHJpbmd1cmwpezwvcD4KPHA+cmV0dXJuKGZhbHNlKTs8L3A+CjxwPn08L3A+CjxwPn08L3A+CjxwPndlYnZpZXcuc2V0V2ViVmlld0NsaWVudChuZXcgQ2FsbGJhY2soKSk7PC9wPgo8cD4yoaIgILS0vahIVE1M19a3+7Suo6xsb2FkRGF0YVdpdGhCYXNlVVJMKCk8L3A+CjxwPlN0cmluZyBtaW1lVHlwZT2hsXRleHQvaHRtbKGxOzwvcD4KPHA+U3RyaW5nIGVuY29kaW5nPaGxVVRGLTihsTs8L3A+CjxwPlN0cmluZyBodG1sPaGxPGgxPkEgc2ltcGxlIEhUTUxwYWdlPC9oMT48Ym9keT48cD5sYXp5IGRvZzwvcD48L2JvZHk+obE8L3A+CjxwPndlYlZpZXcubG9hZERhdGFXaXRoQmFzZVVSTCihsKGxLGh0bWwsbWltZVR5cGUsZW5jb2RpbmcsobGhsSk7PC9wPgo8cD7KrsvEoaIgICAgICBDb250ZW50IFByb3ZpZGVyPC9wPgo8cD4xoaIgILLp0a/X1rf7tK48L3A+CjxwPmEpICAgICAgICBjb250ZW50Oi8vbWVkaWEvaW50ZXJuYWwvaW1hZ2VzICC3tbvY0ru49tK7uPa05rSi1NrJ6LG4yc+1xLe1u9jE2rK/zbzP8bXEwdCx7TwvcD4KPHA+YikgICAgICAgIGNvbnRlbnQ6Ly9tZWRpYS9leHRlcm5hbC9pbWFnZXMgILe1u9jSu7j2tOa0otTayeixuLXEzeKyv7TmtKLG96OoyOdTRL+oo6nJz7XEy/nT0M28z/G1xMHQse08L3A+CjxwPmMpICAgICAgICBjb250ZW50Oi8vY2FsbF9sb2cvY2FsbHMgILe1u9jSu7j21NpDYWxsTG9n1tC8x8K8y/nT0M2ou7C1xMHQse08L3A+CjxwPmQpICAgICAgICBjb250ZW50Oi8vYnJvd2VyL2Jvb2ttYXJrcyAgt7W72NK7uPa05rSi1Nrkr8DAxvfW0LXEyunHqcHQse08L3A+CjxwPjKhoiAgvOyy4rWxx7DUy9DQ06bTw7PM0PK1xLDmsb48L3A+CjxwPmFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTi5TREtfSU5ULS0tyKEmIzIwNTQwO7e2zqejqDMtMTmjqTwvcD4KPHA+M6GiICDUpLao0uWy6dGv19a3+7Sus6PBvzwvcD4KPHA+Q29udGFjdHMuQ09OVEVOVF9VUkk8L3A+CjxwPkJyb3dzZXIuQk9PS01BUktTX1VSSTwvcD4KPHA+QnJvd3Nlci5TRUFSQ0hFU19VUkk8L3A+CjxwPkNhbGxMb2cuQ09OVEVOVF9VUkk8L3A+CjxwPiAgICAgICAgICBNZWRpYVN0b3JlLmltYWdlLk1lZGlhLklOVEVSTkFMX0NPTlRFTlRfVVJJPC9wPgo8cD4gICAgICAgICAgTWVkaWFTdG9yZS5pbWFnZS5NZWRpYS5FWFRFUk5BTF9DT05URU5UX1VSSTwvcD4KPHA+ICAgICAgICAgIFNldHRpbmdzLkNPTlRFTlRfVVJJPC9wPgo8cD40oaIgIMbky/s8L3A+CjxwPjEpICAgICAgICCy6dGvwarPtcjLPC9wPgo8cD5VcmlhbGxDb250YWN0cz1VcmkucGFyc2Uo"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 為某方法寫注解

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved