自从开学以来,有一段时间没有更新博客了,所以这两天打算把一些东西重拾一下然后做一下总结。
PopupWindow
这是一个一旦使用就会喜欢上的一个控件,使用官方的话先来介绍一下这个东西,他是一个弹出窗口“该类可以用于显示任意视图的弹出窗口。弹出窗口是一个浮动容器,显示在当前活动顶部”,但是这个控件相对于dialog的好处是可以自定义其中的内容,没有标题,不是给其他布局添加蒙层效果,而且它默认不会响应返回键,最重要的是可以自定义他的位置,而且十分的灵活。
先给出:官方文档
首先需要创建
1 | //参数列表有多种,可以传入自定义的contentView,设置宽高,是否可点击等 |
设置显示的方法
1 | //显示窗口(相对于参照物控件,下方自定义位置,xy分贝表两轴的偏移量) |
常用的公用方法
1 | .dismiss()//关闭弹窗 |
这两天发现一个比较好用的开源控件,设置起来更是十分方便。
结合RecyclerView的使用
由于项目需要在一个Recyclerview列表中实现一个类似qq聊天长按删除的一个效果,并且有一些总结。1
2
3
4
5//声明接口,接口方式耦合度低
/**item上控件点击监听*/
public interface ItemEditTextClickListener{
void onWordListEdtClick(int position);
}
适配器中
1 | //声明接口 |
Activity中
1 | private CustomPopWindow mCustomPopWindow;//本次使用的开源框架 |
最后是popupWindow的布局可以自定义设计。
1 | <?xml version="1.0" encoding="utf-8"?> |
此外还有一线需要总结一下,那就是在外部如何获根据position取到Recyclerview中item的子控件。思路大概就是,首先根据position获取对应的childview。之后通过对应的childView根据id获取到子控件。1
2
3//获取到EditText
View layout=(View)recyclerView.getChildAt(position);
final AutoCompleteTextView autoCompleteTextView=layout.findViewById(R.id.word_clue_edit_view);
尽量不要给EditText添加点击事件,因为EditText首先会获取到焦点,之后再点击才会触发点击事件。也就是在没有获取到焦点的时候双击才会触发点击事件。一些点击之间的冲突还有待在深入研究一下。还有在设计用户交互的时候尽量不要做一些超越一般用户认知的交互。点击事件尽量使用按钮的形式,不要使用一些其他乱七八糟的东西,比如文本,图片之类的。
还有进一步的用户体验,比如在输入完文本自用隐藏软键盘,当需要编辑的时候使用代码为用户自动弹出软键盘。1
2
3
4
5
6//强制关闭键盘
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
//强制显示
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(activity.getWindow().getDecorView(),InputMethodManager.SHOW_FORCED);
开学是比较忙,一些东西落下了,所以之后会继续坚持做总结。