2016-11-16 78 views
0

XML提拉:如何保持的ImageButton在按下狀態並顯示按下狀態

<?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/vopressed" /> //light blue 
    <item android:state_selected="true" android:drawable="@drawable/voselected" /> //blue 
    <item android:drawable="@drawable/vo" /> //black 
</selector> 

XML:

<ImageButton 
     android:layout_width="0dp" 
     android:layout_weight="0.2" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/vo_selector" 
     android:id="@+id/ibS" 
     android:background="@android:color/transparent" /> 

我試圖改變對點擊深藍後淡藍色。

ibS.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ibS.setPressed(true); 
     Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show(); 
    } 
}); 

我怎樣才能使它所以當我點擊它,它停留在按下/選擇的狀態,從黑到藍繪製的變化,當我再次點擊它它unpresses /取消選擇本身和改回來變黑。

+0

是ibS你的圖像按鈕? – HendraWD

+0

我在這裏看到邏輯錯誤,因爲在OnClickListener中,您將圖像按鈕的按下狀態設置爲true,但只要您將手指從按鈕上移開,按下的狀態就會自動爲假 – HendraWD

+0

是的......任何想法如何按下狀態一旦點擊,然後按下,如果再次點擊等等...... – Si8

回答

1

您可以用繪製的選中狀態嘗試的背景::

ibS.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    ibS.setPressed(true); 
    Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show(); 
}}); 

改線ibS.setPressed(true);ibS.setSelected(!ibs.isSelected());

因此,它會將圖像的drawable更改爲selected_state圖像,在drawable中定義的狀態也將被選中..然後再次單擊..它將恢復最後一個狀態... 試試這個......

+0

大多數其他答案的作品,除了這一個「工作」我已經有了。謝謝。 – Si8

0
ibS.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
      ibS.setBackground(ContextCompat.getDrawable(your Context,R.drawable.voselected)); 
     Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show(); 
    } 
}); 
+0

我怎樣才能在兩個之間每次點擊之間交換? – Si8

+0

謝謝你的回答。 – Si8

1

使用按鈕而不是圖像按鈕,因爲在這種情況下,您將需要兩個圖像資產。

使用繪製:

按鈕未按狀態:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" android:color="@color/colorPrimary" /> 
    <padding android:left="10dp" 
     android:top="10dp" 
     android:right="10dp" 
     android:bottom="10dp" /> 
    <solid android:color="@color/colorPrimary" /> 
</shape> 

按鈕按下的狀態:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" android:color="@color/colorPrimaryDark" /> 
    <padding android:left="10dp" 
     android:top="10dp" 
     android:right="10dp" 
     android:bottom="10dp" /> 
    <solid android:color="@color/colorPrimaryDark" /> 
</shape> 

現在需要時才設置此之上繪製。

+0

drawavles svg drawables – Si8

+0

謝謝你的回答,不管:) – Si8

1

當您從按鈕上移開手指時,按下的狀態將始終重置爲false,因此您無法使用該狀態。 您應該通過聲明成員變量

private boolean isPressed = false; 

直接跟蹤狀態。然後你設置的圖像按鈕直接在按鈕按下

ibS.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     isPressed = !isPressed; 
     if (isPressed) { 
      ibS.setBackgroundColor(R.color.your_blue_color); 
      //use code below if you want to use drawable background 
      //ibS.setBackgroundResource(R.drawable.background_pressed); 
     } else { 
      ibS.setBackgroundColor(R.color.your_black_color); 
      //use code below if you want to use drawable background 
      //ibS.setBackgroundResource(R.drawable.background_normal); 
     } 
    } 
}); 
+0

謝謝你的回答。 – Si8

相關問題