天天看點

Android浏覽器Browser二次開發(三)浏覽器全屏顯示

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