編輯:關於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 為某方法寫注解
問題背景:有一些UI具有共性,比如常見的app第一次運行時出現的各種指示框,告訴你往哪搓是調音量的,往哪點是調屏幕亮度的,當點擊這些VIew,則其自動消失。或者一動時間
最近不是很忙,平常在家無聊時看看直播,總會看到一些新奇的驗證登錄方式,剛好自己也要熟悉一下新的開發工具android studio,所以打算自己實現一個.一、確認需求先看
我的微信公眾號:如果你喜歡我的文章,歡迎關注我的微信公眾號。今天給大家介紹的是一款可以動態變化的按鈕,如矩形變為圓形、圓形變為矩形、矩形先變為進度條然後再變為圓形,我們還
滴滴巴士是滴滴快車繼滴滴順風車、滴滴快車服務之後推出的又一便民出行服務,特別廣大上班族來說無疑是極好的,再也不用去擠公交、擠地鐵了。下面下載吧小編就給大家講