私のアンドロイドアプリは、サーバーへの永続WebSocket接続を持っています。また、その接続をオフにする機能を提供するスイッチもあります。今はスイッチに2色あります。スイッチがオンの場合、WSが接続され、スイッチは緑色になります。スイッチがオフの場合、WSは切断され、スイッチは赤色になります。setTrackDrawable on android間違った画像が表示される
だから、唯一のユーザーはオン/オフスイッチの状態を変更することができます。しかし、スイッチがオンで、インターネットがダウンしたと仮定できます。私はその状態をユーザーに示したい。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="@android:color/white"/>
<stroke android:width="4dp" android:color="@android:color/transparent" />
<size
android:width="24dp"
android:height="24dp"/>
</shape>
switch_back:
my_layout.xml
<Switch
android:checked="true"
android:gravity="left"
android:text="Online"
android:thumb="@drawable/switch_thumb"
android:track="@drawable/switch_back"/>
黄色(なめらかが間違っていることを意味する)switch_thumb.xml - だから、第三の状態を追加しました。 xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/toggle_on" android:state_checked="true" android:state_pressed="true"/>
<item android:drawable="@drawable/toggle_on" android:state_checked="true" android:state_focused="false"/>
<item android:drawable="@drawable/toggle_off" android:state_checked="false" android:state_pressed="true"/>
<item android:drawable="@drawable/toggle_off" android:state_checked="false" android:state_focused="false"/>
</selector>
switch_back_broken.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/toggle_broken" android:state_checked="true" android:state_pressed="true"/>
<item android:drawable="@drawable/toggle_broken" android:state_checked="true" android:state_focused="false"/>
<item android:drawable="@drawable/toggle_off" android:state_checked="false" android:state_pressed="true"/>
<item android:drawable="@drawable/toggle_off" android:state_checked="false" android:state_focused="false"/>
</selector>
toogle_on.xml/ toggle_broken.xml toogle_off.xml/:異なる色の
楕円: ON であります緑、オフは赤色で、が壊れていますはオレンジです。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<corners android:radius="15dp"/>
<solid
android:color="@color/colorCheckGreen"/>
<size
android:width="40dp"
android:height="24dp"/>
</shape>
ここでの実装です:
private Switch onlineSwitch;
int currentSwitchBack = R.drawable.switch_back;
@Subscribe
public void wsStatusChange(WsStatusChange event) {
boolean isOnline = WsStatusChange.Status.OPENED.equals(event.getStatus());
int newBackId = isOnline ? R.drawable.switch_back : R.drawable.switch_back_broken;
if (currentSwitchBack != newBackId) {
currentSwitchBack = newBackId;
onlineSwitch.setTrackDrawable(getResources().getDrawable(newBackId));
}
}
だから、背後にある考え方は、WebSocketのがダウンしたときにswitch_back_broken.xml
に背景を変更することです。このバックグラウンドはオフラインモードでは同じ赤色ですが、唯一違うのは黄色のオンラインカラーです。したがって、両方の背景がすべての可能な状況をカバーします。問題に今
:
スイッチがon
であると私はUIが背景(そのスイッチに気づくがであるREDを表示します(黄色である)switch_back_broken.xml
に(緑)でswitch_back.xml
からTrackDrawable
を変更状態ON
)、これは決して起こるべきではありません。いずれの背景も、スイッチの状態がON
の赤色ではありません。しかし、スイッチをダブルクリックすると(レイアウトを再レイアウトするという意味)、色は正常に戻ります。
私は、この動作は、スイッチの基本状態から来て、それはデフォルトではオフだと思います。したがって、switch
コンポーネントは、当初状態がoff
であるはずの間違ったレイアウトで描画されます。誰もこの問題に直面していますか?
どのように来るべきですか?どんな種類の助けもありがとう!
お礼、