前言
那些年使用过的布局,遇到的坑以及如何解决
前两篇:
NestedScrollView、RecycleView、ViewPager 等布局方面的常见问题汇总,及解决
有关布局问题:TextView、EditText……(二)
在前两篇中已经记录了一些常用布局可能出现的问题,以及解决方式,这里会继续记录此类问题,以便以后查有出处。
问题一:
使用RecycleView更新完数据(调用完notifyDataSetChanged();)然后滑动到最后的一个条目(调用mRecycleView.smoothScrollToPosition(mRVAdapter.getItemCount() - 1);)出现RecycleView不显示的问题
解决方法:
出现这种情况的原因是,首先RecycleView为空,然后获取数据后进行更新,更新完立马调用滑动方法,导致整个RecycleView不显示。猜测:可能是RecycleView设置完数据还没有刷新完成,还没有绘制到屏幕上,就进行了滑动操作,结果导致不显示,延时滑动可以解决这个问题。
// 延时滑动
mRecycleView.postDelayed(new Runnable() {
@Override
public void run() {
if (mRVAdapter.getItemCount() > 2) {
mRecycleView.smoothScrollToPosition(mAdapter.getItemCount() - 1);
}
}
}, 300);
但是如果仅仅判断item的条数大于2再滑动,也可以解决。
使用滑动到底部的方式是使用的mAdapter.getItemCount() - 1,获取最后一条的position,然后滑动,这个地方会出现一个bug,就是没有数据的情况下,获取到的数据为0,而0-1 = -1,就是抛出异常,因此在使用时尽量判断一下。
RatingBar问题
RatingBar是系统高度定制的,因此很难进行扩展和修改,这里讲解几个关于RatingBar的问题
问题二:
替换系统图片
我们需要写一个自己的style来覆盖掉系统自带的style
在styles文件里添加自己的style
<style name="mRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/rating_star</item>
<item name="android:minHeight">16dp</item>
<item name="android:minWidth">16dp</item>
</style>
这里的@drawable/rating_star是关键,在drawable文件夹下创建rating_star.xml文件,完整的实现如下
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@android:id/background"
android:drawable="@mipmap/your_empty_image">
</item>
<item android:id="@android:id/secondaryProgress"
android:drawable="@mipmap/your_half_image">
</item>
<item
android:id="@android:id/progress"
android:drawable="@mipmap/your_filing_image">
</item>
</layer-list>
然后在自己的RatingBar的布局下添加:
style="@style/mRatingBar"
这样就可以替换系统图片了。
问题三:
RatingBar出现拉长的小脚或者截断的情况
解决方法:
在style中添加:
<item name="android:minHeight">16dp</item>
<item name="android:minWidth">16dp</item>
其宽和高的最小值要根据自己图片的大小进行设置,避免太大,或者太小。
同时在RatingBar的布局文件中设置:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
问题四:
星星间距问题
解决方法:
间距问题这个要麻烦UI了,切图片的时候就将间距加上,不然间距就是系统的默认间距,或者产品不介意。
问题五:
在开发中有一个需求,就是在listView的header View中添加一个横向滑动的RecycleView,这个功能在部分手机上出现问题。
问题描述:在第一次进入当前页面时,横向滑动没有反应,竖向滑动没有影响,当向上滑动一部分后,横向滑动就可以了,但是如果滑动到顶部,横向滑动又变的没有反应。另外如果滑动的距离超过了横向的RecycleView时或者进入其他页面重新返回此页面时,横向滑动就可以了,不会再出现横向滑动没反应的问题。
问题机型:小米6、小米mix2、华为v10(目前就发现此三款机型)
解决:
在RecycleView所在父布局中添加如下:
android:descendantFocusability="blocksDescendants"
具体解析请看 NestedScrollView、RecycleView、ViewPager 等布局方面的常见问题汇总,及解决 中的问题
网友评论