Android : XML을 사용하여 전환 버튼에 대해 두 개의 다른 이미지 지정


100

기본 ToggleButton모양 을 재정의하려고합니다 . 다음은 다음을 정의하는 XML입니다 ToggleButton.

<ToggleButton android:id="@+id/FollowAndCenterButton"
        android:layout_width="30px"
        android:layout_height="30px"
        android:textOn="" android:textOff="" android:layout_alignParentLeft="true"
        android:layout_marginLeft="5px"
        android:layout_marginTop="5px" android:background="@drawable/locate_me"/>

이제 클릭 / 비 클릭 상태에 사용할 두 개의 30 x 30 아이콘이 있습니다. 현재 상태에 따라 배경 아이콘을 프로그래밍 방식으로 변경하는 코드가 있습니다.

centeredOnLocation.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (centeredOnLocation.isChecked()) {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me_on));
            } else {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me));
            }
        }
});

분명히 나는 ​​이것을 할 더 나은 방법을 찾고 있습니다. 상태간에 자동으로 전환되는 배경 이미지에 대한 선택기를 만들려고했습니다.

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:drawable="@drawable/locate_me" /> <!-- default -->
 <item android:state_checked="true"
       android:drawable="@drawable/locate_me_on" /> <!-- pressed -->
 <item android:state_checked="false"
       android:drawable="@drawable/locate_me" /> <!-- unchecked -->

그러나 이것은 작동하지 않습니다. ToggleButtonAPI ( http://developer.android.com/reference/android/widget/ToggleButton.html )를 읽으면 상속 된 xml 속성은 다음과 같습니다.

    XML Attributes
Attribute Name  Related Method  Description
android:disabledAlpha       The alpha to apply to the indicator when disabled. 
android:textOff         The text for the button when it is not checked. 
android:textOn      The text for the button when it is checked. 

클래스에 메소드 isChecked()및 .NET Framework가 있음에도 불구하고 android : state_checked 속성이없는 것 같습니다 setChecked().

그렇다면 XML에서 원하는 작업을 수행 할 수있는 방법이 있습니까? 아니면 지저분한 해결 방법에 갇혀 있습니까?


텍스트를 사용하지 않는 경우을 사용하는 것이 더 나을 수 있습니다 CompoundButton.
Timmmm

1
무시하십시오. CompoundButton추상적입니다!
Timmmm

답변:


159

귀하의 코드는 괜찮습니다. 그러나 토글 버튼은 일치하는 선택기의 첫 번째 항목을 표시하므로 기본값이 마지막에 와야합니다. 모두 활용 될 수 있도록 다음과 같은 방식으로 항목을 정렬합니다.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_pressed="true" /> //currently pressed turning the toggle on
    <item android:state_pressed="true" /> //currently pressed turning the toggle off
    <item android:state_checked="true" /> //not pressed default checked state
    <item /> //default non-pressed non-checked
</selector>

3
그것은 완벽하게 이해됩니다. selector와 switch 문을 연결 한 적이 없습니다.
I82Much 2010 년

당신은 내 하루를 만들었습니다. 버튼, 체크 박스에 문제가 있었고 라디오 버튼도 시도했습니다. 마침내이 게시물이 도움이되었습니다. 감사합니다 Vitaly Polonetsky와 I82Much
David Prun 2010-08-18

8
어딘가의 문서에는 조건이 모두 충족되는 첫 번째 상태에서 중지하여 맨 위에서 읽습니다. 따라서 기본값이 맨 위에 있으면 해당 드로어 블을 지나치지 않을 것입니다.
Travis

1
@ I82Much switch항상이 동작합니다 더 긴 같은 순서에 관계없이의 "올바른 일"을 선택 것 if-elseif-elseif-else같은 조건을 state_x == true && state_y == false && state_z = true.
TWiStErRob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.