Android中通過ActionBar為標(biāo)題欄添加搜索及分享視窗
在Android3.0之后,Google對(duì)UI導(dǎo)航設(shè)計(jì)上進(jìn)行了一系列的改革,其中有一個(gè)非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的標(biāo)題欄,并提供更為豐富的導(dǎo)航效果。ActionBar的主要目的是:
1.提供一個(gè)用于識(shí)別應(yīng)用程序的標(biāo)示和用戶的位置的專用空間。
2.在不同的應(yīng)用程序之間提供一致的導(dǎo)航和視覺體驗(yàn)。
3.突出Activity的關(guān)鍵操作(如“搜索”、“創(chuàng)建”、“共享”等),并且在可預(yù)見的方法內(nèi)給用戶提供快捷的訪問。
今天我們就簡單梳理一下如何通過ActionBar為標(biāo)題添加“搜索”和“分享”的操作視窗,如下圖:
操作視窗是作為操作項(xiàng)目按鈕的替代品顯示在操作欄中的一個(gè)可視構(gòu)件。例如,如果你有一個(gè)用于搜索的可選菜單項(xiàng),你可以用Searchview類來替代操作欄上的搜索按鈕。
要個(gè)菜單資源中的一個(gè)項(xiàng)目聲明一個(gè)操作視窗,你既可以使用android:actionLayout屬性也android:actionviewClass屬性來分別指定一個(gè)布局資源或要使用的可視構(gòu)件類。
與操作視窗類似,操作提供器(由ActionProvider類定義的)用一個(gè)定制的布局代替一個(gè)操作項(xiàng)目,它還需要對(duì)所有這些項(xiàng)目行為的控制。當(dāng)你在操作欄中給一個(gè)菜單項(xiàng)聲明一個(gè)操作項(xiàng)目時(shí),它不僅要一個(gè)定制的布局來控制這個(gè)菜單項(xiàng)的外觀,而且當(dāng)它在顯示在溢出菜單中時(shí),還要處理它的默認(rèn)事件。無論是在操作欄中還是在溢出菜單中,它都能夠提供一個(gè)子菜單。例如,ActionProvider的擴(kuò)展類ShareActionProvider,它通過在操作欄中顯示一個(gè)有效的共享目標(biāo)列表來方便共享操作。與使用傳統(tǒng)的調(diào)用ACTION_SEND類型Intent對(duì)象的操作項(xiàng)不同,你能夠聲明一個(gè)ShareActionProvider對(duì)象來處理一個(gè)操作項(xiàng)。這種操作提供器會(huì)保留一個(gè)帶有處理ACTION_SEND的Intent對(duì)象的應(yīng)用程序的下拉列表,使這個(gè)菜單項(xiàng)顯示在溢出菜單中。因此,當(dāng)你使用像這樣的操作提供器時(shí),你不必處理有關(guān)這個(gè)菜單項(xiàng)的用戶事件。要給一個(gè)操作項(xiàng)聲明一個(gè)操作提供器,就要在菜單資源中對(duì)應(yīng)的<item>元素中定義android:actionProviderClass屬性,提供器要使用完整的類名。
第一步:建立menu資源文件
建立menu資源文件,設(shè)置搜索和分享的ITEM功能組件。
(1)新建menu文件夾,如圖
(2)在menu資源文件夾下建立serch_share_menu.xml文件(自定義名稱)
(3)serch_share_menu.xml組件部署代碼:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/search" app:actionViewClass="android.support.v7.widget.SearchView" android:icon="@android:drawable/ic_menu_search" android:orderInCategory="100" android:title="搜索" app:showAsAction="always|collapseActionView" /> <item android:id="@+id/share" android:icon="@android:drawable/ic_menu_share" android:orderInCategory="200" android:title="共享" app:actionProviderClass="android.support.v7.widget.ShareActionProvider" app:showAsAction="ifRoom" /> </menu>
第二步:java中功能實(shí)現(xiàn)代碼MainActivity.java:
import android.content.Intent; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.SearchView; import android.support.v7.widget.ShareActionProvider; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; /** * Created by panchengjia on 2016/12/23. */ public class MainActivity extends AppCompatActivity { SearchView searchView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { //使用菜單填充器獲取menu下的菜單資源文件 getMenuInflater().inflate(R.menu.search_share_menu,menu); //獲取搜索的菜單組件 MenuItem menuItem = menu.findItem(R.id.search); searchView = (SearchView) MenuItemCompat.getActionView(menuItem); //設(shè)置搜索的事件 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { Toast t = Toast.makeText(MainActivity.this, query, Toast.LENGTH_SHORT); t.setGravity(Gravity.TOP,0,0); t.show(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); //獲取分享的菜單子組件 MenuItem shareItem = menu.findItem(R.id.share); ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem); //通過setShareIntent調(diào)用getDefaultIntent()獲取所有具有分享功能的App shareActionProvider.setShareIntent(getDefaultIntent()); return super.onCreateOptionsMenu(menu); } //設(shè)置可以調(diào)用手機(jī)內(nèi)所有可以分享圖片的應(yīng)用 private Intent getDefaultIntent() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); //這里的類型可以按需求設(shè)置 intent.setType("image/*"); return intent; } }
雖然用actionBar可以實(shí)現(xiàn)這些功能,但在各個(gè)安卓版本和定制Rom中的效果表現(xiàn)不一,導(dǎo)致嚴(yán)重的碎片化問題,所以Google在2015的IO大會(huì)上發(fā)布了系列的Material Design風(fēng)格的控件。其中ToolBar是替代ActionBar的控件。后面我們也會(huì)簡述ToolBar的簡單用法。
以上所述是小編給大家介紹的Android中通過ActionBar為標(biāo)題欄添加搜索及分享視窗,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Crashlytics Android 異常報(bào)告統(tǒng)計(jì)管理(詳解)
下面小編就為大家?guī)硪黄狢rashlytics Android 異常報(bào)告統(tǒng)計(jì)管理(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Android實(shí)現(xiàn)GridView中的item自由拖動(dòng)效果
在前一個(gè)項(xiàng)目中,實(shí)現(xiàn)了一個(gè)功能是gridview中的item自由拖到效果,實(shí)現(xiàn)思路很簡單,主要工作就是交換節(jié)點(diǎn),以及拖動(dòng)時(shí)的移動(dòng)效果,下面小編給大家分享具體實(shí)現(xiàn)過程,對(duì)gridview實(shí)現(xiàn)拖拽效果感興趣的朋友一起看看吧2016-11-11Eclipse開發(fā)環(huán)境導(dǎo)入android sdk的sample中的源碼
初學(xué)Android編程,Android SDK中提供的Sample代碼自然是最好的學(xué)習(xí)材料,需要的朋友可以參考下2012-12-12Android自定義TextView實(shí)現(xiàn)文字傾斜效果
有時(shí)候Android自帶的控件無法滿足我們的某些要求,這時(shí)就需要我們自定義控件來實(shí)現(xiàn)這些功能。比如在實(shí)際開發(fā)應(yīng)用中,我們有時(shí)需要將TextView的文字傾斜一定的角度,就需要自定義TextView。下面這篇文章就給大家介紹了利用Android TextView如何實(shí)現(xiàn)文字傾斜效果。2016-11-11ScrollView與SeekBar綁定實(shí)現(xiàn)滑動(dòng)時(shí)出現(xiàn)小滑塊效果
這篇文章主要為大家詳細(xì)介紹了ScrollView與SeekBar綁定實(shí)現(xiàn)滑動(dòng)時(shí)出現(xiàn)小滑塊效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android編程實(shí)現(xiàn)仿美團(tuán)或淘寶的多級(jí)分類菜單效果示例【附demo源碼下載】
這篇文章主要介紹了Android編程實(shí)現(xiàn)仿美團(tuán)或淘寶的多級(jí)分類菜單效果,結(jié)合實(shí)例形式分析了Android多級(jí)菜單的實(shí)現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-01-01Android Studio報(bào)錯(cuò)unable to access android sdk add-on list解決方案
這篇文章主要介紹了Android Studio報(bào)錯(cuò)unable to access android sdk add-on list解決方案,本文通過多種方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03android開發(fā)教程之獲取使用當(dāng)前api的應(yīng)用程序名稱
開發(fā)手機(jī)安全管家的時(shí)候,比如要打電話,或者照相需要知道是哪個(gè)應(yīng)用程序在調(diào)用,就可以在API接口中調(diào)用下面的代碼2014-02-02android圖像繪制(四)自定義一個(gè)SurfaceView控件
自定義控件(類似按鈕等)的使用,自定義一個(gè)SurfaceView。如某一塊的動(dòng)態(tài)圖(自定義相應(yīng)),或者類似UC瀏覽器下面的工具欄,感興趣的朋友可以了解下2013-01-01