NewbieGuide初使用体验
因项目突然需要改变引导的方式,改为遮罩的方式,同事在别的项目中有用到该库[NewbieGuide](huburt-Hu/NewbieGuide: Android 快速实现新手引导层的库,通过简洁链式调用,一行代码实现引导层的显示 (github.com))去实现引导的功能,我这边也就先拿来用一下.
先说下大概的需求点吧
1.指定控件位置需要高亮显示,引导的位置要求不大
2.点击引导图中的按钮可以跳过当前页面中的所有引导
3.点击其余位置(包括高亮处),调到下一个引导页,直到所有引页项都显示完毕,最后关闭引导层(遮罩)
一开始觉得应该没啥问题,应该可以很快就搞定,然而事实上并没有,如果简单使用除外,github上有说明
先说说碰到的问题:
我是一个页面就放一个引导层,一个引导层有多个引导页,所有引导页用的是同一个布局。动态改变提示内容
setOnLayoutInflatedListener(new OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(View view, Controller controller) {
//引导页布局填充后回调,用于初始化
TextView tv = view.findViewById(R.id.textView2);
tv.setText("我是动态设置的文本");
}
})
github上给的用法是这样的,然而这里有个前提,你必须先调用setLayoutRes(R.layout.XXXX)该方法, 然而我用的是addHighLight方法传入了RelativeGuide参数去实现的,这时候上述监听就不生效了
在GuidePage中:
private void addCustomToLayout(GuidePage guidePage) {
//....省略
//layoutResId就是通过setLayoutRes方法设置的,所以必须得先调用setLayoutRes方法,OnLayoutInflatedListener监听才会生效
if (layoutResId != 0){
//.....省略
OnLayoutInflatedListener inflatedListener = guidePage.getOnLayoutInflatedListener();
if (inflatedListener != null) {
inflatedListener.onLayoutInflated(view, controller);
}
//.....省略
}
//...省略
}
另外还有个addHighLightWithOptions的方法,此方法支持传入HighlightOptions参数,该参数可以设置点击事件,自定义图形,但是RelativeGuide参数又没法放进去.
最后,我是通过setOnPageChangedListener监听来实现的
//kotlin:
setOnPageChangedListener { index->
//根据不同引导页设置不同提示语句
_mActivity.findViewById<TextView>(R.id.tvGuideMsg).text = msgList[index]
//设置各引导页的跳过操作
_mActivity.findViewById<View>(R.id.rbPassAll).setOnClickListener {
controller?.remove()
}
//高亮处的点击事件的处理
guidepages[index].highLights.first().options?.onClickListener = View.OnClickListener {
val next = index+1
if (next==guidepages.size){
controller?.remove()
}else {
controller?.showPage(next)
}
}
}
controller我是在setOnGuideChangedListener监听中获取的, guidepages是我页面中所有引导页的集合
//kotlin:
NewbieGuide.with(this).setLabel("companyInfo")
.alwaysShow(true)
//切换方式引导
.addGuidePages(//此方法是自己添加的扩展函数
guidepages//引导页的集合
)
好了,费了点时间,也算是可以先用着了,因为需要设置引导页的地方比较多,还要再封一层,就这样吧,等有时间再看看有啥好用的没

浙公网安备 33010602011771号