本文实例讲述了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程序设计有所帮助。
# Android
# 路径
# 导航条
# 功能
# Android实现固定屏幕显示的方法
# Android侧滑导航栏的实例代码
# Android编程使用自定义View实现水波进度效果示例
# Android编程实现点击链接打开APP功能示例
# Android编程使用android-support-design实现MD风格对话框功能示例
# Android编程实现ActionBar的home图标动画切换效果
# Android 屏幕切换监听的实例代码
# Android SQLite数据库中的表详解
# Android实现第三方登录的上拉展开
# 下拉隐藏
# 下拉隐藏示例
# 详解Android应用开发--MP3音乐播放器代码实现(一)
# Android6.0 固定屏幕功能实现方法及实例
# 回调
# 操作技巧
# 的是
# 进阶
# 相关内容
# 将会
# 感兴趣
# 也很
# 给大家
# 很简单
# 自定义
# 管理器
# 更多关于
# 类似于
# 所述
# 程序设计
# 如图所示
# 分隔符
# 讲述了
相关文章:
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
常州自助建站费用包含哪些项目?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
怎么将XML数据可视化 D3.js加载XML
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何快速重置建站主机并恢复默认配置?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何在建站宝盒中设置产品搜索功能?
建站之星备案是否影响网站上线时间?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
代刷网站制作软件,别人代刷火车票靠谱吗?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
nginx修改上传文件大小限制的方法
怀化网站制作公司,怀化新生儿上户网上办理流程?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
如何快速配置高效服务器建站软件?
如何快速搭建支持数据库操作的智能建站平台?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
javascript中的try catch异常捕获机制用法分析
定制建站是什么?如何实现个性化需求?
视频网站制作教程,怎么样制作优酷网的小视频?
如何选择网络建站服务器?高效建站必看指南
定制建站价位费用解析与套餐推荐全攻略
如何选择域名并搭建高效网站?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何通过VPS建站无需域名直接访问?
建站主机是否等同于虚拟主机?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
韩国服务器如何优化跨境访问实现高效连接?
教学论文网站制作软件有哪些,写论文用什么软件
?
寿县云建站:智能SEO优化与多行业模板快速上线指南
手机网站制作与建设方案,手机网站如何建设?
Python lxml的etree和ElementTree有什么区别
如何用美橙互联一键搭建多站合一网站?
建站之星收费标准详解:套餐费用及年费价格表一览
PHP正则匹配日期和时间(时间戳转换)的实例代码
网站制作难吗安全吗,做一个网站需要多久时间?
网站制作壁纸教程视频,电脑壁纸网站?
,石家庄四十八中学官网?
如何通过虚拟主机空间快速建站?
如何高效利用亚马逊云主机搭建企业网站?
建站之星安装提示数据库无法连接如何解决?
平台云上自助建站如何快速打造专业网站?
如何做网站制作流程,*游戏网站怎么搭建?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
太原网站制作公司有哪些,网约车营运证查询官网?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何批量查询域名的建站时间记录?
*请认真填写需求信息,我们会在24小时内与您取得联系。