Android編程實現(xiàn)的簡易路徑導航條功能示例
本文實例講述了Android編程實現(xiàn)的簡易路徑導航條功能。分享給大家供大家參考,具體如下:
這里要實現(xiàn)的是如圖所示的路徑導航條, 類似于文件管理器的效果。
該導航條包含三個功能:
1. 支持追加任意個子路徑(文字一行寫不下時可左右滑動);
2. 支持返回到上一個路徑;
3. 支持點擊中間的某個路徑回到指定位置。
代碼很簡單,已封裝成自定義View, 如下:
PathTextView.Java
/** * 顯示路徑的View,支持返回上一級,支持點擊某個位置回到指定層級。 */ public class PathTextView extends LinearLayout { private TextView mTextView; private HorizontalScrollView hsView; private OnItemClickListener mListener; //保存每一個路徑的id和名稱 private LinkedList<PathItem> pathItemList; //可點擊部門文本顏色 private static final int TEXT_COLOR = Color.parseColor("#48a0c7"); //分隔符 private static final String DIV_STR = " - "; public PathTextView(Context context) { super(context); } public PathTextView(Context context, AttributeSet attrs) { super(context, attrs); View root = LayoutInflater.from(context).inflate(R.layout.simple_tv, this, true); hsView = (HorizontalScrollView) root.findViewById(R.id.path_hs); mTextView = (TextView) root.findViewById(R.id.path_tv); mTextView.setMovementMethod(LinkMovementMethod.getInstance()); mTextView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return true; } }); pathItemList = new LinkedList<>(); } /** * 初始化根路徑名稱。 */ public void initRoot(String text) { mTextView.append(createSpannableString(-1, text)); pathItemList.addLast(new PathItem(-1, text)); } /** * 繼續(xù)拼接一個路徑。 */ public void append(long id, String text) { mTextView.append(DIV_STR); mTextView.append(createSpannableString(id, text)); pathItemList.addLast(new PathItem(id, text)); //HorizontalScrollView滑動到最右邊 hsView.postDelayed(new Runnable() { @Override public void run() { hsView.fullScroll(HorizontalScrollView.FOCUS_RIGHT); } }, 100); } /** * 返回父級路徑,一般用戶點擊“返回”時調(diào)用。 */ public void backParent() { int lastItemLength = pathItemList.removeLast().text.length(); CharSequence oldCs = mTextView.getText(); mTextView.setText(oldCs.subSequence(0, oldCs.length() - lastItemLength - DIV_STR.length())); } private SpannableString createSpannableString(long id, String text) { SpannableString spStr = new SpannableString(text); ClickableSpan clickSpan = new MyClickableSpan(id); spStr.setSpan(clickSpan, 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spStr.setSpan(new ForegroundColorSpan(TEXT_COLOR), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); return spStr; } private class MyClickableSpan extends ClickableSpan { private long id; MyClickableSpan(long id) { super(); this.id = id; } @Override public void onClick(View widget) { //更新當前路徑 int backCount = 0; while (pathItemList.getLast().id != id) { backParent(); backCount++; } //回調(diào) if (mListener != null && backCount > 0) { mListener.onClick(id, backCount); } } } private class PathItem { private long id; private String text; private PathItem(long id, String text) { this.id = id; this.text = text; } } public interface OnItemClickListener { /** * @param currentId 返回后目錄的id. * @param backCount 返回層級的數(shù)量. */ void onClick(long currentId, int backCount); } /** * 設置點擊某個中間路徑時的回調(diào)。 */ public void setOnItemClickListener(OnItemClickListener listener) { this.mListener = listener; } }
布局文件,其實就是一個TextView:
simple_tv.xml
<?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/path_hs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/light_gray2" android:scrollbars="none"> <TextView android:id="@+id/path_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/light_gray2" android:paddingBottom="12dp" android:paddingLeft="8dp" android:paddingRight="8dp" android:paddingTop="12dp" android:textSize="15sp" /> </HorizontalScrollView>
使用方法也很簡單:
1. 初始化時,調(diào)用 initRoot(String text) 方法,傳入根路徑名稱;
2. 點擊列表項進入下一級時,調(diào)用 append(long id, String text) 方法,傳遞當前項的id(用于唯一性區(qū)分)和名稱;
3. 返回上一級時,調(diào)用 backParent() 方法;
4. 點擊某個中間路徑時, OnItemClickListener.onClick(long currentId, int backCount) 方法將會被回調(diào),并返回點擊項的id和返回的層級數(shù)量。
更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android開發(fā)入門與進階教程》、《Android編程之a(chǎn)ctivity操作技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
- Android實現(xiàn)固定屏幕顯示的方法
- Android側(cè)滑導航欄的實例代碼
- Android編程使用自定義View實現(xiàn)水波進度效果示例
- Android編程實現(xiàn)點擊鏈接打開APP功能示例
- Android編程使用android-support-design實現(xiàn)MD風格對話框功能示例
- Android編程實現(xiàn)ActionBar的home圖標動畫切換效果
- Android 屏幕切換監(jiān)聽的實例代碼
- Android SQLite數(shù)據(jù)庫中的表詳解
- Android實現(xiàn)第三方登錄的上拉展開,下拉隱藏,下拉隱藏示例
- 詳解Android應用開發(fā)--MP3音樂播放器代碼實現(xiàn)(一)
- Android6.0 固定屏幕功能實現(xiàn)方法及實例
相關文章
Android App中的多個LinearLayout嵌套布局實例解析
這篇文章主要介紹了Android App中的多個LinearLayout嵌套布局實例,利用線性布局來排列按鈕是安卓應用布局中的常用做法,需要的朋友可以參考下2016-04-04Android通過HTTP協(xié)議實現(xiàn)斷點續(xù)傳下載實例
本篇文章主要介紹了Android通過HTTP協(xié)議實現(xiàn)斷點續(xù)傳下載實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04基于Android 監(jiān)聽ContentProvider 中數(shù)據(jù)變化的相關介紹
本篇文章小編為大家介紹,基于Android 監(jiān)聽ContentProvider 中數(shù)據(jù)變化的相關介紹。需要的朋友參考下2013-04-04Android實現(xiàn)底部狀態(tài)欄切換的兩種方式
這篇文章主要介紹了Android實現(xiàn)底部狀態(tài)欄切換功能,在文中給大家提到了兩種實現(xiàn)方式,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06