有关布局的问题(三)

2017-12-13  本文已影响15人  zgfei

前言

那些年使用过的布局,遇到的坑以及如何解决
前两篇:
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 等布局方面的常见问题汇总,及解决 中的问题

上一篇 下一篇

猜你喜欢

热点阅读