Używam ViewPagerIndicator i chciałbym zmienić styl zakładki, aby uzyskać ikony powyżej tekstu, zamiast domyślnego, co umieszcza ikonę po lewej stronie, a tytuł w prawo.ViewPagerIndicator Tabs: Ikony powyżej tekstu
Odpowiedz
Efekt ten można uzyskać, modyfikując tylko 1 wiersz kodu źródłowego biblioteki ViewPageIndicator.
Linia być modyfikowana jest w liczbie 180
w klasie wewnątrz metody addTab
TabPageIndicator
(przynajmniej na dzisiejszej wersji kodu 28/05/2013)
Oryginalny plik jest
180 tabView.setCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0);
Powinieneś zmodyfikować go do następujących, jeśli chcesz, aby ikona była umieszczona na górze tekstu.
180 tabView.setCompoundDrawablesWithIntrinsicBounds(0, iconResId, 0, 0);
Oto zrzut ekranu ze zmianą
Jak zapewne domyślacie już, można umieścić ikonę wszędzie wokół tekstu grając z iconResId w ramach różnych argumentów setCompoundDrawablesWithIntrinsicBounds
metoda.
Robert, właśnie przyznałem wszystkie punkty A-C. Pomyślałem, że mogę podzielić ten punkt na wiele odpowiedzi, ale najwyraźniej nie w taki sposób, w jaki stworzyłem nagrodę. Przepraszam! Twoja odpowiedź * jest * doceniana, niemniej! –
Powodem ikony zawsze pojawiają się po lewej stronie jest z powodu tego kawałka kodu:
if (iconResId != 0) {
tabView.setCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0);
}
znaleźć w TabPageIndicator.java
Jest to część prywatnej metody (addTab()
), a więc, nie można zmienić bez modyfikacji samej biblioteki.
Na szczęście nie jest to trudne. Upewnij się, że masz kod ViewPagerIndicator
źródłowy pobrany, a następnie otworzyć TabPageIndicator.java
Jeśli chcesz zmienić lokalizację na stałe (jako stały, jak można dostać się ze zmianą kodu źródłowego), należy zmienić lokalizację iconResId
w metodzie setCompoundDrawablesWithIntrinsicBounds() . Na przykład umieszczenie ikon u góry wymaga, aby drugi argument metody był iconResId
.
tabView.setCompoundDrawablesWithIntrinsicBounds(0, iconResId, 0, 0);
Jeśli potrzebujesz czegoś bardziej elastyczne, wymyśliłem tych zmian (nadal w TabPageIndicator.java
), które powinno działać. Zmiany te zostały odzwierciedlone w on my GitHub, więc istnieje działający przykład.
zmienne użytkownika:
/**
* Constants to improve readability - no magic numbers.
*/
public final static int LOCATION_LEFT =0;
public final static int LOCATION_UP = 1;
public final static int LOCATION_RIGHT = 2;
public final static int LOCATION_BOTTOM =3;
/**
* Stores the location of the tab icon
*/
private int location = LOCATION_LEFT;
/**
* Used to store the icon.
*/
private int [] drawables = new int [4];
/**
* Holds the value used by setCompoundDrawablesWithIntrinsicBounds used to denote no icon.
*/
private static int NO_ICON = 0;
Dodaj tę metodę:
public void setTabIconLocation (int newLocation){
if (location > LOCATION_BOTTOM || location < LOCATION_LEFT)
throw new IllegalArgumentException ("Invalid location");
this.location = newLocation;
for (int x = 0; x < drawables.length;x++){
drawables [x] = NO_ICON;
}
}
W addTab()
, zmień
if (iconResId != 0) {
tabView.setCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0);
}
do
if (iconResId != 0) {
drawables [location] = iconResId;
tabView.setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], drawables[2], drawables[3]);
}
realizacja dla biblioteki (wzięte z przykładowego kodu przewidzianego)
TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
indicator.setTabIconLocation (TabPageIndicator.LOCATION_UP);
indicator.setViewPager(pager);
Dzięki za odpowiedź i kopię roboczą na Github, bardzo doceniane! Obawiałem się, że nie jest to możliwe przez samą bibliotekę. No cóż, być może wyczuwam żądanie ściągnięcia (chyba że masz zamiar to zrobić :)). Jeszcze raz dzięki. –
Właśnie zdałem sobie sprawę, że nie mogę przypisać punktów bounty (mogę to zrobić dopiero po 24 godzinach): podzielę ich między ciebie i Roberta, kiedy będę mógł. –
@BartKiers Nie ma problemu :-) Wprowadziłem kilka drobnych zmian w kodzie, a gdy upewnię się, że działa poprawnie, wyślę żądanie ściągnięcia. –
Jest przejrzysty sposób to zrobić bez modyfikowania biblioteki. Po prostu skopiuj i wklej klasę TabPageIndicator do swojego projektu i zmodyfikuj linie wskazane w innych odpowiedziach. Następnie zmień nazwę klasy na cokolwiek chcesz i użyj jej tak, jakby była to TabPageIndicator
.
- 1. Qt QPushbutton Ikona powyżej tekstu
- 2. Zmiana TabPageIndicator stopka i kolory tekstu (ViewPagerIndicator)
- 3. Dodawanie tekstu do ikony powiadomienia
- 4. Android Tabs bez ikon
- 5. Ikony 32x32 dla edytora tekstu sformatowanego?
- 6. Jak wyświetlać ikony bez tekstu w QListWidget?
- 7. Wyświetlanie standardowej ikony i tekstu w QLabel
- 8. ViewPagerIndicator: Tekst wieloliniowy do tytułu karty?
- 9. Jak zmienić tło karty w zakładkach viewpagerindicator?
- 10. jQuery UI Tabs rozmiar
- 11. Tabs w bloku
- 12. Catching Tabs w TextArea
- 13. Android klienta Skórki w ActionBar/Tabs
- 14. Ustawianie tekstu nagłówka DisclosurePanel dynamicznie przy zachowaniu ikony strzałki?
- 15. Ikony paska zakładek środkowych bez tekstu w Swift
- 16. Wyrównanie pionowe tekstu i ikony w przycisku ładowania początkowego
- 17. ViewPagerIndicator - Ustaw narzędzie TabPageIndicator na centrum.
- 18. ViewPagerIndicator CirclePageIndicator nie można utworzyć instancji
- 19. ActionBar Sherlock Tabs na dole
- 20. JQuery UI Tabs Kolor tła
- 21. Mvc3 Token Antiforgery multi tabs
- 22. Powrót z kontekstu powyżej
- 23. Czy można wyłączyć podświetlanie składni w Sublime REPL-tabs?
- 24. ikony AccountAuthenticator
- 25. tabs jQuery UI nawigacji Zakładka wyłączyć
- 26. Tabs w jQuery dla ładowania jqGrid
- 27. atrybut pozycja Strona Facebook Tabs przestał działać
- 28. Twitter Bootstrap Tabs Korzystanie foreach Na OpenCart
- 29. jQuery Tabs, jak zapobiec skok kotwicy
- 30. Old Style Tabs In Eclipse Juno?
Witam, Jakieś rozwiązanie tego problemu? – Kid24