Android编程实现的简易路径导航条功能示例
本文实例讲述了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程序设计有所帮助。
上一篇: Android6.0 storage目录sd卡存储的路径创建详解
下一篇: java加密解密示例分享
推荐阅读
-
Android编程基于自定义View实现绚丽的圆形进度条功能示例
-
Android编程实现支持拖动改变位置的图片中叠加文字功能示例
-
Android编程实现自定义输入法功能示例【输入密码时防止第三方窃取】
-
Android编程实现简易弹幕效果示例【附demo源码下载】
-
Android编程实现调用系统分享功能示例
-
Java编程实现游戏中的简单碰撞检测功能示例
-
Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】
-
Android编程实现canvas绘制饼状统计图功能示例【自动适应条目数量与大小】
-
Android编程使用android-support-design实现MD风格对话框功能示例
-
Android编程实现的简易路径导航条功能示例