2016-03-29 12 views
4

Wie kann ich Hintergrundtönung für ImageButton oder AppCompatImageButton? Bitte antworten Sie für XML und Java. Ich habe eine Java-Lösung finden, die sagt, ich setBackgroundTintList() verwenden die meisten, aber wenn ich es verwenden, der Hintergrund immer blau und don`t Änderung auf Klick angezeigt. Diese ist, was ich versucht habe:Hintergrund Tint

mButtonBold.setSupportBackgroundTintList(new ColorStateList(
      new int[][]{EMPTY_STATE_SET, PRESSED_ENABLED_STATE_SET}, 
      new int[]{Color.BLUE, Color.GREEN} 
)) 
+0

was sind diese Konstanten '{EMPTY_STATE_SET, PRESSED_ENABLED_STATE_SET}'? tint' Veränderung Bildfarbe durch die Schaffung eines Filters darauf: –

+0

Diese Konstanten wurden in android 'View' Klasse –

Antwort

8

Zuerst Ihre Bestellung von Array ist falsch. Standardwert muss der letzte Zustand sein, so benutzen Sie diese ein:

mButtonBold.setSupportBackgroundTintList(new ColorStateList(
      new int[][]{PRESSED_ENABLED_STATE_SET,EMPTY_STATE_SET}, 
      new int[]{Color.GREEN,Color.BLUE} 
)) 

XML

<android.support.v7.widget.AppCompatImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_done" 
    app:backgroundTint="@drawable/background" 
    app:backgroundTintMode="src_over"/> 

ziehbar/Hintergrund

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

    <item android:color="@color/colorAccent" android:state_pressed="true" /> 

    <item android:color="@color/colorPrimary" /> 
</selector> 

JAVA

, wenn man bedenkt, das Layout ist so etwas wie dieses:

<android.support.v7.widget.AppCompatImageButton 
     android:id="@+id/imageButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_done" /> 

dann:

AppCompatImageButton imageButton = (AppCompatImageButton)findViewById(R.id.imageButton); 
    imageButton.setSupportBackgroundTintList(new ColorStateList(
      new int[][]{new int[]{android.R.attr.state_pressed}, 
         new int[]{} 
      }, 
      new int[]{Color.GREEN,Color.BLUE} 
    )); 
    imageButton.setSupportBackgroundTintMode(PorterDuff.Mode.SRC_OVER); 

, wenn Sie SDK Widget verwenden android Präfix statt app wo

xmlns:app="http://schemas.android.com/apk/res-auto" 

verwenden werden und

xmlns:android="http://schemas.android.com/apk/res/android" 
+0

Vielen Dank! Die Java-Lösung funktioniert aber nicht XML. Aber es gibt ein Problem in Java-Lösung. In dieser Lösung wird der Hintergrund des Bildes auf grün gesetzt, bis die Taste gedrückt wird. Ich möchte, dass es bis zum nächsten Drücken grün bleibt und wenn der Benutzer die Taste erneut drückt, ändere die Farbe in blau. Wie kann ich es implementieren? –

+0

Meine Lösung beantworte deine Frage, das ist eine andere Frage. Anyway auf Klick-Taste ändern Sie es manuell. Du brauchst diese Sachen nicht. Verwenden Sie einen booleschen Wert und überprüfen Sie, ob der Button –

+0

'setSupportBackgroundTintList()' auf die Unterstützung der Bibliotheksgruppe beschränkt ist und als privat betrachtet werden soll. Sie möchten stattdessen 'ViewCompat.setBackgroundTintList()' verwenden – Josh

1

Tint-Code in JAVA ändern:

imageView.setColorFilter(Color.argb(255, 255, 0, 0)); // RED Tint 

Ändern Tint in XML Code:

android:tint="@color/red" 
+0

' setColorFilter() 'und' android definiert. aber ich möchte die Hintergrundfarbe des Bildes ändern. Beachten Sie, dass mein Drawable transparent ist und ich möchte den Hintergrund ändern, nicht den ImageButton-Hintergrund –

0

den Hintergrund Farbton einzustellen einer Taste:

Ich habe eine Spitze mit xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:color="#ffff0000"/> 
<!-- pressed --> 
<item android:state_focused="true" android:color="#ff0000ff"/> 
<!-- focused --> 
<item android:color="#ff000000"/> 
<!-- default --> 
</selector> 

Dann den Hintergrund Button-Set mit:

button.setBackgroundResource(R.drawable.yourbackgroundbutton); 
+0

Er erzeugt "InflationException". Ich denke, android: color ist nicht verfügbar. Ich habe ein Beispiel gesehen, das "android: drawable" verwendet.Aber ich möchte nicht ein ziehbares verwenden, ich möchte einfache Farbe verwenden. –

0
final AppCompatImageButton imageButton = (AppCompatImageButton)findViewById(R.id.imageButton); 
     imageButton.setSupportBackgroundTintList(new ColorStateList(
       new int[][]{new int[]{android.R.attr.state_selected}, 
         new int[]{} 
       }, 
       new int[]{Color.GREEN,Color.BLUE} 
     )); 
     imageButton.setSupportBackgroundTintMode(PorterDuff.Mode.SRC_OVER); 

     imageButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       imageButton.setSelected(!imageButton.isSelected()); 
      } 
     }); 

dies seinen Zustand wechseln, wenn Sie so wollen, wenn es grün wird ausgewählt und nicht ausgewählten wird blau sein.