文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android编程实现的简易路径导航条功能示例

2023-05-31 14:04

关注

本文实例讲述了Android编程实现的简易路径导航条功能。分享给大家供大家参考,具体如下:

这里要实现的是如图所示的路径导航条, 类似于文件管理器的效果。

Android编程实现的简易路径导航条功能示例

该导航条包含三个功能:

支持追加任意个子路径(文字一行写不下时可左右滑动);
2. 支持返回到上一个路径;
3. 支持点击中间的某个路径回到指定位置。

代码很简单,已封装成自定义View, 如下:

PathTextView.Java

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 {        void onClick(long currentId, int backCount);  }    public void setOnItemClickListener(OnItemClickListener listener) {    this.mListener = listener;  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯