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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...