有關(guān)布局的問(wèn)題(三)

前言

那些年使用過(guò)的布局,遇到的坑以及如何解決
前兩篇:
NestedScrollView、RecycleView、ViewPager 等布局方面的常見問(wèn)題匯總,及解決
有關(guān)布局問(wèn)題:TextView、EditText……(二)
在前兩篇中已經(jīng)記錄了一些常用布局可能出現(xiàn)的問(wèn)題,以及解決方式,這里會(huì)繼續(xù)記錄此類問(wèn)題,以便以后查有出處。

問(wèn)題一:

使用RecycleView更新完數(shù)據(jù)(調(diào)用完notifyDataSetChanged();)然后滑動(dòng)到最后的一個(gè)條目(調(diào)用mRecycleView.smoothScrollToPosition(mRVAdapter.getItemCount() - 1);)出現(xiàn)RecycleView不顯示的問(wèn)題

解決方法:

出現(xiàn)這種情況的原因是,首先RecycleView為空,然后獲取數(shù)據(jù)后進(jìn)行更新,更新完立馬調(diào)用滑動(dòng)方法,導(dǎo)致整個(gè)RecycleView不顯示。猜測(cè):可能是RecycleView設(shè)置完數(shù)據(jù)還沒(méi)有刷新完成,還沒(méi)有繪制到屏幕上,就進(jìn)行了滑動(dòng)操作,結(jié)果導(dǎo)致不顯示,延時(shí)滑動(dòng)可以解決這個(gè)問(wèn)題。

// 延時(shí)滑動(dòng)
mRecycleView.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (mRVAdapter.getItemCount() > 2) {
                    mRecycleView.smoothScrollToPosition(mAdapter.getItemCount() - 1);
                }
            }
        }, 300);

但是如果僅僅判斷item的條數(shù)大于2再滑動(dòng),也可以解決。
使用滑動(dòng)到底部的方式是使用的mAdapter.getItemCount() - 1,獲取最后一條的position,然后滑動(dòng),這個(gè)地方會(huì)出現(xiàn)一個(gè)bug,就是沒(méi)有數(shù)據(jù)的情況下,獲取到的數(shù)據(jù)為0,而0-1 = -1,就是拋出異常,因此在使用時(shí)盡量判斷一下。

RatingBar問(wèn)題

RatingBar是系統(tǒng)高度定制的,因此很難進(jìn)行擴(kuò)展和修改,這里講解幾個(gè)關(guān)于RatingBar的問(wèn)題

問(wèn)題二:

替換系統(tǒng)圖片

我們需要寫一個(gè)自己的style來(lái)覆蓋掉系統(tǒng)自帶的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是關(guān)鍵,在drawable文件夾下創(chuàng)建rating_star.xml文件,完整的實(shí)現(xiàn)如下

<?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"

這樣就可以替換系統(tǒng)圖片了。

問(wèn)題三:

RatingBar出現(xiàn)拉長(zhǎng)的小腳或者截?cái)嗟那闆r

解決方法:

在style中添加:

<item name="android:minHeight">16dp</item>
<item name="android:minWidth">16dp</item>

其寬和高的最小值要根據(jù)自己圖片的大小進(jìn)行設(shè)置,避免太大,或者太小。
同時(shí)在RatingBar的布局文件中設(shè)置:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
問(wèn)題四:

星星間距問(wèn)題

解決方法:

間距問(wèn)題這個(gè)要麻煩UI了,切圖片的時(shí)候就將間距加上,不然間距就是系統(tǒng)的默認(rèn)間距,或者產(chǎn)品不介意。

問(wèn)題五:

在開發(fā)中有一個(gè)需求,就是在listView的header View中添加一個(gè)橫向滑動(dòng)的RecycleView,這個(gè)功能在部分手機(jī)上出現(xiàn)問(wèn)題。

問(wèn)題描述:在第一次進(jìn)入當(dāng)前頁(yè)面時(shí),橫向滑動(dòng)沒(méi)有反應(yīng),豎向滑動(dòng)沒(méi)有影響,當(dāng)向上滑動(dòng)一部分后,橫向滑動(dòng)就可以了,但是如果滑動(dòng)到頂部,橫向滑動(dòng)又變的沒(méi)有反應(yīng)。另外如果滑動(dòng)的距離超過(guò)了橫向的RecycleView時(shí)或者進(jìn)入其他頁(yè)面重新返回此頁(yè)面時(shí),橫向滑動(dòng)就可以了,不會(huì)再出現(xiàn)橫向滑動(dòng)沒(méi)反應(yīng)的問(wèn)題。

問(wèn)題機(jī)型:小米6、小米mix2、華為v10(目前就發(fā)現(xiàn)此三款機(jī)型)

解決:

在RecycleView所在父布局中添加如下:

  android:descendantFocusability="blocksDescendants"

具體解析請(qǐng)看 NestedScrollView、RecycleView、ViewPager 等布局方面的常見問(wèn)題匯總,及解決 中的問(wèn)題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評(píng)論 25 709
  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,093評(píng)論 1 92
  • 她想裝的強(qiáng)勢(shì)些,讓人看不出她的軟弱,但一見到這個(gè)王朝最尊貴的人就破功,會(huì)掩飾不住內(nèi)心的畏懼,那是生與死的打心底的恐...
    周禪閱讀 1,270評(píng)論 0 0
  • 同人 · 米英 撞色 壹·當(dāng)鋼琴家遇上油畫家 “亞瑟,今天一起去吃飯吶~Hero我又發(fā)現(xiàn)了一家好吃的……”話未完就...
    栗子糖月餅閱讀 1,208評(píng)論 0 0
  • 承接上文vue2.0一起在懵逼的海洋里越陷越深(二)前面寫了vue-router組件的初步用法,原來(lái)這次想寫vue...
    leenty閱讀 1,625評(píng)論 4 9

友情鏈接更多精彩內(nèi)容