恭喜自己的 android注解上2022/11/07的推荐
浏览器ctrl+f 搜索 艾特猫 就可以看到我的被推荐笔记
https://bbs.csdn.net/topics/609019461?utm_medium=notify.im.blog_rank_weekly.a&username=u014071104
话说n年前,jquery大行其道的时候,下面这样的代码写得莫名其妙的酸爽。没搞懂为什么可以这样连着调用,但是就是爽。
$(“.classname”).eq(0).attr().css().html();
然后vue来了,react也来了,,在给前端提供更多操作空间后,同时也增加了很多难度。开始怀念以前函数式调用(不是怀念操作dom,键盘大佬勿喷)。
例如的弹窗可以直接调用个函数就可以实现,同时可以通过不同的参数来定制不同的效果。
- $.model({
-
- Title:”提示”,
-
- cancelText:”取消”
-
- })
在vue的时候自己为了这样使用自己也封装过这样的函数,也写过这样的笔记
这篇是为了提醒vue可以用函数式调用组件的
vue插件函数式调用【找回使用jq的回忆】_艾特猫的博客-CSDN博客
这篇笔记是记录如何使用vue2封装一个函数式调用组件的《像jquery那样快活使用vue》
像jquery那样快活使用vue_艾特猫的博客-CSDN博客_vue像jquery一样调用
Vue2实现还是相对的不方便,到vue3的时候直接提供了组件teleport来支持渲染内容到特定的标签,可见函数式组件还是非常广泛的使用场景
当然,原则上所有程序都可以,只要调用后返回当前对象,后面就可以继续调用该对象的方法。
- AlertDialog.Builder builder = new AlertDialog.Builder(this); //先得到构造器
-
- builder.setTitle("提示")
-
- .setMessage("是否确认退出") //设置内容
-
- .setIcon(R.mipmap.ic_launcher) //自定义图标
-
- .setCancelable(false) //设置是否能点击,对话框的其他区域取消
-
- .setPositiveButton("确认", new DialogInterface.OnClickListener() { //设置其确认按钮和监听事件
-
- @Override
-
- public void onClick(DialogInterface dialog, int which) {
-
- // which,是哪一个按钮被触发
-
- // 其值如下:
-
- // Dialog.BUTTON_NEGATIVE 忽略
-
- // Dialog.BUTTON_POSITIVE 确认
-
- // Dialog.BUTTON_NEUTRAL 取消
-
- dialog.dismiss();
-
- }
-
- })
-
- .setNegativeButton("取消", new DialogInterface.OnClickListener() { //设置其取消按钮和监听事件
-
- @Override
-
- public void onClick(DialogInterface dialog, int which) {
-
- dialog.dismiss();
-
- }
-
- })
-
- setNegativeButton("忽略", new DialogInterface.OnClickListener() { //设置其忽略按钮和监听事件
-
- @Override
-
- public void onClick(DialogInterface dialog, int which) {
-
- dialog.dismiss();
-
- }
-
- });
-
-
-
- builder.create(); //创建对话框
-
- builder.show(); //显示对话框
-
-
-
- }
代码AlertDialog.Builder builder = new AlertDialog.Builder(this); 为什么返回的是AlertDialog.Builder而不是AlertDialog?
这和这个组件的代码设计有关系
AlertDialog类内部存在个类Builder,它提供AlertDialog自定义的所有操作方法,包括自定义属性、自定义点击回调、以及创建和显示
AlertDialog类内部还存在个类AlertParams来存放这些自定义参数,例如builder.setTitle("提示”)就是修改AlertParams的标题属性
直到调用 builder.create()才开始填充到视图, builder.show()让整个节点显示出来
那AlertDialog做什么呢?
提供构造函数,给new AlertDialog.Builder(this)的时候调用,它本身的功能并不多,更多的意义可能是提供一个封闭局部环境
setMessage和setMessage都可以连着调用,为什么create和show没有?
因为他们返回的是AlertDialog,而不是申明builder时候的AlertDialog.Builder 所以不能链式调用,否则就有类型错误
我们也可以按照这种方式去构造代码,下面是一个自定义的标题导航条(由于是私有库,所以非本人查看,不公开)
支持以下两种初始化的方式
new DefaultNavigationBar.Builder(this)
new DefaultNavigationBar.Builder(this,R.id.wrapid)
如果不传递第二个参数,默认把布局塞到acitivty 布局的第一个字节点的位置,涉及的api有
根据传参的context获取activity存放布局的标签节点
- Activity activity=(Activity) context;
-
- this.mParent=activity.findViewById(android.R.id.content);
在特定标签节点插入标题导航条
- navigationView= LayoutInflater.from(mParams.mContext).inflate(bindLayoutId(),mParams.mParent,false);
-
- //2.添加,到第0个位置
-
- mParams.mParent.addView(navigationView,0);
布局文件注意
- <TextView
-
- android:layout_width="wrap_content"
-
- android:layout_height="wrap_content"
-
- android:maxLines="1"
-
- android:id="@+id/title"
-
- android:layout_gravity="center"
-
- android:visibility="gone"
-
- />
预留多个visiblility属性为gone的标签,根据传递的参数进行切换可视和绑定点击事件
- DefaultNavigationBar defaultNavigationBar=new DefaultNavigationBar.Builder(this)
- .setTitle("标题")
- .setRightTitle("右边")
- .setRightOnclickLister(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Toast.makeText(context,"点击右侧文字",Toast.LENGTH_LONG).show();
- }
- })
- .builder();
如果封装的组件较为复杂,可以抽离公共方法和构造函数到特定的抽象类,让不同的实现类实现它
受限于个人水平,以上内容不保证完全正确,请自行辩证。。有错误地方请评论区指正,谢谢。