Android 开发学习进程0.14 Bindview recyclerview popwindow使用 window类属性使用
BindView ButterKnife
优势
绑定组件方便,使用简单
处理点击事件方便,如adapter中的viewholder
同时父组件绑定后子组件无需绑定
注意
在setcontentview之后使用,且子空间不可再使用static final属性
在不改变按钮图片大小的情况,扩大点击事件,
在较低Android版本此方法可能有问题,即src和setbackground的区别,同样可以设置背景图片,但src仅将图片资源加载,不做其他处理,而setbackground会使图片自适应与按钮大小,但也有具体属性设置,imagebutton相比常规button对图片设置更加详细,但对字处理较弱。
recycleview 使用方法
recyclerview设置滚动条自动将点击项滚动到中间方法
- 重写linerlayout类,如下代码:
public CenterLayoutManager(Context context) {
super(context);
}
public CenterLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public CenterLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
RecyclerView.SmoothScroller smoothScroller = new CenterSmoothScroller(recyclerView.getContext());
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
private static class CenterSmoothScroller extends LinearSmoothScroller {
CenterSmoothScroller(Context context) {
super(context);
}
@Override
public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {
return (boxStart + (boxEnd - boxStart) / 2) - (viewStart + (viewEnd - viewStart) / 2);
}
}
}
注意重写lanerlayoutmanager类的方法,与绘制组件较相似
- 在点击事件中设置centersmoothscroller的方法
- 同时在记得为recycler适配器设置上你的自定义布局
recycleview 相关属性
- overscrollmode:never 设置滑动到边缘无动画效果
- overscrollFooter 设置滑动底部颜色背景
- overscrollHeader 设置滑动头部颜色背景
- scrollbar="none" 设置是否显示滚动条
Popwindow配合recycler使用设置
popwindow一般不直接使用,配合recycler可以有更加多变的使用方法,popwindow与dialog传统对话框区别可以在任意位置显示,更加灵活,
与recycler结合
View view = LayoutInflater.from(getContext()).inflate(R.layout.pop_classifyfragment,null);
RecyclerView recyclerView =(RecyclerView) view.findViewById(R.id.pop_classifyfragment_list);
recyclerView.setLayoutManager(new GridLayoutManager(getContext(),4));
Classify_PopAdapter popAdapter =new Classify_PopAdapter(getContext(),mList);
recyclerView.setAdapter(popAdapter);
popAdapter.setClickListener(new AdapterClickListener() {
@Override
public void click(int flag, int position) {
}
});
mPopWindow = new PopupWindow(view,
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
mPopWindow.setContentView(view);
mPopWindow.showAtLocation(pop_btn, Gravity.NO_GRAVITY, 187, 72);
MWindowManager.init(getActivity()).lightoff();
mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
//在dismiss中恢复透明度
public void onDismiss() {
MWindowManager.init(getActivity()).lighton();
}
});
}
原理为计算每一项的中心线位置,与窗口的中心线位置相减,计算出偏移量。而中心线位置由 (尾-头)/2+头 计算得出。
一般为额外写一个类,不直接在activity中写,会造成冗余。
同时还需建立adapter类,便于设置数据,layoutparams还可设置popwindow的大小,展示时通过showatlocation后两个属性设置与原点偏移量,如第三个属性为gravity.no_gravity默认会在左上角显示原点,所以应根据实际情况设置参数
MWindow.init 方法
activity并不直接控制视图,控制视图的为window类,它有接口MWindow供使用,使用MWindow.init.lightoff() 方法和类似lighton()方法可以实现popwindwo打开关闭时主activity状态的明暗变化,此时注意界面层次为activity、popwindow的父布局如linerlayout、popwindow的子控件。
Android 开发学习进程0.14 Bindview recyclerview popwindow使用 window类属性使用的更多相关文章
- Android 开发学习进程0.16 layout_weight属性 R文件关联XML Module
layout_weight属性 layout_weight属性我们常常用到,但有时候会发现它还有一些奇怪的属性,比如大多数使用时会把宽度设置成0,但要是宽度不设置成0会有什么效果? layout_we ...
- Android 开发学习进程0.27 kotlin使用 和viewbinding的使用
kotlin-android-extensions 插件被废弃 笔者曾经尝试写过一部分的kotlin代码 主要是项目中一些代码是kotlin完成的,其中我认为 kotlin的kotlin-androi ...
- Android 开发学习进程0.19 webview 的使用
Android 中的webview android 中的webview是可以在app内部打开HTML等的网页,不必再打开浏览器,有两种实现方法,即webviewclient webChromeclie ...
- Android开发学习进程0.18 SharePreference的使用 AIDL
SharePreference SharePreference是一种持久化存储手段,使用场景很多,如第一次打开时加载的用户协议等.适合小数据单进程的应用.将数据以键值对的形式存储在XML中. 使用方式 ...
- Android 开发学习进程0.17 Android资源文件selector textview显示两种不同字体
selector 是安卓资源文件的一种,它可以使按钮等实现不同状态下的不同UI,不用在代码中实现,而使用方式有两种,一种在color文件下 创建.xml可以使按钮等字体在不同状态下的变化,其二是在dr ...
- Android 开发学习进程0.15 adb cardview framelayout 控件设置状态获取焦点
Android设备调试桥 即adb 使用adb进行无线调试的一些常用命令 adb tcpip 5555 设置调试端口为5555 防止冲突 adb shell ifconfig wlan0 查询局域网中 ...
- Android 开发学习进程0.28 腾讯TBS接入和相关问题
TBS 的接入和使用 TBS 的接入 腾讯TBS是X5内核的升级版,可以当作webview 来打开 网页,可以以用来打开docx doc pdf 等文件,这里主要使用的是文件功能. 依赖接入 api ...
- Android 开发学习进程0.32 dwonloadmanager使用
downloadmanager时Android系统下载器,使用系统下载器可以避免用stream流读入内存可能导致的内存溢出问题.以下为downloadmanager初始化部分.apkurl为下载网络路 ...
- Android 开发学习进程0.13 Androidstudio快捷键 xmlns
xmlns XML namespace xml命名空间 其中主要是定义xml文件定义位置 前缀有三种,android app tools 后面为唯一标识符URI android 表示为引用自安卓系统 ...
随机推荐
- LESS实战::not与:hover混合使用
举个例子,有个HTML是这样的. <div class="item light">A</div> <div class="item" ...
- 高效C++:构造/析构/赋值
了解C++默认提供和调用的函数 编译器会自动为每一个空类创建构造函数.拷贝构造函数.赋值运算符以及析构函数 不要使用编译器自动创建的函数,要杜绝这种情况发生,自己编写这些函数 如果不想使用编译器自动生 ...
- coding如何绑定二次验证码_虚拟MFA_两步验证_身份验证?
Coding.net 是一个面向开发者的云端开发平台,提供 Git/SVN 代码托管.任务管理.在线 WebIDE.Cloud Studio.开发协作.文件管理.Wiki 管理.提供个人服务及企业管理 ...
- redis pipelined 示例
redis 常用的数据类型 有序集合(sort set).无序集合 (set),hashMap redis pipelined 示例 List<Object> list = jedisTe ...
- Netty 学习笔记(2) ------ 数据传输载体ByteBuf
Netty中读写以ByteBuf为载体进行交互 ByteBuf的结构 ByteBuf以readerIndex和writerIndex划分为三块区域,废弃字节,可读字节,可写字节.每次从ByteBuf读 ...
- 洛谷p1120小木棍(剪枝优化)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- 深入剖析.NETCORE中CORS(跨站资源共享)
前言 由于现代互联网的飞速发展,我们在开发现代 Web 应用程序中,经常需要考虑多种类型的客户端访问服务的情况:而这种情况放在15年前几乎是不可想象的,在那个时代,我们更多的是考虑怎么把网页快速友好的 ...
- presto和hive日期函数对比
时间格式转换 日期格式→Unix时间戳 转10位Unix时间戳 数据:2020-07-23 15:01:13 Presto:select to_unixtime(cast('2020-07-23 15 ...
- 学习JavaScript数据结构与算法 2/15
第一章 JavaScript简介 js不同于C/C++,C#,JAVA,不是强类型语言. 通常,代码质量可以用全局变量和函数的数量来考量(数量越多越糟).因此,尽可能避免使用全局变量. JS数据类型 ...
- Python重命名和删除文件
Python重命名和删除文件: rename(当前的文件名,新文件名): 将当前的文件名修改为新文件名 程序: # os.rename('旧名字',’新名字‘) import os os.rename ...