Android 端04 小程序自定义导航栏| 学习笔记

简介: 快速学习 Android 端04 小程序自定义导航栏。

开发者学堂课程【mPaaS 小程序开发实战 - 教你如何独立运行小程序 :Android 端04 小程序自定义导航栏】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/741/detail/13130


Android 端04 小程序自定义导航栏

 

小程序自定义导航栏 

1、前置条件

如果您需要开通小程序自定义标题栏,需在 custom_config.json 中加入:

1.{

2. “value":"NO",

3. “"key" : "mp_ta_use_orginal_mini_nagivationbar

4. }

意思就是,小程序是否使用原生的导航栏,回答是  NO,使用自定义的导航栏。 把这些代码复制到工程里,默认可以使用小程序了。

2、操作步骤

mPaaS 小程序与 mPaaS H5 容器公用一个导航栏,因此,关于自定义标题栏的步骤,您可以参考以下链接:

. 10.1.68版本

.10.1.60及以下版本

打开10.1.68版本页面:

接入步骤

1.继承 AbsTitleView 抽象类并实现自定义导航栏。

2.实现 H5ViewProvider . 在 createTitleView 方法中创建并返回自定义导航栏实例。

1.public class H5ViewProviderlmpl implements H5ViewProvider{

2.@Override

3.public H5TitleView createTitleView(Context context) {

4.return new NewH5TitleViewlmpl(context);

5.}

6.

7.@Override

8.public H5NavMenuView createNavMenu(){

9.return null;

10.}

11.

12.@Override

13.public H5PullHeaderView createPullHeaderView (Context context, ViewGroup viewGroup){

14.return null;

15.}

16.

17.@Override

18.publicH5WebContentView

createWebContentView(Context context){

19.return null;

20.}

21.}

3.在合适的地方,比如应用启动时,设置 H5ViewProvider 至容器。

1.MPNebula.setCustomViewProvider(newH5ViewProviderlmpl( ));

4.如果工程是基于Portal&Bundle架构,需额外设置。

1.H5Utils.setProvider(H5ReplaceResourceProvider.class.getName(),new H5ReplaceResourceProvider(){

2.@Override

3.public String getReplaceResourcesBundleName(){

4.return BuildConfig.BUNDLE_NAME;

5.}

6.});

第四步不用看,因为我们一般都是基于 AR 方式的,拷贝一下 Demo 工程的 AbsTitleView 实现,Demo 工程可以参考 mpaas-demo / android-tinyapp。TinyNavigationBar 继承 AbsTitleView,把他拷贝过来,需要一些 layout,另外,除了拷贝 AbsTitleView,小程序还需要有更多的拓展,小程序右上角有一个胶囊区,即 Option button 和 Close button。

右侧控制区

右侧控制区,也可称为 OptionMenu  控制区,主要用于提供更多操作给用户。

H5 容器:

image.png

小程序:

image.png

由上图可见,开发者需要为 OptionMenu 控制区预留两个视图区域。容器操作时会按照索引来操作这两块区域。

小程序右上角控制区

当处于小程序场景时,最右侧区域需要特殊实现,步骤如下:

1.继承 AbsTinyOptionMenuView 抽象类实现自定义控制区。

2.在合适的地方,比如应用启动时,设置 TinyOptionMenuViewProvider 至容器。

1.H5Utils.setProvider(TinyOptionMenuViewProvider.class.getName(), new TinyOptionMenuViewProvider(){

2. @Override

3. public AbsTinyOptionMenuView createView(Context context){

4.return new TinyOptionMenuView(context);

5.}

6.});

需要设置一个 Provider,Provider 最终设置为容器。

按照容器规范要求。开发者必须实现和配置更多和关闭按钮视图。

1.  public abstract void setOptionMenuOnClickListener (View.OnClickListener listener);

2.

3. public abstract void setCloseButtononClickListener (View.OnClickListener listener);

4.Public abstract void setCloseButtonOnLong ClickListener(View.OnLongClickListener listener);

6.

7. public abstract void onStateChanged (TinyAppActionState currentState);

8.

9. public abstract View getView();

会有一些回调函数,比如要设置 OptionMenu 的 Click 事件,CloseButtonon 是右上角胶囊里关闭小程序事件以及长按事件,当小程序状态发生改变之后,右上角反馈的改变以及最终的返回 view。

比如当小程序定位时,右上角可能就会出现定位的图标。

image.png

把代码拷贝到 TinyOptionMenuView 中,这两个都需要一些 layout,h5_new_title_layout.xml  自定义的 title

layout_tiny right.xml 右边的胶囊区

把他拷贝过来,里面需要一些图片,比如胶囊区域需要 more 和 close 的按钮,layout 里需要一个 back 和 home 的按钮。把资源都拷贝过来,现在已经没有工程报错了。把实线实现了,设置要在整体框架初始化完成之后设置一次就可以了,把他设置给容器,这里可以参考 Demo 工程里面的 CustomTitleActivity,首先要自定义标题栏,第二是要设置右上角的胶囊区的 Provider,设置一个 Provider,返回实现的 TinyOption。

private void initcustomTitle(){

//自定义标题栏

MPNebula.setcustomViewProvider(new HSViewProvider(){

@Override

public HSTitleview createTitleView(Context context){

//返回自定义 title

return new TinyNavigationBar(context);

}

@Override

public H5NavMenuView createNavenu(){ return null; }

@Override

public H5PullHeaderView createPullHeaderView(Context context,ViewGroup viewGroup){

return null;

}

@Override

public H5WebContentView createwebContentView(Context context) { return null;}

});

//自定义小程序右上角配置栏

H5Utils.setProvider(TinyOptionMenuViewProvider.class.getName(),new TinyOptionMenuViewProvider(){

@Override

public AbsTinyOptionMenuView createView(Context context) {

return new TinyOptionMenuView(context);

)

});

}

}

只需要初始化一次就可以,直接在 IntCallback 的 PostInt 函数中初始化,一切都准备就绪,可以开始运行程序了。

打开小程序,可以看到现在的 title 已经是我们自定义过的,随便点击一个视图,上面的按钮就是arrow.back中自定义的按钮,Icon 就是他的标题也是自行设置的,胶囊区域也是自行绘制的,分别是更多和关闭的意思。

对应的事件可以自定义进行设置,这就是小程序整个 title 的设置,当然更多接口的返回值可以参考自定义导航栏这个文档,返回标题栏要实现 getTitle,设置主标题文本需要 setTitle,可以借助提供的接口函数做对应的实现。

相关文章
|
7月前
|
Android开发 UED 计算机视觉
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
本文介绍了一款受游戏“金铲铲之战”启发的Android自定义View——线条等待动画的实现过程。通过将布局分为10份,利用`onSizeChanged`测量最小长度,并借助画笔绘制动态线条,实现渐变伸缩效果。动画逻辑通过四个变量控制线条的增长与回退,最终形成流畅的等待动画。代码中详细展示了画笔初始化、线条绘制及动画更新的核心步骤,并提供完整源码供参考。此动画适用于加载场景,提升用户体验。
548 5
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
|
7月前
|
Android开发
Android自定义view之利用PathEffect实现动态效果
本文介绍如何在Android自定义View中利用`PathEffect`实现动态效果。通过改变偏移量,结合`PathEffect`的子类(如`CornerPathEffect`、`DashPathEffect`、`PathDashPathEffect`等)实现路径绘制的动态变化。文章详细解析了各子类的功能与参数,并通过案例代码展示了如何使用`ComposePathEffect`组合效果,以及通过修改偏移量实现动画。最终效果为一个菱形图案沿路径运动,源码附于文末供参考。
137 0
|
7月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
366 65
Android自定义view之网易云推荐歌单界面
|
7月前
|
XML 前端开发 Android开发
一篇文章带你走近Android自定义view
这是一篇关于Android自定义View的全面教程,涵盖从基础到进阶的知识点。文章首先讲解了自定义View的必要性及简单实现(如通过三个构造函数解决焦点问题),接着深入探讨Canvas绘图、自定义属性设置、动画实现等内容。还提供了具体案例,如跑马灯、折线图、太极图等。此外,文章详细解析了View绘制流程(measure、layout、draw)和事件分发机制。最后延伸至SurfaceView、GLSurfaceView、SVG动画等高级主题,并附带GitHub案例供实践。适合希望深入理解Android自定义View的开发者学习参考。
699 84
|
7月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
219 3
|
7月前
|
Android开发 开发者
Android自定义view之围棋动画(化繁为简)
本文介绍了Android自定义View的动画实现,通过两个案例拓展动态效果。第一个案例基于`drawArc`方法实现单次动画,借助布尔值控制动画流程。第二个案例以围棋动画为例,从简单的小球直线运动到双向变速运动,最终实现循环动画效果。代码结构清晰,逻辑简明,展示了如何化繁为简实现复杂动画,帮助读者拓展动态效果设计思路。文末提供完整源码,适合初学者和进阶开发者学习参考。
144 0
Android自定义view之围棋动画(化繁为简)
|
7月前
|
Java Android开发 开发者
Android自定义view之围棋动画
本文详细介绍了在Android中自定义View实现围棋动画的过程。从测量宽高、绘制棋盘背景,到创建固定棋子及动态棋子,最后通过属性动画实现棋子的移动效果。文章还讲解了如何通过自定义属性调整棋子和棋盘的颜色及动画时长,并优化视觉效果,如添加渐变色让白子更明显。最终效果既可作为围棋动画展示,也可用作加载等待动画。代码完整,适合进阶开发者学习参考。
162 0
|
11月前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
512 0
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
275 0
在线课堂+工具组件小程序uniapp移动端源码
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
2636 3