Action Bar

1 篇文章 / 0 new
author
Action Bar
 
Action Bar 在Leve11開始加入, 若要使用在小於此版本則須掛入 Support Library for compatibility.

► 若要使用在 Level11 以下, 有許多地方需要注意
  Level 11以上 含Level 11以下
引入 V7 Library專案 NC 匯入V7專案(一般位於)
android-sdk\extras\android\compatibility\v7\appcompat
供app引用
import
import android.app.ActionBar;
import android.support.v7.app.ActionBar;
AndroidManifest.xml   必須加入 theme 參數如
android:theme="@style/Theme.AppCompat.Light"
主頁
Extends Activity
FragementActivity (有引用support library v4時,當然也可只用 activity)

Activity (和 ActionBarActivity下的code差異性會較多)
         ↳ android.app.Activity
           ↳ android.support.v4.app.FragmentActivity
             ↳ android.support.v7.app.ActionBarActivity
ActionBarActivity
menu.xml <menu
 xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_websearch"
          android:icon="@drawable/action_search"
          android:title="@string/action_websearch"
          android:showAsAction="ifRoom|withText" />
</menu>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_websearch"
          android:icon="@drawable/action_search"
          android:title="@string/action_websearch"
          app:showAsAction="ifRoom|withText" />
</menu>
取得ActionBar getActionBar(); getSupportActionBar();
呼叫invalidateOptionsMenu() invalidateOptionsMenu() android.support.v4.app.ActivityCompat
ActivityCompat.invalidateOptionsMenu(MainActivity.this);

• action bar 可呈現 icon 數
  • smaller than 360 dp = 2 icons
  • 360-499 dp = 3 icons
  • 500-599 dp = 4 icons
  • 600 dp and larger = 5 icons

若想讓小尺寸裝置可呈現較多action button , 則可在 AndroidManifest.xml 內加入 android:uiOptions="splitActionBarWhenNarrow" 此時較多的圖示會出現在 bottom bar 區內
<activity
    android:name=".MainActivity"
    android:uiOptions="splitActionBarWhenNarrow">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

► menu item showAsAction 參數
ifRoom:如果空間夠用,就顯示
never:永遠不顯示,隱藏在 overflow 裡
withText:顯示文字,可和 ifRoom並用
always:一定顯示
collapseActionView:折疊顯示

► Action View SaerchView
含 Level 11 以下
menu item
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_search"
          android:title="@string/action_search"
          android:icon="@drawable/ic_action_search"
          app:showAsAction="ifRoom|collapseActionView"
          app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem sItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(sItem);
    // 提供搜索資訊或設定事件
    ...
    return super.onCreateOptionsMenu(menu);
}
Level 11 以上
menu item
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="查詢框"
        android:actionViewClass="android.widget.SearchView"
        android:showAsAction="ifRoom|collapseActionView"/>
</menu>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem sItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) (SearchView) sItem.getActionView();
    // 提供搜索資訊或設定事件
    ...
    return super.onCreateOptionsMenu(menu);
}
 
► Action Share View
含 Level 11 以下
menu item
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_share"
          android:title="分享"
          app:showAsAction="ifRoom|collapseActionView"
          app:actionViewClass="android.support.v7.widget.ShareActionProvider" />
</menu>

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);
    MenuItem shareItem = menu.findItem(R.id.action_share);
    ShareActionProvider share = (ShareActionProvider)MenuItemCompat.getActionProvider(shareItem);
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("image/*");
    share.setShareIntent(intent);
    return super.onCreateOptionsMenu(menu);
}
Level 11 以上
menu item
<item</span><span style="font-size:12px">
    android:id="@+id/action_share"
    android:title="分享"
    android:actionProviderClass="android.widget.ShareActionProvider"
    android:showAsAction="ifRoom"/>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem shareItem = menu.findItem(R.id.action_share);  
    ShareActionProvider provider = (ShareActionProvider) shareItem.getActionProvider();  
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("image/*");
    provider.setShareIntent(intent);
 
    return super.onCreateOptionsMenu(menu);
}

參考 Doc, 使用說明, 標準ActionBar Icon
Free Web Hosting