編輯:關於Android編程
示例演示和基本介紹
啟用Action Bar
在Action Bar上添加按鈕
自定義Action Bar樣式
自動隱藏Action Bar
Action Provider的使用
ActionBarSherlock的使用
如果使用ActionBar則分為兩種情況
1、Action Bar on devices BEFORE Android 3.0(API 11)
1)、ActionBarSherlock開源庫
2)、ActionBarCompat library from the Android suppZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcnQgbGlicmFyeSB2NzxiciAvPg0KMqGiQWN0aW9uIEJhciBvbiBkZXZpY2VzIEFGVEVSIEFuZHJvaWQgMy4wKEFQSSAxMSk8L3A+DQo8cD7U2mFuZHJvaWQzLjDWrsew0qrKudPDQWN0aW9uIEJhctPQyOfJz8G91ta3vcq9o6y12tK71tbKudPDQWN0aW9uQmFyU2hlcmxvY2u/qtS0v+KjqDxlbT7Kx2FuZHJvaWS85sjdv6q3orD8tcTSu7j2wKnVuTwvZW0+o6m1scq508O4w7+q1LS/4srHyOe5+9Om08OzzNDy1MvQ0NTaQW5kcm9pZDMuMNLUyc+1xMnosbjU8sSsyM/KudPD1K3J+rXEQWN0aW9uIEJhcrfx1PLKudPDuMO/qtS0v+LM4bmptcRBY3Rpb24gQmFyoaO12rb+1ta3vcq9vs3Kx8q508Nnb29nbGW52be9zOG5qbXEc3VwcG9ydCB2N9XiuPa/qtS0v+KhozxiciAvPg0K1NphbmRyb2lkMy4w1q6687XEyeixuMnPv8nS1Mq508PUrcn6tcRBY3Rpb24gQmFyPC9wPg0KPGgyIGlkPQ=="啟用action-bar">啟用Action Bar
1、Action Bar on devices AFTER Android 3.0(API 11)
從Android 3.0開始Action bar被包含在了所使用所使用了Theme.Holo這個主題的Activity中(或Theme.Holo的子類)Theme.Holo是默認的主題,當minSdkVersion和targetSdkVersion都在11或以上時。
2、Action Bar on devices BEFORE Android 3.0(API 11)
必須是2.1以上的設備,需要在應用中包含Support Library(android-support-v7-appcompat)操作步驟:
1)、將該android-sdk-windows\extras\android\support\v7\appcompat庫導入並拷貝到工作空間中最後引入到你的項目中
2)、將activity繼承自ActivityBarActivity
3)、將AndroidManifest.xml文件中的主題更改為
android:theme=”@style/Theme.AppCompat.Light.DarkActionBar”
1、For Android 3.0 and higher only
添加按鈕也分為兩個部分,第一個部分在xml指定這些按鈕(在menu中加入不同的item項)
屬性介紹
1)、android:showAsAction=“always“
一直顯示在Action Bar上
2)、android:showAsAction=“ifRoom“
如果Action Bar空間足夠,則顯示
3)、android:showAsAction=“never“
不顯示在Action Bar中,折疊在OverFlow裡
4)、android:showAsAction=“withText“
菜單項和它的圖標,菜單文本一起顯示
2、For Android 2.1 and higher
1)、在menu.xml中加入自定義命名空間
xmlns:yourapp=”http://schemas.android.com/apk/res-auto”
2)、在showAsAction屬性前指定命名空間
yourapp:showAsAction="ifRoom"
Action Bar上的按鈕添加點擊事件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// 給按鈕添加點擊事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
Toast.makeText(this, "Action_Search", 0).show();
break;
case R.id.action_settings:
Toast.makeText(this, "Action_Settings", 0).show();
break;
}
return super.onOptionsItemSelected(item);
}
給ActionBar左上角圖標添加向上或返回按鈕(查看google的官方文檔)具體添加什麼樣的按鈕根據需要設定。
//啟用左上角的向上按鈕
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//getActionBar().setDisplayHomeAsUpEnabled(true);//3.0以上
注:parentActivityName屬性為3.0以上使用,3.0以下要用“meta-data”
使用android提供好的主題
Theme.Holo for “dark” theme Theme.Holo.Light for a “light” themeFor example
以上是在3.0以上使用Android自帶的主題,如果是android 2.1以上的設備使用如下方式:
For example
Customize the Background(自定義Action Bar的背景顏色)
For Android 3.0 and higher only
1、在themes.xml中新建自定義Style,使其繼承已有的Action Bar Style(如:Theme.Holo)
2、覆寫其actionBarStyle屬性
3、actionBarStyle屬性值指向另一個已被覆寫了background屬性的Style
4、指定該background的屬性值
themes.xml
在AndroidManifest.xml中引用自定義主題
android:theme="@style/CustomActionBarTheme"
For Android 2.1 and higher
themes.xml
最後同樣在清單文件中引入自定義主題
Customize the Color 參考官方文檔
Customize the Tab Indicator
ActionBar actionBar = getActionBar(); // for < 3.0 getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//設置導航方式,ActionBar.NAVIGATION_MODE_LIST
ActionBar.TabListener tabLiatener = new ActionBar.TabListener() {
@Override
// 未選中時
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
// 選中時
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"TabSelected" + tab.getPosition(), 0).show();
}
@Override
// 重復選中時
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
};
//添加三個標簽
for (int i = 0; i < 3; i++) {
Tab tab = actionBar.newTab();
tab.setText("Tab" + i);
tab.setTabListener(tabLiatener);
actionBar.addTab(tab);//添加到actionbar中
}
自定義Tab標簽的樣式(參照官方文檔)另外還有一種方法可以一鍵生成Action Bar Tab的樣式,設置好後直接下載並解壓將res目錄中的文件全部拷貝到項目中,最後在清單文件中使用一鍵工程生成的樣式。(可以到谷歌的官方文檔學習更多自定義樣式的使用)
默認情況下,Action Bar出現在當前的activity的頂部,減少了Activity布局當中剩下的可以用的空間,在這種情況下可以調用hide() and show()方法來使Action Bar隱藏或顯示,但是通過這種方式的話會使你的Activity根據新的大小從新計算並且重新繪制這個layout,為了避免重繪現象你可以開啟action bar 的overlay mode模式,當處於overlay模式下activity可以使用剩下可利用的空間並且見這個Action bar繪制到當前layout的前面而不是上面提到的頂部,利用該方式當action bar隱藏或顯示就不會從前計算layout的大小
Enable Overlay Mode(開啟overlay模式)
需要創建自定義主題,這個主題要擴展一個已經存在的Action bar主題並且設置android:windowActionBarOverly屬性為true,(這裡同樣分為兩部分3.0以上的設備和2.1以上設備)
1、For Android 3.0 and higher only
2、For Android 2.1 and higher
為什麼要知道marginTop,當Action Bar處於overlay模式
時他占據了一些可見的布局,為了確保這些布局保留在Action bar的下部就可以為其加入marginTop或paddingTop屬性並且屬性的值指定為 actionBarSize
For example
1、For Android 3.0 and higher only
...
2、For Android 2.1 and higher
...
知識點(XML)
1、For Android 3.0 and higher only
2、For Android 2.1 and highers
3.0 For example
知識點(JAVA)
1、For Android 3.0 and higher only
shareItem = menu.findItem(R.id.action_share);
shareItem.getActionProvider();
2、For Android 2.1 and higher
shareItem = menu.findItem(R.id.action_share);
MenuItemCompat.getActionProvider(shareItem);
ActionBarSherlock 是兼容開發包的一個擴展
開源庫地址
https://github.com/JakeWharton/ActionBarSherlock
官網地址
http://actionbarsherlock.com/
把他下載下來,把actionabarabsherlock拷貝到工作空間中並引入到項目中
導入之後可能會出現的問題:
android-support-v4.jar包版本不一致導致出錯等…
知識點
1、 android:Theme.Holo —-> Theme.Sherlock
android:Theme.Holo.Light —–> Theme.Sherlock.Light
android:Theme.Holo.Light.DarkActionBar —-> Theme.Sherlock.Light.DarkActionBar
…….
2、 Activity —-> SherlockActivity
ListActivity —-> SherlockListActivity
Fragment —-> SherlockFragment
…….
3、 getActivity() —-> getSherlockActivity()
getActionBar() —-> getSupportActionBar();
…….
示例代碼
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.actionbarsherlock.app.SherlockActivity;
public class MainActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actinBar = getSupportActionBar();
actinBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);//設置為列表項的導航模式
//為列表項添加內容
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
for(int i=0;i<5;i++){
adapter.add("列表項"+i);
}
actinBar.setListNavigationCallbacks(adapter, new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
Toast.makeText(MainActivity.this, "select"+itemPosition, 0).show();
return false;
}
});
}
}
android:theme="@style/Theme.Sherlock.Light.DarkActionBar"
關於ActionBarSherlock的更多設置請查看官網
前言Ant是歷史比較悠久的一個自動化構建工具,Android開發者可以通過它來實現自動化構建,也可以實現多渠道打包,關於apk打包的方式一般有Ant、Python、Gra
Android虛擬鍵盤的彈起會遮擋住部分ui,雖然通過在清單文件中設置,可以隨著虛擬鍵盤的彈出,布局往上推,但是面對登陸界面時,並沒有太大的作用,這樣就會導致用戶體驗不好
服務的生命周期 服務的生命周期跟啟動服務的方法有關: 當采用Context.startService()方法啟動服務,與之有關的生命周期方法 onCreate()
我要自定義的控件是一個蓋世英雄,它不僅僅是一個Loading控件,同時還支持進度條 (ProgressBar)功能 。它會在你需要的時候出現,它支持 left,top,r