Android浏覽器Browser二次開發(三)浏覽器全屏顯示
文章分類:移動開發 第三章--浏覽器全屏顯示
業務需求:浏覽器設定中支援全屏顯示的功能。
分析:隻需要在設定界面上增加是否全屏的checkBox, 然後BrowserActivity中讀取這個值, 來設定視窗的Style.
修改: 1. 修改項目下的res/xml檔案夾下的browser_preferences.xml檔案, 添加<CheckBoxPreference
android:key="full_screen"
android:defaultValue="false"
android:title="@string/pref_full_screen"
android:summary="@string/pref_full_screen_summary" />
2. BrowserActivity中建立SetScreen()方法
public void setScreen(){
//set to full screen if necessary
SharedPreferences sp = getSharedPreferences(this.getPackageName()+"_preferences",
Context.MODE_WORLD_READABLE);
boolean isFullScreen = sp.getBoolean(BrowserSettings.PREF_FULL_SCREEN, false);
//if search dialog is open, we should quit full screen.
if(isFullScreen && !isSearchDialogOpen){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}else{
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
如果我們第一次進入浏覽器是非全屏, 然後進入設定修改成全屏模式, 這時候傳回到BrowserActivity, 全屏模式必須馬上切換過來。 是以我們在OnResume()裡面調用setScreen(), 不要在onCreate()裡面調.
3. 大家可能注意到了, 判斷全屏切換時有個isSearchDialogOpen變量, 這是用來控制在搜尋框出現時的全屏切換的。 因為點選進位址欄時會調用系統的搜尋框控件, 而這個控件不屬于浏覽器, 是個單獨的視窗, 并且一開始建立時是有标題欄的。這時候如果設定成無标題欄的風格時, 就會出現标題欄先出現, 然後又隐藏上去, 并且有2-3次反複的情況,使用者體驗非常糟糕。 這裡就做了個折中, 當搜尋框出現時, 切換成非全屏模式, 這樣标題欄就一直在那裡,不會來回閃了。 退出搜尋時,如果設定的是全屏,再切換成全屏模式。 是以在搜尋框出現和消失時的代碼部分, 還要做相應修改。 見如下代碼:
public void startSearch(String initialQuery, boolean selectInitialQuery,
Bundle appSearchData, boolean globalSearch) {
if (appSearchData == null) {
appSearchData = createGoogleSearchSourceBundle(GOOGLE_SEARCH_SOURCE_TYPE);
}
SearchEngine searchEngine = mSettings.getSearchEngine();
if (searchEngine != null && !searchEngine.supportsVoiceSearch()) {
//appSearchData.putBoolean(SearchManager.DISABLE_VOICE_SEARCH, true);
}
//show status bar when search window pops up. isSearchDialogOpen = true;
//show status bar when search window pops up. getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
}
搜尋框消失部分:
//switch to full screen if necessary when search window disappears.
public void onDismiss() {
isSearchDialogOpen = false;
setScreen();
}
(PS: BrowserActivity必須繼承OnDismissListener接口才有onDismiss方法。) 這篇文章轉自: http://seya.iteye.com/blog/966463