十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
在讓navigation bar 顯示貨隱藏前,需要判斷是否存在navigationbar。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到銅山網(wǎng)站設(shè)計(jì)與銅山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋銅山地區(qū)。
public static boolean checkDeviceHasNavigationBar(Context activity) {
//通過(guò)判斷設(shè)備是否有返回鍵、菜單鍵(不是虛擬鍵,是手機(jī)屏幕外的按鍵)來(lái)確定是否有navigation bar
boolean hasMenuKey = ViewConfiguration.get(activity)
.hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap
.deviceHasKey(KeyEvent.KEYCODE_BACK);
if (!hasMenuKey !hasBackKey) {
// 做任何自己需要做的,這個(gè)設(shè)備有一個(gè)導(dǎo)航欄
return true;
}
return false;
}
安卓4.1之后為全虛擬鍵操作,和actionbar對(duì)應(yīng),底部的虛擬鍵菜單稱為Navigation Bar。
myview.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION),其中的myview 可以為L(zhǎng)ayout中任意的一個(gè)View對(duì)象(可以有findViewById得到)。
RatingBar是基于SeekBar(拖動(dòng)條)和ProgressBar(狀態(tài)條)的擴(kuò)展,用星形來(lái)顯示等級(jí)評(píng)定!
RatingBar實(shí)現(xiàn)的效果圖:
? 看著自定義的樣式遠(yuǎn)遠(yuǎn)比Android自帶的樣式好看多了,用戶體驗(yàn)度遠(yuǎn)遠(yuǎn)提升,下面我們就來(lái)實(shí)現(xiàn)該控件:
定義根據(jù)圖片自定一個(gè)RatingBar的背景條,和圖片放到同一個(gè)目錄下面
?five_rating_bar.xml
backgroud:是用來(lái)填充背景圖片的,和進(jìn)度條非常類(lèi)似,當(dāng)我們?cè)O(shè)置最高評(píng)分時(shí)(android:numStars),系統(tǒng)就會(huì)根據(jù)我們的設(shè)置,來(lái)畫(huà)出以星星為單位的背景(假如android:numStars="5",就會(huì)畫(huà)出5顆灰色的星星)
progress:是用來(lái)在背景圖片基礎(chǔ)上進(jìn)行填充的指示屬性(和進(jìn)度條類(lèi)似,第一進(jìn)度位置)
secondaryProgress:同progress一樣屬于第二進(jìn)度位置(如果不定義這個(gè),進(jìn)度條拖動(dòng),每次就畫(huà)出一整顆星星(亮),第二進(jìn)度(暗)沒(méi)有覆蓋掉第一進(jìn)度之后的位置,從左往右是拖不出來(lái)N.5顆星星的,這樣評(píng)分效果就不完整)
style.xml
? 提取樣式屬于個(gè)人習(xí)慣,這里可以不提取出來(lái),可以寫(xiě)在布局文件中,這里RatingBar的樣式是通過(guò)style來(lái)切換的。
通過(guò) parent屬性來(lái)選擇繼承的父類(lèi),我們這里繼承RatingBar類(lèi)。
重新定義 progressDrawable屬性(RatingBar的背景條)
maxHeight和minHeight可以根據(jù)我們圖片像素或者其他參考值來(lái)設(shè)定。
在我們需要用到RatingBar的xml配置文件里面添加RatingBar控件。
main.xml
android:isIndicator ? ? ? ? ? ?? RatingBar是否是一個(gè)指示器(用戶無(wú)法進(jìn)行更改)
android:numStars ? ? ? ? ? ? ? 顯示的星型數(shù)量,必須是一個(gè)整形值,像“100”。
android:rating ? ? ? ? ? ? ? ? ?? 默認(rèn)的評(píng)分,必須是浮點(diǎn)類(lèi)型,像“1.2”。
android:stepSize ? ? ? ? ? ? ? ? 評(píng)分的步長(zhǎng),必須是浮點(diǎn)類(lèi)型,像“1.2”。
就這么簡(jiǎn)單,我們自定義屬于自己的RatingBar,星級(jí)評(píng)分控件!
在android中,Progressbar可以用來(lái)提醒用戶某個(gè)任務(wù)的進(jìn)度,具體用法如下:
1、首先創(chuàng)建一個(gè)按鈕來(lái)啟動(dòng)一個(gè)帶有progressbar的提醒;
2、編寫(xiě)代碼為按鈕添加一個(gè)點(diǎn)擊事件;
3、運(yùn)行效果;
4、修改progressbar的風(fēng)格;
5、完整的代碼。
public void onClick(View v) {
// prepare for a progress bar dialog
progressBar = new ProgressDialog(v.getContext());
progressBar.setCancelable(true);
progressBar.setMessage("File downloading ...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
//reset progress bar status
progressBarStatus = 0;
//reset filesize
fileSize = 0;
new Thread(new Runnable() {
?public void run() {
while (progressBarStatus 100) {
?// process some tasks
?progressBarStatus = doSomeTasks();
?// your computer is too fast, sleep 1 second
?try {
Thread.sleep(1000);
?} catch (InterruptedException e) {
e.printStackTrace();
?}
?// Update the progress bar
?progressBarHandler.post(new Runnable() {
public void run() {
?progressBar.setProgress(progressBarStatus);
}
?});
}
// ok, file is downloaded,
if (progressBarStatus = 100) {
// sleep 2 seconds, so that you can see the 100%
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// close the progress bar dialog
progressBar.dismiss();
}
?}
? ? ? }).start();
? ? ? ? ? }
? ? ? ? ? });
? }
// file download simulator... a really simple
public int doSomeTasks() {
while (fileSize = 1000000) {
fileSize++;
if (fileSize == 100000) {
return 10;
} else if (fileSize == 200000) {
return 20;
} else if (fileSize == 300000) {
return 30;
}
// ...add your own
}
return 100;
}
將以上的代碼直接輸入到progressbar上即可。
下面是一個(gè)actionbar的使用截圖,來(lái)源于android學(xué)習(xí)手冊(cè),360手機(jī)助手中可下載,里面有108個(gè)例子,源碼還有文檔
Action bar是一個(gè)標(biāo)識(shí)應(yīng)用程序和用戶位置的窗口功能,并且給用戶提供操作和導(dǎo)航模式。在大多數(shù)的情況下,當(dāng)你需要突出展現(xiàn)用戶行為或全局導(dǎo)航的activity中使用action bar,因?yàn)閍ction bar能夠使應(yīng)用程序給用戶提供一致的界面,并且系統(tǒng)能夠很好根據(jù)不同的屏幕配置來(lái)適應(yīng)操作欄的外觀。你能夠用ActionBar的對(duì)象的API來(lái)控制操作欄的行為和可見(jiàn)性,這些API被添加在Android3.0(API 級(jí)別 11)中。
Action bar的主要目的是:
? 1.??提供一個(gè)用于識(shí)別應(yīng)用程序的標(biāo)示和用戶的位置的專用空間。
? ?這個(gè)空間的左邊是應(yīng)用的圖標(biāo)或logo,以及Activity的標(biāo)題。但是,如果是像當(dāng)前選擇的標(biāo)簽這樣的標(biāo)識(shí)當(dāng)前View對(duì)象的導(dǎo)航標(biāo)簽,你可以選擇刪除Activity的標(biāo)題。
? 2.??在不同的應(yīng)用程序之間提供一致的導(dǎo)航和視覺(jué)體驗(yàn)。
? Action bar提供了用于Fragment間切換的內(nèi)置導(dǎo)航標(biāo)簽。它還提供了一個(gè)用于替換導(dǎo)航模式或優(yōu)化當(dāng)前視覺(jué)效果(如按照不同條件排序的列表)的下拉列表。
? 3.??突出Activity的關(guān)鍵操作(如“搜索”、“創(chuàng)建”、“共享”等),并且在可預(yù)見(jiàn)的方法內(nèi)給用戶提供快捷的訪問(wèn)。
?對(duì)于關(guān)鍵的用戶操作,你能夠通過(guò)把選項(xiàng)菜單項(xiàng)作為操作項(xiàng)直接放到操作欄中,從而提供快捷的訪問(wèn)。操作項(xiàng)目還能提供一個(gè)操作窗口,這個(gè)窗口給更直接的操作行為提供一個(gè)嵌入的窗口部件。沒(méi)有改進(jìn)成操作項(xiàng)的菜單項(xiàng)在溢出菜單中還是有效的,用戶既可以使用設(shè)備上的菜單按鈕(設(shè)備上有按鈕的時(shí)候),也可以使用操作欄中的溢出菜單按鈕(當(dāng)設(shè)備上不包含菜單按鈕時(shí))來(lái)顯示這些操作項(xiàng)目。
?上面的總結(jié)一下:Action bar就是替換3.0以前的tittle bar和menu。
? ? ? ?
? 圖1. Honeycomb Gallery應(yīng)用中的操作欄,從左邊開(kāi)始,依次是logo、導(dǎo)航選項(xiàng)標(biāo)簽和操作項(xiàng)(在右邊插入的一個(gè)懸浮菜單按鈕)。
? ?Note:?If you're looking for information about the contextual action bar for displaying contextual action items, see the?Menu?guide.
? Action Bar Design ??For design guidelines, read Android Design's?Action Bar?guide.
添加Action Bar
?從Android3.0(API級(jí)別 11)開(kāi)始,Action bar被包含在所有的使用Theme.Hole主題的Activity(或者是這些Activity的子類(lèi))中,當(dāng)targetSdkVersion或minSdkVersion屬性被設(shè)置為“11”或更大的數(shù)值是,這個(gè)主題是默認(rèn)的主題一。如:
[html] view plain copy print?
manifest?...?
uses-sdk?android:minSdkVersion="4"
android:targetSdkVersion="11"?/
...
/manifest
manifest ...
uses-sdk android:minSdkVersion="4"
? ? ? ? ?android:targetSdkVersion="11" /
...
/manifest
?在這個(gè)例子中,應(yīng)用程序要求最小的API版本級(jí)別是4(Android 1.6),但是它還要求了目標(biāo)API版本級(jí)別是11(Android 3.0)。這樣,當(dāng)應(yīng)用程序運(yùn)行在Android3.0或更高的版本上時(shí),系統(tǒng)就會(huì)給每個(gè)Activity應(yīng)用holographic ?主題,這樣,每個(gè)Activity就會(huì)包含Action bar。
? 如果你想使用ActionBar API來(lái)進(jìn)行添加導(dǎo)航模式和修改操作欄樣式的操作,你應(yīng)該把minSdkVersion屬性設(shè)置為“11”或更大的值。有一些方法可以使你的應(yīng)用支持更舊的Android版本,同時(shí)在API等級(jí)為11或更高的API等級(jí)的機(jī)器的使你的應(yīng)用支持一些Action bar apis。為了保持后向兼容,請(qǐng)參考邊框內(nèi)的內(nèi)容(邊框內(nèi)容如下)。
Remaining backward-compatible
If you want to provide an action bar in your application?and?remain compatible with versions of Android older than 3.0, you need to create the action bar in your activity's layout (because theActionBar?class is not available on older versions).
To help you, the?Action Bar Compatibility?sample app provides an API layer and action bar layout that allows your app to use some of theActionBar?APIs and also support older versions of Android by replacing the traditional title bar with a custom action bar layout.
刪除Action bar
如果你不想要Action bar,把Activity的主題設(shè)置為T(mén)heme.Holo.NoActionBar就可以了,如:
[html] view plain copy print?
activity?android:theme="@android:style/Theme.Holo.NoActionBar"
activity android:theme="@android:style/Theme.Holo.NoActionBar"
? ?或者使用Action bar的 hide()方法,如下:
[java] view plain copy print?
ActionBar?actionBar?=?getActionBar();
actionBar.hide();
ActionBar actionBar = getActionBar();
actionBar.hide();
?當(dāng)Action bar隱藏時(shí),系統(tǒng)會(huì)調(diào)整你的Activity來(lái)填充當(dāng)前有效的屏幕空間。你能夠使用show()方法來(lái)再次顯示操作欄。
在隱藏和刪除Action bar時(shí),要當(dāng)心為了適應(yīng)被Action bar占用的空間而導(dǎo)致的Activity的重新布局。如果你的Activity有規(guī)律的隱藏和顯示Action bar,你可能想要使用覆蓋模式。覆蓋模式在Activity的頂部描畫(huà)操作欄,而不是在它們所擁有的屏幕的區(qū)域。這樣,在Action bar隱藏和重新顯示時(shí),你的布局保持不變。要使用覆蓋模式,就要給Activity創(chuàng)建一個(gè)主題,并且把a(bǔ)ndroid:windowActionBarOverlay屬性設(shè)置為true。
?提示:如果你有一個(gè)刪除了Action bar的定制化的Activity主題,它把a(bǔ)ndroid:windowActionBar樣式屬性設(shè)置為false。但是,如果你使用了刪除Action bar的一個(gè)主題,那么,創(chuàng)建窗口將不允許Action bar再顯示,因此,你不能在以后給這個(gè)Activity添加Action bar---因?yàn)間etActionBar()方法將返回null。
添加操作項(xiàng)
?有些時(shí)候,你可能想要讓用戶直接訪問(wèn)選項(xiàng)菜單中的一個(gè)項(xiàng)目,因此你要把應(yīng)該在Action bar中顯示的菜單項(xiàng)作為一個(gè)操作項(xiàng)來(lái)聲明。操作項(xiàng)能夠能夠包含一個(gè)圖標(biāo)或文本標(biāo)題。如果一個(gè)菜單項(xiàng)不作為一個(gè)操作項(xiàng)顯示,那么系統(tǒng)就會(huì)把它放到懸浮菜單中。懸浮菜單既可以通過(guò)設(shè)備的Menu按鈕來(lái)顯示,也可以在Action bar中一個(gè)額外的按鈕來(lái)顯示。
?當(dāng)Activity首次啟動(dòng)時(shí),系統(tǒng)會(huì)調(diào)用onCreateOptionsMenu()方法給你的Activity組裝Action bar和懸浮菜單。在這個(gè)回調(diào)方法中應(yīng)該加載在XML文件中定義的菜單項(xiàng)資源,如:
[java] view plain copy print?
@Override
public?boolean?onCreateOptionsMenu(Menu?menu)?{
MenuInflater?inflater?=?getMenuInflater();
inflater.inflate(R.menu.main_activity,?menu);
return?true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity, menu);
return true;
}
? ? ?
? ?圖2. 帶有圖標(biāo)和文本標(biāo)題的兩個(gè)操作項(xiàng),和懸浮菜單按鈕。
?在XML文件中,你能夠通過(guò)給item元素聲明android:showAsAction=”ifRoom”屬性,請(qǐng)求把一個(gè)菜單項(xiàng)作為一個(gè)操作項(xiàng)來(lái)顯示。用這種方式,只在有有效的空間時(shí),菜單項(xiàng)才能顯示在Action bar中。如果沒(méi)有足夠的空間,這個(gè)菜單項(xiàng)會(huì)顯示在懸浮菜單中。
? 如果你的菜單項(xiàng)支持標(biāo)題和圖標(biāo)---帶有android:title和android:icon屬性---那么默認(rèn)情況下,操作項(xiàng)僅顯示圖標(biāo)。如果你要顯示文本標(biāo)題,就要給android:showAsAction屬性添加withText設(shè)置,如: