編輯:關於Android編程
首先承認:這篇文章翻譯的有點不准確,因為這個action,我拿不准怎麼翻譯,不知道是翻譯成動詞還是名詞。所以我把有道詞典上的翻譯結果列在下面。
action n. 行動;活動;功能;戰斗;情節
開始翻譯
v7 appcompat 支持庫為你的應用提供了幾種和用戶的交互方式。前面的幾節課講解了如何定義一個action(講的並不怎麼明白)可以是一個按鈕或者一個菜單項。這節課講解如何添加另外兩種通用的組件。
應用欄上的動作視圖有很多功能。例如,一個搜索動作視圖可以讓用戶在應用欄上輸入搜索文字,而不用改變活動或者fragment界面(意思是不用在一個新的界面上進行搜索動作)。
一個動作提供器擁有自定義的布局。這個動作在初始的時候是作為一個按鈕或者菜單項出現的,當用戶點擊這個action的時候,這個動作提供器控制任何你想定義的動作行為。例如當你點擊的時候,動作提供器會彈出一個菜單。
安卓支持庫提供了幾種特定的動作視圖和動作提供者組件。例如,SearchView 實現了輸入內容來查詢的動作視圖,ShareActionProvider 實現了與其他應用共享信息的動作提供器。你也可以定義你自己的動作視圖和動作提供器。
在toolbar的菜單資源文件中新建一個元素,來添加一個動作視圖。
actionViewClass: 實現了這個動作的組件的類
actionLayout: 描述這個動作的內容的布局文件
showAsAction 屬性可以取值為”ifRoom|collapseActionView” 或者 “never|collapseActionView”.(collapse意思是可折疊的)collapseActionView 表示當用戶沒有和當前action交互的時候action組件如何展示。如果組件是在應用欄上,這個組件會展示為一個圖標。如果這個組件是在overflow按鈕中,這個組件會展示為一個菜單項。當用戶和這個組建交互的時候,這個組件會填滿到整個應用欄。
例如,下面的代碼給應用欄添加了一個SearchView
如果用戶沒有和這個組件交互的時候,應用會把這個組件展示為一個圖標。(通過android:icon 定義的圖標)(如果應用欄上沒有足夠的空間,就把這個組件附加到overflow菜單中。)當用戶點擊了這個圖標或者菜單項,這個組件會充滿整個toolbar,允許用戶和它交互。
圖表1:當用戶點擊了一個動作視圖的圖標,這個視圖會充滿整個toolbar。<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwPjxzdHJvbmc+yOe5+8Tj0OjSqsno1sPV4rj2tq/X98rTzbyjrNTaxOO1xGFjdGl2aXR5tcRvbkNyZWF0ZU9wdGlvbnNNZW51KCm72LX3t723qNbQyejWw6GjxOO/ydLUtffTw2dldEFjdGlvblZpZXcoKdXiuPa+ssyst723qLXDtb3V4rj2tq/X98rTzby1xNL908Oho8D9yOejrM/Cw+a1xLT6wuu1w7W9wcvJz8Pmyr7A/bT6wuvW0Lao0uW1xFNlYXJjaFZpZXe1xNL908Ohozwvc3Ryb25nPjwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
如果一個動作元素有一個collapseActionView的標志。那麼當用戶不和這個動作視圖交互的時候,應用會把這個動作視圖展示為一個圖標。當用戶點擊了這個圖標,onOptionsItemSelected()的內置處理程序會把這個動作視圖展開。如果你集成了Activity並且重寫了onOptionsItemSelected()方法,你復寫的方法必須(must)調用super.onOptionsItemSelected(),不然這個動作視圖不能展開。 如果當這個動作視圖展開或者折疊起來的時候你想做一些事情,你可以定義一個類實現MenuItem.OnActionExpandListener並作為一個參數傳遞給 setOnActionExpandListener()。例如,當這個動作視圖展開或者折疊的時候你想更新這個activity。下面的片段展示了如何定義並傳遞一個listener。 在toolbar的菜單資源文件中新建一個元素來聲明一個動作提供器。添加一個actionProviderClass屬性,並賦值為內容提供器類的全路徑名。 例如,下面的代碼聲明了了一個ShareActionProvider。這是支持庫中的一個組件用來與其他應用共享數據。 在這種情況下,不必要為這個組件提供一個圖標,因為ShareActionProvider自帶了圖標,但是如果你要用一個自定義的圖標,那就聲明一個圖標。 關於自定義一個動作提供器更多信息,請參考 “ ActionProvider reference ”。更多關於設置ShareActionProvider的信息,請參考“ShareActionProvider類” 2 .然後在MainActivity中重寫方法 onCreateOptionsMenu(Menu menu) 3.看一下運行效果 4.給這個search動作視圖添加一個搜索文字變化的監聽事件。 4.給這個search動作視圖添加一個展開和折疊的監聽事件。 下面進入到添加一個動作提供器的實戰環節 3.在onOptionsItemSelected(MenuItem item)中操作 效果如下 差不多就到這了,關於toolbar的翻譯應該結束了。有疑問和錯誤的地方歡迎指出。@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_activity_actions, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView =
(SearchView) MenuItemCompat.getActionView(searchItem);
// 設置搜索內容並添加事件監聽等等。。。
return super.onCreateOptionsMenu(menu);
}
動作視圖展開的時候進行交互(Responding to action view expansion)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options, menu);
// ...
//定義一個監聽器
OnActionExpandListener expandListener = new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// 當item折疊起來的時候的處理動作
return true; // 返回true來折疊起這個動作視圖
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// 當item展開來的時候的處理動作
return true; // 返回true來展開這個動作視圖
}
};
// Get the MenuItem for the action item
MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);
// 給這個動作視圖添加監聽
MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);
//選項菜單創建的時候,你想做的其他事情
return true;
添加一個動作提供器(Add an Action Provider)
接下來進入實踐階段
在我的mymenu.xml文件中添加一個item項
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//這句話的意思是把mymenu加載到menu中
getMenuInflater().inflate(R.menu.mymenu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//這句話的意思是把mymenu加載到menu中
getMenuInflater().inflate(R.menu.mymenu, menu);
MenuItem searchItem=menu.findItem(R.id.action_search);
SearchView searchView= (SearchView) MenuItemCompat.getActionView(searchItem);
/**
* 添加一個搜索文字的監聽事件制作,只做一個簡單的操作,
*/
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
//在這裡搜索框裡輸入什麼editText就顯示什麼
editText.setText(newText);
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//這句話的意思是把mymenu加載到menu中
getMenuInflater().inflate(R.menu.mymenu, menu);
MenuItem searchItem=menu.findItem(R.id.action_search);
MenuItemCompat.OnActionExpandListener expandListener=new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
Toast toast= Toast.makeText(MainActivity.this,"搜索框展開了",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
Toast toast=Toast.makeText(MainActivity.this,"搜索框折疊了",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
return true;
}
};
MenuItemCompat.setOnActionExpandListener(searchItem,expandListener);
return super.onCreateOptionsMenu(menu);
}
//這句話的意思是把mymenu加載到menu中
getMenuInflater().inflate(R.menu.mymenu, menu);
MenuItem shareItem = menu.findItem(R.id.action_share);
ShareActionProvider myShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
myShareIntent = new Intent(Intent.ACTION_SEND);
myShareIntent.setType("image/*");
//我手機的內存卡的根目錄的Pictures目錄下有一張叫share的圖片,我要把它分享給qq好友
File imgFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/share.jpg");
myShareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imgFile));
myShareActionProvider.setShareIntent(myShareIntent);
switch (item.getItemId()) {
case R.id.action_share:
//分享圖片
MainActivity.this.startActivity(Intent.createChooser(myShareIntent, "分享圖片"));
return true;
}
return super.onOptionsItemSelected(item);
網上demo的效果:差不多應該是這樣的,但是容易出一些問題,比如你的圖片本身就是個圓角?又或者圖片太大,你想縮小顯示,但出現顯示內容不全?我想實現的效果是這樣的:http
Android多點觸控技術跟Linux輸入子系統緊密相關。本文將從應用的角度說明Android多點觸控技術的接口和應用。一、多點觸控場景分析網絡上有關Android多點觸
當你在微博或微信中看到有趣的秒拍視頻後,想要將它保存到手機裡面該如何保存呢?簡而言之,也就是手機端下載秒拍視頻。下面,小編來教大家秒拍視頻保存到手機裡的方法
package com.gc.tabhost; /** * @author Android將軍 * * * * 1、TabHost是一種非常實用的組件,T