国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程實現的簡易路徑導航條功能示例

2019-12-12 03:58:21
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程實現的簡易路徑導航條功能。分享給大家供大家參考,具體如下:

這里要實現的是如圖所示的路徑導航條, 類似于文件管理器的效果。

該導航條包含三個功能:

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));  }  /**   * 繼續拼接一個路徑。   */  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);  }  /**   * 返回父級路徑,一般用戶點擊“返回”時調用。   */  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++;      }      //回調      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 返回層級的數量.     */    void onClick(long currentId, int backCount);  }  /**   * 設置點擊某個中間路徑時的回調。   */  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. 初始化時,調用 initRoot(String text) 方法,傳入根路徑名稱;
2. 點擊列表項進入下一級時,調用 append(long id, String text) 方法,傳遞當前項的id(用于唯一性區分)和名稱;
3. 返回上一級時,調用 backParent() 方法;
4. 點擊某個中間路徑時, OnItemClickListener.onClick(long currentId, int backCount) 方法將會被回調,并返回點擊項的id和返回的層級數量。

更多關于Android相關內容感興趣的讀者可查看本站專題:《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android開發入門與進階教程》、《Android編程之activity操作技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉善县| 佳木斯市| 临西县| 太原市| 义马市| 宜良县| 竹山县| 沙湾县| 伊春市| 会理县| 嘉黎县| 江永县| 绿春县| 获嘉县| 施甸县| 茂名市| 句容市| 合肥市| 封开县| 梅河口市| 高陵县| 奉化市| 洛扎县| 林周县| 新营市| 虎林市| 六安市| 莆田市| 喀喇| 枣强县| 建阳市| 峨边| 越西县| 呼伦贝尔市| 沧州市| 汉寿县| 多伦县| 文成县| 邢台县| 襄汾县| 平阴县|