2016-09-14 3 views
1

버튼 이미지를 변경했지만 버튼을 놓을 때 문제가 발생하면 이미지가 다시 변경됩니다 (이미지는 유지되지 않음). Java 프로그래밍에 익숙하지 않습니다.눌렀을 때 버튼의 이미지를 변경하면 버튼의 이미지가 해제되었을 때 변경되지 않습니다.

내 레이아웃 :

<Button 
    android:background="@drawable/volume" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true"/> 

그리고 이것은 당김 내 XML입니다 :

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
    android:drawable="@drawable/volume_off" /> <!-- pressed --> 

<item android:drawable="@drawable/volume_on" /> <!-- default --> 
당신은

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
android:drawable="@drawable/volume_off" /> <!-- pressed --> 
</selector> 

이 제거 선택에서 기본 이미지를 제거 할

+0

아마도 내가 필요한 것은 ToggleButton – RRTW

+0

일 것입니다. 덕분에, 정말 고마워요. –

답변

0

단추를 클릭 할 때 단추의 이미지를 영구히 변경하려면 단추의 onClick void 내에 프로그래밍 방식으로 편리하게 이미지를 변경하십시오. 예를 들어 경우

image1에 : R.drawable.image_first 이미지 2 : R.drawable.image_second

하고 XML 레이아웃 파일에서 당신이 가지고 : 당신이 할 수있는 활동에

<Button 
    android:background="@drawable/volume" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="click"/> 

:

public Class myActivity extends Activity{ 

Button mButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity_layout); 
    mButton = (Button) findViewById(R.id.button); 
} 

public void click(View v){ 
    mButton.setBackgroundResource(R.drawable.image_second); 
} 

} 

다시 클릭 한 후 이전 이미지로 돌아가려면 버튼의 상태를 저장하십시오 (부울 클릭 ed = true/false)를 호출하고 public void click 내에 if 문을 넣습니다. 내 MainActivity.java

public Class myActivity extends AppCompatActivity{ 

버튼 볼륨 내 content_main.xml

<Button 
    android:id="@+id/button" 
    android:background="@drawable/volume_on" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="click" /> 

에서

+0

예, 작동하지만, 당신이 말했듯이, 이전 이미지로 돌아와서 if 문 안쪽에 있어야합니다. 나는 내부 무언가를 공개적으로 무효로합니다. 만약 bascom avr 및 arduino IDE에 있다면 easely 이해할 수 있지만 java에서 정말 이해하지 못합니다 ,,, 예를 들어 코드를 공개 무효로하면 ... 덕분에 전에 –

+0

덕분에 알렉스, 내 하루 만들었 : .. D 조 –

0

라인 <!--<item android:drawable="@drawable/volume_on" /> remove default-->

버튼 상태가 변경되면 기본값으로 설정됩니다.

<Button 
android:background="@drawable/volume" 
android:layout_width="90dp" 
android:layout_height="90dp" 
android:src="@drawable/volume_on" 
android:layout_centerVertical="true" 
android:layout_centerHorizontal="true"/> 
+0

버튼을 볼 때 버튼이 보이지 않도록 단추를 눌렀을 때 (Volume_off 표시) –

1

귀하의 경우 볼륨 표시기를 변경하고 싶습니다. 프로그래밍 방식으로 변경해야합니다.

//At the top of your activity,declare a global variable 
    boolean isVolumeOn = true; 

    volumeButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        //check your volume status 
        if(isVolumeOn){ 
         view.setBackgroundResource(R.drawable.volume_off); 
         isVolumeOn = false; 
         //Turn off your volume here 

        }else{ 
         view.setBackgroundResource(R.drawable.volume_on); 
         isVolumeOn = true 
         //Turn on your volume here 

        } 
       } 
      }); 
+0

감사합니다. 내 질문에 QuangNguyen에게 감사드립니다. "isVolumeOn"으로 이해할 수 없습니다. 그 의미는 무엇인가? 좀 더 명확하게 예제 프로그램을 제공해 주시겠습니까? 미안 해요. 여기 새로 왔습니다. –

+0

감사합니다. QungNguyen, 정말 고맙습니다. –

+0

사용자가 응용 프로그램에서 볼륨을 켜거나 끌 수있는 기능을 추가하고 있습니까? –

0

; boolean isPressed = false;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity_layout); 
    volume = (Button) findViewById(R.id.button); 
} 

public void click(View v){ 
if (isPressed) { 
    volume.setBackgroundResource(R.drawable.volume_off); 
    Toast.makeText(this, "Volume Off", 
      Toast.LENGTH_SHORT).show(); 
}else{ 
    volume.setBackgroundResource(R.drawable.volume_on); 
    Toast.makeText(this, "Volume On", 
      Toast.LENGTH_SHORT).show(); 
} 
    isPressed=!isPressed; 
} 
관련 문제