1. 程式人生 > 實用技巧 >Android使用selector切換enable狀態遇到的問題:只改變了顏色但是沒改變形狀

Android使用selector切換enable狀態遇到的問題:只改變了顏色但是沒改變形狀

如標題所示,昨天在使用selector的時候遇到了點問題
設計給出的輪播效果圖是這樣的

我這邊用的selector,實現的效果是這樣的

下面是程式碼

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true">
        <shape android:shape="oval">
            <solid android:color="#ffffff" />
            <size android:width="6dp" android:height="6dp" />
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape android:shape="oval">
            <solid android:color="#57ffffff" />
            <size android:width="6dp" android:height="6dp" />
        </shape>
    </item>
</selector>

嗯,,,我覺得我應該把shape換成rectangle,加上圓角,換個長度,就像這樣。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
            <size android:width="18dp" android:height="6dp" />
            <corners android:radius="3dp"/>
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape android:shape="rectangle">
            <solid android:color="#57ffffff" />
            <size android:width="6dp" android:height="6dp" />
            <corners android:radius="3dp"/>
        </shape>
    </item>
</selector>

然而編譯之後看到現實出來的效果卻不如與其那般,雖然輪播的時候顏色變了,但是形狀並沒有變化
啊這。。。。。
好吧找找解決辦法,看看網上有沒有帶哥們遇到這個問題並把解決方法分享出來
好的,找到了!

https://stackoverflow.com/questions/38179431/android-selector-changes-color-but-not-size

根據描述,我應該在設定指示點的enable之後對指示點呼叫一次requestLayout()方法

 tvPosition.setText((realPosition + 1 - videoSize) + "/" + imageSize);
        pointGroup.getChildAt(realPosition).setEnabled(true);
        pointGroup.getChildAt(realPosition).requestLayout();
        if (pointGroup.getChildAt(lastPointIndex) != null) {
            pointGroup.getChildAt(lastPointIndex).setEnabled(false);
            pointGroup.getChildAt(lastPointIndex).requestLayout();
        }

OK,編譯一下,成了!