Android中通過ActionBar為標題欄添加搜索及分享視窗
在Android3.0之后,Google對UI導航設計上進行了一系列的改革,其中有一個非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的標題欄,并提供更為豐富的導航效果。ActionBar的主要目的是:
1.提供一個用于識別應用程序的標示和用戶的位置的專用空間。
2.在不同的應用程序之間提供一致的導航和視覺體驗。
3.突出Activity的關鍵操作(如“搜索”、“創(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對象的應用程序的下拉列表,使這個菜單項顯示在溢出菜單中。因此,當你使用像這樣的操作提供器時,你不必處理有關這個菜單項的用戶事件。要給一個操作項聲明一個操作提供器,就要在菜單資源中對應的<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)站的支持!
相關文章
Crashlytics Android 異常報告統(tǒng)計管理(詳解)
下面小編就為大家?guī)硪黄狢rashlytics Android 異常報告統(tǒng)計管理(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
Android實現(xiàn)GridView中的item自由拖動效果
在前一個項目中,實現(xiàn)了一個功能是gridview中的item自由拖到效果,實現(xiàn)思路很簡單,主要工作就是交換節(jié)點,以及拖動時的移動效果,下面小編給大家分享具體實現(xiàn)過程,對gridview實現(xiàn)拖拽效果感興趣的朋友一起看看吧2016-11-11
Eclipse開發(fā)環(huán)境導入android sdk的sample中的源碼
初學Android編程,Android SDK中提供的Sample代碼自然是最好的學習材料,需要的朋友可以參考下2012-12-12
Android自定義TextView實現(xiàn)文字傾斜效果
有時候Android自帶的控件無法滿足我們的某些要求,這時就需要我們自定義控件來實現(xiàn)這些功能。比如在實際開發(fā)應用中,我們有時需要將TextView的文字傾斜一定的角度,就需要自定義TextView。下面這篇文章就給大家介紹了利用Android TextView如何實現(xiàn)文字傾斜效果。2016-11-11
ScrollView與SeekBar綁定實現(xiàn)滑動時出現(xiàn)小滑塊效果
這篇文章主要為大家詳細介紹了ScrollView與SeekBar綁定實現(xiàn)滑動時出現(xiàn)小滑塊效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
Android編程實現(xiàn)仿美團或淘寶的多級分類菜單效果示例【附demo源碼下載】
這篇文章主要介紹了Android編程實現(xiàn)仿美團或淘寶的多級分類菜單效果,結(jié)合實例形式分析了Android多級菜單的實現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-01-01
Android Studio報錯unable to access android sdk add-on list解決方案
這篇文章主要介紹了Android Studio報錯unable to access android sdk add-on list解決方案,本文通過多種方式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
android開發(fā)教程之獲取使用當前api的應用程序名稱
開發(fā)手機安全管家的時候,比如要打電話,或者照相需要知道是哪個應用程序在調(diào)用,就可以在API接口中調(diào)用下面的代碼2014-02-02
android圖像繪制(四)自定義一個SurfaceView控件
自定義控件(類似按鈕等)的使用,自定義一個SurfaceView。如某一塊的動態(tài)圖(自定義相應),或者類似UC瀏覽器下面的工具欄,感興趣的朋友可以了解下2013-01-01

