2016-03-26 4 views
-2

Gibt es eine Möglichkeit, so dass ich die Farbe des Symbols und den Text des Listeneintrags ändern kann, wenn er unter Meine NavigationDrawer gedrückt wird.Benutzerdefinierter Selektor wie NavigationView

Ich weiß, dass ich dies mit NavigationView leicht tun kann, aber meine Anforderung ist ziemlich seltsam, so kann ich NavigationView nicht verwenden.

Bis jetzt kann ich die Farbe von beiden nach Artikelauswahl ändern. just like this

Ich habe versucht, TouchListener zu implementieren. aber es funktioniert nicht.

Touch

drlyt.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       // darken background 
       imgIcon.setColorFilter(Color.parseColor("#47ACD6"), 
         Mode.SRC_ATOP); 
       txtTitle.setTextColor(Color.parseColor("#47ACD6")); 
       Log.e("msg", "Down " + position); 
       break; 

      case MotionEvent.ACTION_UP: 
       // clear color filter 
       imgIcon.setColorFilter(null); 
       txtTitle.setTextColor(Color.parseColor("#666666")); 
       Log.e("msg", "Up"); 
       break; 
      } 
      return false; 
     } 
    }); 

Bitte helfen Sie mir. Danke.

+0

Wie ändern Sie Farbe beide nach der Artikelauswahl? –

+0

@tinysunlight Ich habe eine statische Variable genommen und Bedingung in meinen Adapter gesetzt, wenn die aktuelle Position gleich dieser statischen Variable ist. Wenn es wahr ist, setze ich ein Farbfilter auf das Icon und setze die Textfarbe auf TextView. wenn es falsch zurückkehrt, mache ich einfach einfach umgekehrt. und ich aktualisiere diese statische Variable in jeder Aktivität an ihre ausgewählte Position. –

+0

Verwenden Sie ListView? –

Antwort

1

Support-Bibliothek enthält

AppCompatTextView

AppCompatImageView

die backgroundTint und backgroundTintMode unterstützt. So können Sie ColorList erstellen und Funktionen wie setSupportBackgroundTintList und setSupportBackgroundTintMode verwenden.

ja. und ich kann AppCompatTextView aber nicht AppCompatImageView finden. und kannst du mir ein Beispiel geben, wie man sie benutzt?

nur XML Mit

<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> 

Mit nur Code

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); 
+0

Aber ich benutze 'NavigationView' nicht. –

+0

Überprüfen Sie meine neue Antwort. –

+0

Ich kann diese Klasse nicht finden. Ich habe 'android.support.v7.widget.AppCompatImageView' eingeschlossen, aber es gibt' noClassFoundException'. –