日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android官方导航栏ActionBar(二)—— Action View、Action Provider、Navigation Tabs的详细用法...

發(fā)布時(shí)間:2023/12/20 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android官方导航栏ActionBar(二)—— Action View、Action Provider、Navigation Tabs的详细用法... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在上一篇文章(Android之官方導(dǎo)航欄ActionBar)中,我們介紹了ActionBar各組成部分的基本應(yīng)用。ActionBar除了提供Action Buttons外,還提供了多種導(dǎo)航方式如 Action View、Action Provider、Navigation Tabs、Drop-down Navigation等,下面我們將具體介紹他們的用法。

一、Action View

  首先來(lái)看Action View,action view是用于替換action button并顯示在action bar上面的一種可視組件。在此一SearchView為例,先上效果圖:

?

  先上menu.xml文件,如下

<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"><item android:id="@+id/action_search_actionview"android:title="搜索"android:icon="@drawable/biz_pc_list_search_icon_dark"app:showAsAction="ifRoom|collapseActionView"app:actionViewClass="android.support.v7.widget.SearchView" /> </menu>

  showAsAction屬性在上篇文章已經(jīng)講過(guò),在這里大家要注意的是collapseActionView這個(gè)屬性值,此屬性會(huì)將action view折疊到一個(gè)按鈕中,用戶點(diǎn)擊的時(shí)候才會(huì)展開。

  ActionViewClass屬性用于指定action view的類,這里的SearchView是系統(tǒng)提供的,我們也可以自定義。

  當(dāng)我們需要監(jiān)聽ActionView的相關(guān)事件時(shí),我們需要在方法onCreateOptionsMenu()中取得SearchView對(duì)象,具體如下:

1、3.0之前:

MenuItem action_view = menu.findItem(R.id.action_search_actionview);

SearchView searchView = (SearchView)MenuItemCompat.getActionView(action_view);

2、3.0之后:

menu.findItem(R.id.action_search_actionview).getActionView();

  在得到SearchView對(duì)象后,我們可以監(jiān)聽SearchView的相關(guān)事件,如SearchView的打開關(guān)閉;當(dāng)SearchView中搜索文本發(fā)生變化或者提交搜索信息時(shí),具體如下:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {@Overridepublic boolean onQueryTextSubmit(String s) {Toast.makeText(MainActivity.this,"提交文本:"+s,Toast.LENGTH_SHORT).show();return false;}@Overridepublic boolean onQueryTextChange(String s) {Toast.makeText(MainActivity.this,"當(dāng)前文本:"+s,Toast.LENGTH_SHORT).show();return false;}});MenuItemCompat.setOnActionExpandListener(action_view,new MenuItemCompat.OnActionExpandListener() {@Overridepublic boolean onMenuItemActionExpand(MenuItem item) {Toast.makeText(MainActivity.this,"actionView展開了!",Toast.LENGTH_SHORT).show();return true;}@Overridepublic boolean onMenuItemActionCollapse(MenuItem item) {Toast.makeText(MainActivity.this,"actionView關(guān)閉了!",Toast.LENGTH_SHORT).show();return true;}});
二、Action provider

  Action provider同ActionView 類似可以替換ActionBar中的Action Button,不同的是Action Provider提供子菜單的方式,下面我們以系統(tǒng)提供的ShareActionProvider來(lái)講解Action Provider的用法,同樣,先上效果圖:

?

  Menu.xml的代碼如下:

<item android:id="@+id/action_provider_share"android:title="分享"android:icon="@drawable/ic_launcher"app:showAsAction="ifRoom"app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

  這里最主要的屬性就是 actionProviderClass,此屬性用于指定ActionProvider。

  Java代碼如下:

MenuItem shareItem = menu.findItem(R.id.action_provider_share);ShareActionProvider mShareActionProvider =(ShareActionProvider)MenuItemCompat.getActionProvider(shareItem);Intent shareIntent = new Intent();shareIntent.setType("image/*");mShareActionProvider.setShareIntent(shareIntent);

  那么我們?nèi)绾巫远x實(shí)現(xiàn)一個(gè)ActionProvider呢?很簡(jiǎn)單,我們只需要繼承ActionProvider即可,然后實(shí)現(xiàn)onCreateActionView、onPerformDefaultAction,并提供構(gòu)造函數(shù),具體內(nèi)容如下:

public class MyActionProvider extends ActionProvider {private Context mContext;/*** Creates a new instance.** @param context Context for accessing resources.*/public MyActionProvider(Context context) {super(context);this.mContext = context;}@Overridepublic View onCreateActionView() {View view = LayoutInflater.from(this.mContext).inflate(R.layout.action_provider_layout,null,false);Button btnOk = (Button)view.findViewById(R.id.btnOk);btnOk.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(mContext,"點(diǎn)吧",Toast.LENGTH_SHORT).show();}});return view;}@Overridepublic boolean onPerformDefaultAction(){//處于action flow時(shí),選中時(shí)調(diào)用Toast.makeText(mContext,"點(diǎn)吧",Toast.LENGTH_SHORT).show();return true;}}

  效果如下:

三、Drop-Down Navigation

  Drop-Down Navigation提供了下拉形式的導(dǎo)航方式,同樣先看效果:

?

  實(shí)現(xiàn)此種導(dǎo)航的只要需要如下四步:

1、? 自定義適配器,實(shí)現(xiàn)SpinnerAdaper接口,或者使用系統(tǒng)提供ArrayAdapter等。

2、? 實(shí)現(xiàn)ActionBar.OnNavigationListerner接口,用于響應(yīng)用戶對(duì)drop-down list的內(nèi)容的選擇。

3、? 設(shè)置ActionBar的導(dǎo)航方式為NAVIGATION_MODE_LIST

4、? 設(shè)置ActionBar的setListNavigatioinCallbacks()

  代碼具體如下:

final String[] data=new String[]{"Java","Android","Oracle"};ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,data);actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);actionBar.setListNavigationCallbacks(adapter,new ActionBar.OnNavigationListener() {@Overridepublic boolean onNavigationItemSelected(int i, long l) {String tmp = data[i];Toast.makeText(MainActivity.this,"你選擇了:"+tmp,Toast.LENGTH_SHORT).show();return true;}});
四、Navigation Tabs

  Navigation Tabs提供了Tab頁(yè)形式的導(dǎo)航,效果如下:

?

  Tabs主要和Fragment結(jié)合使用,下面是具體的操作步驟:

1、? 實(shí)現(xiàn)ActionBar.TabListener接口,此接口主要用于監(jiān)聽Tab的切換事件,主要有三個(gè)方法需要實(shí)現(xiàn)

    a)???????? onTabSelected:tab被選中時(shí)的回調(diào)

    b)???????? onTabUnselected:tab從選中到?jīng)]有選中時(shí)的回調(diào)。

    c)???????? onTabReselected:選中已被選中的tab時(shí)的回調(diào)。

2、? 創(chuàng)建Tab并為Tab設(shè)置屬性和TabListener監(jiān)聽

3、? 將Tab添加到ActionBar中

  Tab監(jiān)聽器的代碼如下:

private static class TabListener<T extends Fragment> implements ActionBar.TabListener{private Fragment mFragment;private Activity mActivity;private String mTag;private Class<T> mClass;private String mTitle;public TabListener(Activity activity,String tag,Class<T> clz,String title){mActivity =activity;mTag = tag;mClass = clz;mTitle = title;}@Overridepublic void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {if(mFragment==null){mFragment= Fragment.instantiate(mActivity,mClass.getName());Bundle bundle = new Bundle();bundle.putString("name",mTitle);mFragment.setArguments(bundle);fragmentTransaction.add(R.id.content,mFragment,mTag);}else{fragmentTransaction.attach(mFragment);}Toast.makeText(mActivity,tab.getText()+"onTabSelected",Toast.LENGTH_SHORT).show();}@Overridepublic void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {if(mFragment!=null){fragmentTransaction.detach(mFragment);}Toast.makeText(mActivity,tab.getText()+"onTabUnselected",Toast.LENGTH_SHORT).show();}@Overridepublic void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {Toast.makeText(mActivity,tab.getText()+"onTabReselected",Toast.LENGTH_SHORT).show();}}添加Tab的方法如下:private void initActionBarTabs(ActionBar actionBar){ActionBar.Tab tab1 = actionBar.newTab();tab1.setText("撥號(hào)").setTabListener(new TabListener<TabFragment>(this,"bohao",TabFragment.class,"撥號(hào)"));actionBar.addTab(tab1);ActionBar.Tab tab2 = actionBar.newTab();tab2.setText("聯(lián)系人").setTabListener(new TabListener<TabFragment>(this,"lxr",TabFragment.class,"聯(lián)系人"));actionBar.addTab(tab2);ActionBar.Tab tab3 = actionBar.newTab();tab3.setText("信息").setTabListener(new TabListener<TabFragment>(this,"xx",TabFragment.class,"信息"));actionBar.addTab(tab3);}

?

  想要了解更多內(nèi)容的小伙伴,可以點(diǎn)擊查看源碼,親自運(yùn)行測(cè)試。

?

作者:杰瑞教育
出處:http://www.cnblogs.com/jerehedu/?
本文版權(quán)歸煙臺(tái)杰瑞教育科技有限公司和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

轉(zhuǎn)載于:https://www.cnblogs.com/jerehedu/p/4514772.html

總結(jié)

以上是生活随笔為你收集整理的Android官方导航栏ActionBar(二)—— Action View、Action Provider、Navigation Tabs的详细用法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。