在Android3.0之后,Google對UI導航設計上進行了一系列的改革,其中有一個非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的標題欄,并提供更為豐富的導航效果。ActionBar的主要目的是:
1.提供一個用于識別應用程序的標示和用戶的位置的專用空間。
2.在不同的應用程序之間提供一致的導航和視覺體驗。
3.突出Activity的關(guān)鍵操作(如“搜索”、“創(chuàng)建”、“共享”等),并且在可預見的方法內(nèi)給用戶提供快捷的訪問。
今天我們就簡單梳理一下如何通過ActionBar為標題添加“搜索”和“分享”的操作視窗,如下圖:

操作視窗是作為操作項目按鈕的替代品顯示在操作欄中的一個可視構(gòu)件。例如,如果你有一個用于搜索的可選菜單項,你可以用Searchview類來替代操作欄上的搜索按鈕。
要個菜單資源中的一個項目聲明一個操作視窗,你既可以使用android:actionLayout屬性也android:actionviewClass屬性來分別指定一個布局資源或要使用的可視構(gòu)件類。
與操作視窗類似,操作提供器(由ActionProvider類定義的)用一個定制的布局代替一個操作項目,它還需要對所有這些項目行為的控制。當你在操作欄中給一個菜單項聲明一個操作項目時,它不僅要一個定制的布局來控制這個菜單項的外觀,而且當它在顯示在溢出菜單中時,還要處理它的默認事件。無論是在操作欄中還是在溢出菜單中,它都能夠提供一個子菜單。例如,ActionProvider的擴展類ShareActionProvider,它通過在操作欄中顯示一個有效的共享目標列表來方便共享操作。與使用傳統(tǒng)的調(diào)用ACTION_SEND類型Intent對象的操作項不同,你能夠聲明一個ShareActionProvider對象來處理一個操作項。這種操作提供器會保留一個帶有處理ACTION_SEND的Intent對象的應用程序的下拉列表,使這個菜單項顯示在溢出菜單中。因此,當你使用像這樣的操作提供器時,你不必處理有關(guān)這個菜單項的用戶事件。要給一個操作項聲明一個操作提供器,就要在菜單資源中對應的<item>元素中定義android:actionProviderClass屬性,提供器要使用完整的類名。
第一步:建立menu資源文件
建立menu資源文件,設置搜索和分享的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中功能實現(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); //設置搜索的事件 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); } //設置可以調(diào)用手機內(nèi)所有可以分享圖片的應用 private Intent getDefaultIntent() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); //這里的類型可以按需求設置 intent.setType("image/*"); return intent; }}雖然用actionBar可以實現(xiàn)這些功能,但在各個安卓版本和定制Rom中的效果表現(xiàn)不一,導致嚴重的碎片化問題,所以Google在2015的IO大會上發(fā)布了系列的Material Design風格的控件。其中ToolBar是替代ActionBar的控件。后面我們也會簡述ToolBar的簡單用法。
以上所述是小編給大家介紹的Android中通過ActionBar為標題欄添加搜索及分享視窗,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
新聞熱點
疑難解答