0

Ich versuche Selektor xml (erste Schaltfläche) mit Java (zweite Schaltfläche) zu simulieren.So entfernen Sie die Schaltfläche padding von setBackgroundTintList()

Lassen Sie uns sagen, ich habe diese onCreate() Java-Code in MainActivity.java:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button secondButton = (Button) findViewById(R.id.buttonJavaSelector); 
    int[][] hole_states = new int[][] { 

      new int[]{android.R.attr.state_pressed}, 
      new int[]{} 
    }; 
    int[] hole_colors = new int[] { 
      ContextCompat.getColor(this, android.R.color.white), 
      ContextCompat.getColor(this, android.R.color.holo_green_light) 
    }; 
    ColorStateList holeStateList = new ColorStateList(hole_states, hole_colors); 
    //secondButton.setBackgroundColor(this.getResources().getColor(android.R.color.holo_red_light)); 
    secondButton.setBackgroundTintList(holeStateList); 
    secondButton.setHighlightColor(Color.RED); 
} 

Dann activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.blogspot.diannaoxiaobai.tmptesting.MainActivity"> 

    <LinearLayout 
     android:id="@+id/layout_sign_in" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:id="@+id/yes_part" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <Button 
       android:id="@+id/buttonXmlSelector" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/button_ripple_light" 
       android:text="Cancel (Xml Selector)" 
       android:textColor="@android:color/holo_blue_light" /> 

     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/no_part" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <Button 
       android:id="@+id/buttonJavaSelector" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Sign In (Java Selector)" 
       android:textColor="@android:color/holo_blue_light" /> 

     </LinearLayout> 

    </LinearLayout> 

</android.support.design.widget.CoordinatorLayout> 

Und dann drawable/button_ripple_light.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="@android:color/white" /> 
    <item android:drawable="@android:color/holo_green_light" /> 
</selector> 

Der Ausgang Screenshot:

enter image description here

Wenn ich beiden Tasten gedrückt, beide in der Lage weiße Farbe werden:

enter image description here

Aber ich will nicht die Polsterung um die zweite Taste. Ich suchte viele Antworten in S/O, sie schlagen immer vor, Hintergrundfarbe zu ändern, um zu entfernen (Jemand sagte, dass es Schatten ist, nicht padding). So Kommentar- ich diese Zeile in MainActivity.java oben (Beachten Sie, dass ich hier rote Farbe eingestellt):

secondButton.setBackgroundColor(this.getResources().getColor(android.R.color.holo_red_light)); 

Nun ist die Polsterung nicht mehr existieren, aber nichts passiert (dh weiß werden), wenn i zweite Taste drücken:

enter image description here

setBackgroundColor() zum Entfernen der Füllung funktioniert nicht richtig. Was soll ich tun, um in diesem Fall die zweite Schaltfläche zu entfernen? Versuchen

Antwort

1

StateListDrawable holeStateList = new StateListDrawable(); 
    holeStateList.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(ContextCompat.getColor(this, 
      android.R.color.white))); 
    holeStateList.addState(new int[]{}, new ColorDrawable(ContextCompat.getColor(this, 
      android.R.color.holo_green_light))); 

    secondButton.setBackground(holeStateList);