[android] 다른 상태에 대한 이미지 버튼 배경 이미지를 설정하는 방법은 무엇입니까?

두 가지 상태 i) 일반 ii) 터치 (또는 클릭) 이미지 버튼을 원합니다.

imagebutton 배경 에 일반 이미지를 설정 했고 onclick 메서드 에서 이미지 (눌림)변경 하려고하는데 변경 되지 않습니다.

나는 이미지 버튼을 누르면 다른 버튼을 누를 때까지 이미지가 정상에서 눌림으로 변경되어야하지만 발생하지 않기를 바랍니다 .

누구든지 선택기 또는 런타임에 어떻게 이것을 할 수 있는지 제안 할 수 있습니까 ?

다음은 내 imagebuttonpanel 코드입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="horizontal"
  android:gravity="bottom"
  android:id="@+id/buttonpanel">
  <ImageButton android:id="@+id/buttonhome"
               android:layout_width="80dp"
               android:layout_height="36dp"
               android:focusable="true"
               android:background="@drawable/homeselector">
               </ImageButton>
  <ImageButton android:id="@+id/buttonsearch"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/searchselector"
               android:focusable="true">
               </ImageButton>>
  <ImageButton android:id="@+id/buttonreg"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/registerselector"
               android:focusable="true">
               </ImageButton>>
  <ImageButton android:id="@+id/buttonlogin"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/loginselector"
               android:focusable="true">
               </ImageButton>
</LinearLayout>

내 선택기 xml은

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--<item android:state_pressed="true" android:drawable="@drawable/homehover"
        /> <item android:state_focused="true" android:drawable="@drawable/homehover"
        /> <item android:drawable="@drawable/home" /> <item android:state_window_focused="true"
        android:drawable="@drawable/homehover" /> -->
    <item android:state_enabled="false" android:drawable="@drawable/homehover" />
    <item android:state_pressed="true" android:state_enabled="true"
        android:drawable="@drawable/homehover" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/homehover" />
    <item android:state_enabled="true" android:drawable="@drawable/home" />

</selector>

그리고 ontouch 및 onclick 이벤트에서 이미지 리소스를 변경하려고 시도했지만 도움이되지 않습니다.



답변

다음과 같이 드로어 블에 xml 파일을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:drawable="@drawable/btn_sendemail_disable" />
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/btn_send_email_click" />
    <item
        android:state_focused="true"
        android:state_enabled="true"
        android:drawable="@drawable/btn_sendemail_roll" />
    <item
        android:state_enabled="true"
        android:drawable="@drawable/btn_sendemail" />
</selector>

그에 따라 이미지를 설정 한 다음이 xml을 imageButton.


답변

이 시도

btn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        btn.setBackgroundResource(R.drawable.icon);
    }
});


답변

mhh. 도움이 된 또 다른 솔루션이 있습니다.

  • 항목을 클릭하지 않았거나
  • 또는 클릭하면 강조 표시됩니다.

내 .xml에서 다음과 같이 ImageButton을 정의합니다.

 <ImageButton
    android:id="@+id/imageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/selector" />

해당 선택기 파일은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/ico_100_checked" android:state_selected="true"/>
    <item android:drawable="@drawable/ico_100_unchecked"/>

</selector>

그리고 내 onCreate에서 다음을 호출합니다.

final ImageButton ib = (ImageButton) value.findViewById(R.id.imageButton);

    OnClickListener ocl =new OnClickListener() {
        @Override
        public void onClick(View button) {
            if (button.isSelected()){
                button.setSelected(false);
            } else {
                ib.setSelected(false);
                //put all the other buttons you might want to disable here...
                button.setSelected(true);
            }
        }
    };

ib.setOnClickListener(ocl);
//add ocl to all the other buttons

끝난. 도움이 되었기를 바랍니다. 알아내는 데 시간이 좀 걸렸습니다.


답변

안녕하세요, 다음 코드를 사용하면 유용합니다.

((ImageView)findViewById(R.id.ImageViewButton)).setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN)
            ((ImageView) v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_over);

        if(event.getAction() == MotionEvent.ACTION_UP)
            ((ImageView) v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_normal);

        return false;
    }
});


답변

문제는 선택기 파일이 아니라고 생각합니다.

당신은 추가해야

<imagebutton ..
    android:clickable="true"
/>

이미지 버튼에.

기본적으로 onClick은 목록 항목 수준에서 처리됩니다. (상위) . 그리고 imageButtons는 onClick을받지 않습니다.

위의 속성을 추가하면 이미지 버튼이 이벤트를 수신하고 선택기가 사용됩니다.

확인란에 대해 동일하게 설명하는 이 POST 를 확인하십시오 .


답변

눌린 이미지 버튼을 원하면 이미지가 정상에서 눌려 짐으로 변경되어야합니다.

그러나 가장 좋은 방법은 RadioButton을 사용자 정의하고 그룹에서 사용하는 것입니다. 나는 그 예를 보았다.
그 링크를 기억하지 못해서 죄송합니다.

하지만 그것을 피하고 싶다면. 이것을 selector.xml에 추가해야합니다.

일단 완료. 코드를 확인하고 이것을 추가하십시오.

public void onClick ( View v ) {
    myImageButton.setSelected ( true ) ;
 }

결과를 볼 수 있습니다. 하지만 최근에 어떤 버튼을 눌렀는지 상태를 관리해야합니다. 설정할 수 있도록

  myOLDImageButton.setSelected ( false ) ;

모든 버튼 참조를 배열에 넣는 것이 좋습니다.


답변

당신이하려는 것은 이미지 버튼 목록보다 더 세분화 된 버튼입니다.

여기 http://blog.bookworm.at/2010/10/segmented-controls-in-android.html 은 그렇게하는 방법에 대한 예입니다. 기본 아이디어는 RadioButton이 필요한 확인 상태를 가질 것이기 때문에 ImageButton 대신 RadioButton을 사용자 정의하는 것입니다.