2012-01-27 12 views
12

Chciałbym utworzyć widok ikony powiadomień podobny do powiadomienia z aplikacji Google+. Różnica polega na tym, że muszę mieć możliwość zmiany koloru w środowisku wykonawczym, gdy ikony Google+ są szare lub czerwone, więc zakładam, że używają StateListDrawable.Widok powiadomienia niestandardowego

Jakie jest najlepsze podejście do tego? Wolałbym mieć zaokrąglone, ścięte narożniki i mieć opcję, aby mieć możliwość przeciągnięcia wewnątrz. Ten niestandardowy widok zostanie również umieszczony na pasku akcji. Nadal potrzebuję widoku, by odpowiedzieć na androidy: rysunki list stanów, dzięki czemu mogę mieć kliknięcie i wybraną metodę działania.

Ten niestandardowy widok zostanie również umieszczony na pasku akcji.

Google+ app with the notification icon in the upper right that's grayed out and has a 0 in the middle.

+0

Czy wiesz, jak to zrobić jak Google robi, bez personalizacji? – AndrewS

Odpowiedz

23

Rozwiązałem to w następujący sposób.

Utworzono, aby uzyskać zaokrąglony kształt narożnika z jednolitym kolorem. Dodaje to również półprzezroczystą czerń, aby nadać jej wyrazisty wygląd w stosunku do blackgroundu. res/odkształcalne/shape_notification.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <stroke android:color="#33000000" android:width="2dp"/> 
    <corners android:radius="4dp" /> 
    <solid android:color="#99333333"/> 
</shape> 

odkształcalne warstwy zostaną wykorzystane jako rzeczywisty rozciągliwej na elemencie paska akcji. Ma tło (napisane powyżej) z ikoną klucza. RES/odkształcalne/layer_customizer.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/shape_notification" /> 
    <item android:drawable="@drawable/ic_menu_preferences" /> 
</layer-list> 

kodu Java, aby zmienić kolor. Widok docelowy to obiekt przypisany do losowania layer_customizer. Przekazany kolor zmieni zmienny kolor znacznika shape_notification.xml.

public static void setCustomizerDrawableColor(final View target, final int color) { 
    final Drawable d = target.getDrawable(); 
    LayerDrawable layer = (LayerDrawable)d; 
    GradientDrawable gradient = (GradientDrawable)layer.getDrawable(0); 
    gradient.setColor(color); 
    gradient.invalidateSelf(); 
    layer.invalidateSelf(); 
    target.invalidate(); 
} 

Utwórz układ za pomocą tych warstw. res/layout/actionview_customizer.xml

<?xml version="1.0" encoding="utf-8"?> 
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/ActionViewCustomizer" 
    android:src="@drawable/layer_customizer" 
    android:contentDescription="@string/customize" 
    style="@style/ActionBarButton" /> 

Aby uzyskać niestandardowy układ umieścić w ActionBar dodać tę pozycję menu do niego: res/menu/actionbar_main.xml

<item android:id="@+id/MenuItemCustomize" 
    android:icon="@drawable/layer_customizer" 
    android:title="@string/customize" 
    android:showAsAction="always" 
    android:actionLayout="@layout/actionview_customizer" 
    /> 

Następnie po załadowaniu paska akcji użyj tego kodu, aby uzyskać uchwyt przycisku. Dzieje się tak w twojej Aktywności.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.actionbar_main, menu); 
    final ActionBar actionBar = getActionBar(); 
    final MenuItem customizerItem = menu.findItem(R.id.MenuItemCustomize); 
    View v = customizerItem.getActionView(); 
    customizerActionView = (ImageButton) v; 
    customizerActionView.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      onOptionsItemSelected(customizerItem); 
     } 
    }); 
} 

Jeśli chcesz zobaczyć pełną źródło pracuje razem spojrzeć na kodzie źródłowym aplikacji używam tego w. http://code.google.com/p/motivatormaker-android/source/browse/MakeMotivator/src/com/futonredemption/makemotivator/activities/MainActivity.java

+0

W jaki sposób udało ci się uzyskać widok w pasku akcji (docelowym)? –

+0

Powinieneś być teraz dobry. :) –

+0

pomóżcie mi proszę - jak pokazywać liczby, a nie jak w twoim przykładzie ()? – AndrewS

Powiązane problemy