亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

android ActionBar與Menu - 1 - api demos 學習

系統 2897 0

android ActionBar與Menu - 1 - api demos 學習

android ActionBar與Menu - 2 - email中ActionBar分析

?

android2.x到現在的4.0有很大的差別,而手機開發者又沒有經歷過3.x版本的過渡,所以對于手機開發者的壓力是比較大的,需要學習和適應大量新的組件與api

?

本文主要總結對ActionBar和Menu的學習

注意:這里以4.0為base

?

作為開發者,應該閱讀下面重要新聞

谷歌敦促Android開發者停止使用菜單按鈕

先說幾句題外話

我個人覺得,應該保留實體menu按鍵,如果沒有實體按鍵,那應該如何與menu交互?android提供了方案,使用action bar,action bar是顯示在屏幕上的

等等,似乎有點問題,這也就是說:如果開發者需要menu,那么就需要消耗一部分屏幕的空間,雖然現在的手機很少有3寸以下的屏幕了,但是也沒大到增加一個action bar而不使用戶與開發者心疼的地步,起碼我是這么覺得的

之前我可以隱藏狀態欄標題欄但是保留menu,以后估計不行了

?

開始學習,以api demos - App - Action Bar中內容為主

?

menu的顯示方式

boolean android.app.Activity.onCreateOptionsMenu(Menu menu)還是保留下來了的

    MenuItem actionItem = menu.add("Action Button");
actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
  

setShowAsAction:設置ActionBar中menu的顯示方式

顯示方式一共有如下5種:

從不顯示;如果有空間就顯示;總是顯示;顯示時跟隨文字;默認收縮其action view

    /** Never show this item as a button in an Action Bar. */
public static final int SHOW_AS_ACTION_NEVER = 0;
/** Show this item as a button in an Action Bar if the system decides there is room for it. */
public static final int SHOW_AS_ACTION_IF_ROOM = 1;
/**
* Always show this item as a button in an Action Bar.
* Use sparingly! If too many items are set to always show in the Action Bar it can
* crowd the Action Bar and degrade the user experience on devices with smaller screens.
* A good rule of thumb is to have no more than 2 items set to always show at a time.
*/
public static final int SHOW_AS_ACTION_ALWAYS = 2;

/**
* When this item is in the action bar, always show it with a text label even if
* it also has an icon specified.
*/
public static final int SHOW_AS_ACTION_WITH_TEXT = 4;

/**
* This item's action view collapses to a normal menu item.
* When expanded, the action view temporarily takes over
* a larger segment of its container.
*/
public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8;
  

其中SHOW_AS_ACTION_WITH_TEXT需要注意一下

在手機中,豎屏狀態下text是不會顯示的,切換到橫屏才會顯示text

?

SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW也需要特別說明一下

menu的每個item都可以設置action view,如果設置了,那么這個view默認是顯示的,設置了SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW后,則默認不顯示

?

另外需要說明的是:

現在手機有兩種,一種是有實體按鍵的手機,不在action bar顯示的item,按menu則會看到剩余的item

另一種是沒有實體menu鍵的手機,他們通過action bar等觸發menu,所有的item都會在action bar顯示,“顯示不下”的item會在action bar最后一個item觸發顯示剩余item列表,類似于之前我們按menu鍵后出現的“more”

(模擬器中可以選擇是否有實體menu按鍵,編輯模擬器 - hardware - new - hardware back/home keys,添加此項選擇no即可去掉實體按鍵)

?

?

ActionBar還提供了Tab功能

4.0中大家發現:TabActivity已經稱為了過時的class,那么新的標簽頁如何實現,ActionBar提供一種簡單的方式

    final ActionBar bar = getActionBar();
final int tabCount = bar.getTabCount();
final String text = "Tab " + tabCount;
bar.addTab(bar.newTab()
        .setText(text)
        .setTabListener(new TabListener(new TabContentFragment(text))));
  

其中TabListener要實現ActionBar.TabListener,并實現如下幾個函數

    private class TabListener implements ActionBar.TabListener {
    public void onTabSelected(Tab tab, FragmentTransaction ft) {}
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
    public void onTabReselected(Tab tab, FragmentTransaction ft) {}
}
  

?函數從名稱就能看出是做什么的了,不再贅述

?

上面是ApiDemos的示例,只需addTab即可

    void android.app.ActionBar.addTab(Tab tab)
void android.app.ActionBar.addTab(Tab tab, boolean setSelected)
void android.app.ActionBar.addTab(Tab tab, int position)
void android.app.ActionBar.addTab(Tab tab, int position, boolean setSelected
  

除此之外,android也提供了remove和removeAll的api,不再列舉

?

api demos中給出了Action Bar中使用menu的簡單演示 ,效果如下

android ActionBar與Menu - 1 - api demos 學習 ?? android ActionBar與Menu - 1 - api demos 學習

上面三個menu,下面兩個,點擊Sort之后彈出二級菜單

只需在xml中進行配置即可

    <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="@string/action_bar_search"
          android:showAsAction="ifRoom"
          android:actionViewClass="android.widget.SearchView" />
    <item android:id="@+id/action_add"
          android:icon="@android:drawable/ic_menu_add"
          android:title="@string/action_bar_add" />
    <item android:id="@+id/action_edit"
          android:icon="@android:drawable/ic_menu_edit"
          android:showAsAction="always"
          android:title="@string/action_bar_edit" />
    <item android:id="@+id/action_share"
          android:icon="@android:drawable/ic_menu_share"
          android:title="@string/action_bar_share"
          android:showAsAction="ifRoom" />
    <item android:id="@+id/action_sort"
          android:icon="@android:drawable/ic_menu_sort_by_size"
          android:title="@string/action_bar_sort"
          android:showAsAction="ifRoom">
        <menu>
            <item android:id="@+id/action_sort_size"
                  android:icon="@android:drawable/ic_menu_sort_by_size"
                  android:title="@string/action_bar_sort_size"
                  android:onClick="onSort" />
            <item android:id="@+id/action_sort_alpha"
                  android:icon="@android:drawable/ic_menu_sort_alphabetically"
                  android:title="@string/action_bar_sort_alpha"
                  android:onClick="onSort" />
        </menu>
    </item>
</menu>
  

?

當把手機變成橫屏的時候,由于空間充足,Sort就會顯示在Action Bar中,下圖是點擊Sort后的效果

android ActionBar與Menu - 1 - api demos 學習

?

我們點擊By size和Alphabetically會發現,Sort的圖標會跟著改變

    public void onSort(MenuItem item) {
    mSortMode = item.getItemId();
    // Request a call to onPrepareOptionsMenu so we can change the sort icon
    invalidateOptionsMenu();
}
  

invalidateOptionsMenu會通知系統menu發生了改變,觸發onPrepareOptionsMenu和onCreateOptionsMenu ,然后再看看onPrepareOptionsMenu做了些什么

    public boolean onPrepareOptionsMenu(Menu menu) {
    if (mSortMode != -1) {
        Drawable icon = menu.findItem(mSortMode).getIcon();
        menu.findItem(R.id.action_sort).setIcon(icon);
    }
    return super.onPrepareOptionsMenu(menu);
}
  

調用的時候會判斷狀態,根據狀態設置Sort圖標

?

當我們點擊Search按鈕的時候,它的Action View會顯示出來

    <item android:id="@+id/action_search"
      android:icon="@android:drawable/ic_menu_search"
      android:title="@string/action_bar_search"
      android:showAsAction="ifRoom"
      android:actionViewClass="android.widget.SearchView" />
  

xml中顯示了Action View調用的是android.widget.SearchView這個class

    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.actions, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setOnQueryTextListener(this);
    return true;
}
  

在這里為SearchView設置監聽,onQueryTextChange在輸入框文字修改時觸發,onQueryTextSubmit在提交搜索時觸發

?

在xml也可以設置ActionProvider,例如

    <item android:id="@+id/menu_item_action_provider_action_bar"
    android:showAsAction="ifRoom"
    android:title="@string/action_bar_settings"
    android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"/>
  

ActionProvider的使用暫時不做過多討論


上面的圖片是一個Action Bar,可以分為幾個部分,他們都可以設置為顯示或者不顯示,從左至右依次為:

ActionBar.DISPLAY_HOME_AS_UP 類似于提示作用,上圖為一個脫字符(Up caret),不能單獨只顯示這個。。

ActionBar.DISPLAY_SHOW_HOME 大大的android圖片為home,當然這個默認為apk的圖標,可以通過 ActionBar.DISPLAY_USE_LOGO 來設置使用什么圖片

ActionBar.DISPLAY_SHOW_TITLE 接下來的是title

ActionBar.DISPLAY_SHOW_CUSTOM 然后是定制的View,可以通過void android.app. ActionBar.setCustomView (View view, LayoutParams layoutParams)設置

?

api demos中關于Action Bar的內容總結完了,我想掌握了這些,基本使用應該是沒有問題了,之后打算在android源碼中找些實例分析一下,待續

?

?

轉貼請保留以下鏈接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

android ActionBar與Menu - 1 - api demos 學習


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美精品国产综合久久 | 国产欧美成人不卡视频 | 麻豆精品视频 在线视频 | 精品视频免费在线 | 九九九九精品视频在线播放 | 精品玖玖玖视频在线观看 | 国产一区二区三区国产精品 | 一区一精品 | 国产精品1 | 九九热免费在线观看 | 九九99热| 深夜福利在线看 | 亚洲精品一区二区久久久久 | 视频二区 素人 欧美 日韩 | 日本免费的一级v一片 | 国产成人a毛片 | 国产亚洲精品麻豆一区二区 | 欧美亚洲欧美 | 国产精品久久国产精品99 | 综合欧美亚洲 | 97色老99久久九九爱精品 | 91香蕉网站 | 中文字幕国产在线 | 国产精品爱久久久久久久9999 | 2020国产成人精品视频人 | 国产成人精品视频一区二区不卡 | 欧洲毛片| 伊人影院视频 | 最新国产福利片在线观看 | 在线日韩中文字幕 | 免费不卡中文字幕在线 | 日韩欧美精品在线视频 | 亚洲精品国产福利片 | 久久中文视频 | 中文字幕不卡一区 | 最新国产精品视频 | xxxx日本免费高清视频 | 天天操夜夜操 | 高清不卡在线 | 久久精品免费i 国产 | 九九久久国产精品大片 |