关于RecyclerView的问题
- 如果recyclerView没有数据的话: RecyclerView.setLayoutManager 不设置这个 就是不行的 就是没有数据的
RecyclerView.getChildAt(position)问题:
问题:程序中,屏幕可以获取到 6 个子 view,当 getChildAt(position)的position 为 6 或 7 的时候,会有空指针异常
原因:getChildAt()只能获取到屏幕上显示的部分
解决:View childView = recyclerView.getLayoutManager().findViewByPosition(position);
NestedScrollView嵌套 RecyclerView,页面载入时总是滑到最底部
原因:由于 NestedScrollView 嵌套 RecyclerView,RecyclerView 占据焦点会导致 NestedScrollView 内容上滑
解决:
方法一:
在根布局设置android:descendantFocusability="blocksDescendants"
其中android:descendantFocusability有三种值:
beforeDescendants:viewGroup 会优先其子类控件而获取到焦点afterDescendants:viewGroup 只有当其子类控件不需要获取焦点时才获取焦点blocksDescendants:viewGroup会覆盖子类控件而直接获得焦点
这种方法会造成页面中 EditText 焦点被抢导致无法输入,需要用第二种方法。
方法二:
android:focusable="true"
android:focusableInTouchMode="true"
方法三:
在NestedScrollView顶部第一个控件使用:
android:focusable="true"
android:focusableInTouchMode="true"
这种方法不太可靠,因为有时可行,有时不可行。
关于spinner的问题
- 自定义的适配器问题:spinner在xml中需要记住设备background为null 才可以显示出下拉标志
- 如果打算修改文字离下拉标志的距离可以通过设置在适配器中的padding来设置。因为这里的设置会直接影响默认位置的距离
关于Dialog
- 关于Dialog上使用加载框progressdialog不显示问题
- 关于Dialog改变message无效的问题
//关于加载框或者是dialogfragment,中途改变message消息无效的问题:
//参考如下写法,验证有效:
mConnectResultTv.setText(mess);
mConnectResultTv.invalidate();
mConnectResultTv.postDelayed(new Runnable() {
@Override
public void run() {
dismiss();
}
},1000);
点9图片导致其上图片显示未全屏问题
问题描述:
在app启动之后出现了启动页,在启动页上方会覆盖一张广告图。而广告图显示异常:只显示在左上角(屏幕2190x1900而广告图大小431x91)
处理过程:
-
断点得知是这个广告图所在的ImageView的大小 getWidth()和getMeasureWidth()都是431,尝试在此ImageView前面动态设置大小:用了重新设置setLayoutParam,无效
-
比对上一版的apk是正常,尝试从svn上找动到的文件➡️找到了是启动页由原来的png改成点9图。
原因:点9图的左侧上侧有拉伸,而右侧下侧是限制显示区域却没有设置,只设置了左侧和上侧。
解决:右侧、下侧都弄上“黑边”
sending message to a Handler on dead thread
toast报这个异常。解决:在主线程创建个Handler,toast写里面,需要吐司的地方去发送消息给这个handler
setVisibility无效问题
现象:view.setVisibility(View.INVISIBLE);无效
原因一:对这个view设置了动画,且给此动画加了属性 anim.setFillAfter(true);
解决:
- 方案一:
anim.setFillAfter(false);
view.setVisibility(View.INVISIBLE);
- 方案二:
view.clearAnimation();
view.setVisibility(View.INVISIBLE);
- 方案三:
view.postdelay延迟100毫秒
- 方案四:
使用runOnUiThread的方式来实现
如果上述方案都不可行,检查Mainifest.xml,去除android:hardwareAccelerated="false"
对于其他原因,在setVisibility隐藏之后加个刷新。view.invalidate()或view.postinvalidate()。前面俩无效再试试自身requestLayout()或父容器的requestLayout()来强制页面刷新。
ImageView滑动屏幕后显示异常
现象:LinearLayout内有一排iv,iv的scaleType为centerCrop,LinearLayout为RecyclerView内一个item,滑动Rc后iv显示内容变大了
排查过程:用Layout Inspector查看变形的iv的drawing--isOpaque()为false。第一个iv未变形,其isOpaque()为true
解决:尝试修改iv的android:setScaleType="fitXY",问题解决了
解决后再次用Layout Inspector查看,所有iv的drawing--isOpaque()为true