Android中通過ActionBar為標題欄添加搜索以及分享視窗

来源:http://www.cnblogs.com/panhouye/archive/2016/12/23/6216439.html
-Advertisement-
Play Games

在Android3.0之後,Google對UI導航設計上進行了一系列的改革,其中有一個非常好用的新功能就是引入的ActionBar,他用於取代3.0之前的標題欄,並提供更為豐富的導航效果。ActionBar的主要目的是: 1.提供一個用於識別應用程式的標示和用戶的位置的專用空間。 2.在不同的應用程 ...


在Android3.0之後,Google對UI導航設計上進行了一系列的改革,其中有一個非常好用的新功能就是引入的ActionBar,他用於取代3.0之前的標題欄,並提供更為豐富的導航效果。ActionBar的主要目的是:

1.提供一個用於識別應用程式的標示和用戶的位置的專用空間。

2.在不同的應用程式之間提供一致的導航和視覺體驗。

3.突出Activity的關鍵操作(如“搜索”、“創建”、“共用”等),並且在可預見的方法內給用戶提供快捷的訪問。

今天我們就簡單梳理一下如何通過ActionBar為標題添加“搜索”和“分享”的操作視窗,如下圖:

操作視窗是作為操作項目按鈕的替代品顯示在操作欄中的一個可視構件。例如,如果你有一個用於搜索的可選菜單項,你可以用Searchview類來替代操作欄上的搜索按鈕。

要個菜單資源中的一個項目聲明一個操作視窗,你既可以使用android:actionLayout屬性也android:actionviewClass屬性來分別指定一個佈局資源或要使用的可視構件類。

與操作視窗類似,操作提供器(由ActionProvider類定義的)用一個定製的佈局代替一個操作項目,它還需要對所有這些項目行為的控制。當你在操作欄中給一個菜單項聲明一個操作項目時,它不僅要一個定製的佈局來控制這個菜單項的外觀,而且當它在顯示在溢出菜單中時,還要處理它的預設事件。無論是在操作欄中還是在溢出菜單中,它都能夠提供一個子菜單。例如,ActionProvider的擴展類ShareActionProvider,它通過在操作欄中顯示一個有效的共用目標列表來方便共用操作。與使用傳統的調用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組件部署代碼:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto">
 4     <item
 5         android:id="@+id/search"
 6         app:actionViewClass="android.support.v7.widget.SearchView"
 7         android:icon="@android:drawable/ic_menu_search"
 8         android:orderInCategory="100"
 9         android:title="搜索"
10         app:showAsAction="always|collapseActionView" />
11     <item
12         android:id="@+id/share"
13         android:icon="@android:drawable/ic_menu_share"
14         android:orderInCategory="200"
15         android:title="共用"
16         app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
17         app:showAsAction="ifRoom" />
18 </menu>

第二步:java中功能實現代碼MainActivity.java:

 1 import android.content.Intent;
 2 import android.support.v4.view.MenuItemCompat;
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.support.v7.widget.SearchView;
 6 import android.support.v7.widget.ShareActionProvider;
 7 import android.view.Gravity;
 8 import android.view.Menu;
 9 import android.view.MenuItem;
10 import android.widget.Toast;
11 /**
12  * Created by panchengjia on 2016/12/23.
13  */
14 
15 public class MainActivity extends AppCompatActivity {
16     SearchView searchView;
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21     }
22     @Override
23     public boolean onCreateOptionsMenu(Menu menu) {
24         //使用菜單填充器獲取menu下的菜單資源文件
25         getMenuInflater().inflate(R.menu.search_share_menu,menu);
26         //獲取搜索的菜單組件
27         MenuItem menuItem = menu.findItem(R.id.search);
28         searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
29         //設置搜索的事件
30         searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
31             @Override
32             public boolean onQueryTextSubmit(String query) {
33               Toast t = Toast.makeText(MainActivity.this, query, Toast.LENGTH_SHORT);
34                 t.setGravity(Gravity.TOP,0,0);
35                 t.show();
36                 return false;
37             }
38             @Override
39             public boolean onQueryTextChange(String newText) {
40                 return false;
41             }
42         });
43         //獲取分享的菜單子組件
44         MenuItem shareItem = menu.findItem(R.id.share);
45         ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
46         //通過setShareIntent調用getDefaultIntent()獲取所有具有分享功能的App
47         shareActionProvider.setShareIntent(getDefaultIntent());
48         return super.onCreateOptionsMenu(menu);
49     }
50     //設置可以調用手機內所有可以分享圖片的應用
51     private Intent getDefaultIntent() {
52         Intent intent = new Intent();
53         intent.setAction(Intent.ACTION_SEND);
54         //這裡的類型可以按需求設置
55         intent.setType("image/*");
56         return intent;
57     }
58 }


雖然用actionBar可以實現這些功能,但在各個安卓版本和定製Rom中的效果表現不一,導致嚴重的碎片化問題,所以Google在2015的IO大會上發佈了系列的Material Design風格的控制項。其中ToolBar是替代ActionBar的控制項。後面我們也會簡述ToolBar的簡單用法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • input[text] input一般和ngModel結合使用來實現雙向綁定,同時angular提供了很多表單校驗的指令 required 必填 ngRequired 必填(ngRequired可以控制是否是必填校驗) ngMinlength 最小長度 ngMaxlength 最大長度 patter ...
  • JQuery學習之操作類數組的工具方法 在很多時候,JQuery的$()函數都返回一個類似數據的JQuery對象,例如$(‘div’)將返回div裡面的所有div元素包裝的JQuery對象。在這中情況下,JQuery提供了幾個常用的屬性和方法來操作JQuery對象。 length:該屬性返回JQue ...
  • 在前端開發中,我們會頻繁的修改html、css、js,然後刷新頁面,開效果,再調整,再刷新,不知不覺會浪費掉我們很多時間。有沒有什麼方法,我在編輯器裡面改了代碼以後,只要保存,瀏覽器就能實時刷新。經過不懈的努力,發現了這麼一個工具 livereload。這是一款能根據你本地文件(html、css、j ...
  • Q1:常用的運算符有哪些?他們的優先順序是怎樣的?A1:1.算術運算符:加(+)、減(-)、乘(×)、除(÷),自加一(++),自減一(--);2.比較運算符:大於(>)、小於(<)、大於等於(>=)、小於等於(<=);3.邏輯運算符:與(&&)、或(||)、非(!);優先順序為:算術操作符 > 比較操 ...
  • 突然感覺不知道寫啥子,腦子裡面沒水了,可能是因為今晚要出去浪,哈哈~~~提前提醒大家平安夜要回家哦,聖誕節生00000000000這麼多蛋。。。。繼續 上一篇的已經把bootstrap瞭解個大概了,接下來我們就開始學習一下它裡面的東西。 瀏覽器支持 舊的瀏覽器可能無法很好的支持 Bootstrap ...
  • 體驗效果:http://hovertree.com/texiao/css3/39/這是一個使用純CSS3實現的圖文切換效果,沒使用js腳本。點擊左右箭頭或者索圓點引按鈕可以切換內容。本特效中使用到了CSS3的新選擇器 nth-of-type(n),:nth-of-type(n) 選擇器匹配屬於父元素 ...
  • 一、行內元素水平居中 text-align: center; 二、行內元素垂直居中 height: 40px;line-height: 40px; 讓這兩個值相等 三、塊級元素水平居中 width: 300px; margin: 0 auto; 可以不設置高度 三、塊級元素垂直居中 1.固定寬高塊級 ...
  • 對象屬性: 1、private修飾的屬性:只能在本類內部訪問,分類和外部都不能訪問(徹底私有) 2、fileprivate修飾的屬性:在本類和分類中可以訪問,外部不能訪問(部分私有) 3、直接用let或var修飾的屬性:在本類、分類和外部都可以訪問(開放) 4、在分類中只能聲明計算屬性,不能聲明存儲 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...