android browser 书签 路径,Android Browser学习七 书签历史模块: 书签UI的实现(2)
由于書簽模塊還是比較復雜的, 為了不讓博客變得太長, 故拆分為兩篇.
上一篇介紹了書簽大致的實現, 本篇主要介紹
1.書簽模塊BreadCrumb的實現,
2.書簽模塊與Activity之間的通訊,
3.?修改添加書簽的實現
開始吧:
1.書簽模塊BreadCrumb的實現,
這個東西其實就是在書簽UI和書簽添加窗口展示的那個類似windows窗口管理器的導航按鈕
點擊可以動態的調整書簽的層級, 效果還是蠻不錯的,在很多文件管理器中也有用到.
可以認為是一個自定義view (應該是一個viewgroup)了:
類圖差不多是這樣:可以看到有兩個地方使用到了這個東西, 也就是上面截圖的 書簽UI和添加書簽UI,
使用這個東西需要注冊一個通知, 這樣在用戶點擊BreadCrumbView的時候會回調到他們進行調整目錄.
BreadCrumbView 是一個LinearLayout, 所以他里面有一個List 集合, Crumb里面有個view 我們看到的一連串的按鈕實際上是CrumbView添加的每一個Crumb.
在BookMarkExpandableView中通過getGroupView調用到getBreadCrumbView添加每一個crumb按鈕
在AddBookMarkPage 則是在View的布局中有這個View:
mCrumbs = (BreadCrumbView) findViewById(R.id.crumbs);
BreadCrumbView的添加標簽按鈕和分割線的操作:
private void pushCrumb(Crumb crumb) {
if (mCrumbs.size() > 0) {
addSeparator();//左邊添加一個分割線
}
mCrumbs.add(crumb);
addView(crumb.crumbView);
updateVisible();
crumb.crumbView.setOnClickListener(this);
}
private void addSeparator() {
View sep = makeDividerView();
sep.setLayoutParams(makeDividerLayoutParams());
addView(sep);
}
private ImageView makeDividerView() {
ImageView result = new ImageView(mContext);
result.setImageDrawable(mSeparatorDrawable);
result.setScaleType(ImageView.ScaleType.FIT_XY);
return result;
}
其他的就是數據庫操作了, 暫時不去研究.
2.書簽模塊與ComboViewActivity之間的通訊,
在使用Fragment的時候我們經常會需要fragment和activity的相互通訊, activity通知fragment比較簡單, 因為fragment是activity的組成部分, 那么我們通過書簽模塊, 谷歌是怎么實現Fragment通知到Activity的:
其實就是
mCallbacks = new CombinedBookmarksCallbackWrapper(
(CombinedBookmarksCallbacks) getActivity());
真的不知道為什么要這么設計, 個人認為Activity繼承一個接口, 直接cast getActivity就可以了.不清楚這個CombinedBookmarksCallbackWrapper有什么用?
3.?修改添加書簽的實現
AddBookMarkPage其實有兩個功能 添加書簽和編輯書簽,看部分onCreate的代碼就知道了:
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mMap = getIntent().getExtras();
setContentView(R.layout.browser_add_bookmark);
Window window = getWindow();
String title = null;
String url = null;
mFakeTitle = (TextView) findViewById(R.id.fake_title);
if (mMap != null) {
Bundle b = mMap.getBundle(EXTRA_EDIT_BOOKMARK);
if (b != null) {
mEditingFolder = mMap.getBoolean(EXTRA_IS_FOLDER, false);
mMap = b;
mEditingExisting = true;
mFakeTitle.setText(R.string.edit_bookmark);
if (mEditingFolder) {
findViewById(R.id.row_address).setVisibility(View.GONE);
} else {
showRemoveButton();
}
} else {
int gravity = mMap.getInt("gravity", -1);
if (gravity != -1) {
WindowManager.LayoutParams l = window.getAttributes();
l.gravity = gravity;
window.setAttributes(l);//不知道什么意思 這樣是設置decorview的grivity
}
}
title = mMap.getString(BrowserContract.Bookmarks.TITLE);
url = mOriginalUrl = mMap.getString(BrowserContract.Bookmarks.URL);
mTouchIconUrl = mMap.getString(TOUCH_ICON_URL);
mCurrentFolder = mMap.getLong(BrowserContract.Bookmarks.PARENT, DEFAULT_FOLDER_ID);
}
其實選擇文件夾的窗口也在這個Activity中, 打開關閉窗口是讓他們 gone 和visiable:
private void switchToFolderSelector() {
// Set the list to the top in case it is scrolled.
mListView.setSelection(0);
mDefaultView.setVisibility(View.GONE);
mFolderSelector.setVisibility(View.VISIBLE);
mCrumbHolder.setVisibility(View.VISIBLE);
mFakeTitleHolder.setVisibility(View.GONE);
mAddNewFolder.setVisibility(View.VISIBLE);
mAddSeparator.setVisibility(View.VISIBLE);
getInputMethodManager().hideSoftInputFromWindow(
mListView.getWindowToken(), 0);
}
值得注意一下empty的用法:
mListView = (CustomListView) findViewById(R.id.list);
View empty = findViewById(R.id.empty);
mListView.setEmptyView(empty);
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone"
>
android:id="@+id/list"
android:layout_marginLeft="16dip"
android:layout_marginRight="16dip"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
android:id="@+id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_marginLeft="16dip"
android:layout_marginTop="16dip"
android:text="@string/no_subfolders"
android:textStyle="italic"
android:textAppearance="?android:attr/textAppearanceMedium" />
而點擊操作最終是通過BreadCrumbView來通知Activity進行獲取下一級目錄:
總結
以上是生活随笔為你收集整理的android browser 书签 路径,Android Browser学习七 书签历史模块: 书签UI的实现(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html怎么整体放大,html页面放大时
- 下一篇: 华为鸿蒙升级了,鸿蒙系统暂缓升级,但从火