2013-05-14 11 views
7

Oto mój ToggleButton:ToggleButton centrowania obrazu - bez słów

<ToggleButton 
      android:id="@+id/bSmenuTopItems" 
      android:layout_width="wrap_content" 
      android:layout_height="48dp" 
      android:background="@drawable/master_button_selector" 
      android:drawableLeft="@drawable/flame_icon" /> 

nie mam tekst w tym obrazie, muszę ToggleButton powodu w stan aktywny.

EDYCJA: Myślę, że pytanie zostało źle zrozumiane. Wewnątrz przycisku Toggle (flame_icon) istnieje możliwość ciągnięcia i jest on ustawiony jako background. Chcę, aby był to wyśrodkowany. Nie ma tekstu, tylko obraz. Potrzebuję przycisku Toggle, ponieważ po wybraniu muszę mieć aktywny stan.

Jest tylko drawableLeft, drawableRight, drawableTop itp Chcę draweableMiddle, które nie wydają się exisit.

+0

(1) dlaczego waga 50? czy w tym rzędzie jest mnóstwo przedmiotów, których nie można użyć 1 dla każdego, aby reprezentować równą wagę? (2) jaki rodzaj układu? czy wypróbowałeś layout_gravity zamiast samej grawitacji? lub center_horizontal, jeśli jest to układ względny? – Rarw

+0

@Rar To jest 'LinearLayout'. Ale dlaczego miałoby to wpłynąć na to, co dzieje się wewnątrz "przycisku"? – KickingLettuce

+0

Myślałem, że wycelowałeś guzik. Próbujesz wyśrodkować obraz w przycisku? – Rarw

Odpowiedz

12

Poprawiłem odpowiedź, aby odpowiedzieć na zmienione pytanie.

drawableLeft, drawableRight i drawableTop przycisk, o ile mogę powiedzieć, kontrola gdzie obraz jest umieszczony w stosunku do selektora (a/k/a on/off) wskaźnika. Top umieści go powyżej wskaźnika, po lewej i prawej stronie, umieszczając go odpowiednio po określonej stronie. Nie sądzę, aby można było usunąć wskaźnik selektora, ponieważ byłoby to sprzeczne z celem używania ToggleButton.

Udało mi się wyśrodkować 2 losowania w 2 ToggleButtons, korzystając z poniższego układu. Aby wyśrodkować obrazy w ramach ToggleButton użyłem drawableTop, aby obrazy pojawiły się nad wskaźnikiem wyboru. Następnie ustawię zarówno textOn i textOff jako pusty ciąg znaków. Jeśli tego nie ustawisz, domyślny tekst włączania/wyłączania pojawia się nad wskaźnikiem wyboru i przesuwa kreślarkę na bok.

<LinearLayout 
    android:id="@+id/buttonContainer" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <ToggleButton 
    android:id="@+id/bSmenuTopItems" 
     android:layout_width="0" 
     android:layout_weight="1" 
     android:layout_height="75dp" 
     android:checked="false" 
     android:drawableTop="@drawable/flag" 
     android:textOn="" 
     android:textOff="" 
     android:layout_gravity="center" 
     android:textColor="#cecece" /> 

    <ToggleButton 
     android:id="@+id/bSmenuTopItems2" 
     android:layout_width="0" 
     android:layout_height="75dp" 
     android:layout_weight="1" 
     android:checked="false" 
     android:textOn="" 
     android:textOff="" 
     android:drawableTop="@drawable/chaticon" 
     android:layout_gravity="center" 
     android:textColor="#cecece" /> 

</LinearLayout> 

Wszystko trzeba zrobić, to dopasować wysokość przycisku, aby umieścić swoją ikonę względem ikona wyboru gdzie chcesz. Moją jedyną sugestią byłoby kontrolowanie rozmiaru obrazu, którego używasz. Jeśli możesz po prostu dostosować wymiary obrazu względem przycisku, umieszczenie go za pomocą funkcji drawableTop powinno automatycznie wyśrodkować.

+0

Przykro mi, myślę, że pytanie zostało źle zrozumiane. Zaktualizowałem to. – KickingLettuce

+0

Poprawiona odpowiedź na pytanie z odpowiedzią – Rarw

+0

@ Rarw Próbuję zrobić to samo, co atm, więc nie ma metody umieszczania obrazu na środku przycisku bez zmiany rozmiaru obrazu? Martwiłbym się, jak będzie wyglądał na wielu urządzeniach, ręcznie zmieniając rozmiar (czy jest to ważny problem?). –

9

Nie miałem szczęścia z zaakceptowaną odpowiedzią, ale może mój scenariusz jest nieco inny. Drugim rozwiązaniem, które widziałem, jest użycie atrybutu drawablePadding, aby przesunąć topDrawable w kierunku środka przycisku. Działa to w pewnym stopniu, ale zakłada, że ​​wymiary przycisku są stałe, a nawet wtedy, trudno jest dokładnie wyśrodkować ikonę.

Oto co wymyśliłem. Nie określaj ikony na samym przycisku. Zamiast tego, ustaw przycisk za tło do rozciągliwej warstwy listy, która wciąga żądaną ikonę nad selektorem chcesz, tak:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/master_button_selector" /> 
    <item> 
     <bitmap android:src="@drawable/flame_icon" android:gravity="center" /> 
    </item> 
</layer-list> 
+0

Działa jak urok ... nie wiem, dlaczego wcześniej nie myślałem o tym jako rozwiązaniu. – Justin

+0

Zastanawiam się, jak to by działało, gdy trzeba pokazywać różne stany? –

+0

@ ClumsyHamster Jeśli jesteś ciekawy, zawsze możesz spróbować, zamiast zastanawiać się głośno na StackOverflow. ;) Działa świetnie. Zauważ, że pierwszy '' jest selektorem. Zmiany stanu przycisku rozchodzą się do niego. – spaaarky21

0

użyłem android:drawableTop jak opisał Rarw, ale jak mój przycisk był wysoki i szeroki, po prostu wisiał u góry. Naprawdę nie wyśrodkowany ...więc bawił się wokół z paddingTop i może tu pracować, co mam:

<ToggleButton 
    android:id="@+id/togglebutton1" 
    android:paddingTop="50dp" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_gravity="center" 
    android:layout_weight="1" 
    android:drawableTop="@drawable/music_collection_small" 
    android:textOn="" 
    android:textOff="" 

    /> 

myślę, że będzie to praca dla moich celów

0

Może this pomoże. Spójrz na dół strony dla rozwiązania z zapl. P.S nie wiedział, jak połączyć konkretną odpowiedź, nowe tutaj XD

+0

FYI, to nie jest tak naprawdę odpowiedź (a przynajmniej nie jakość). Opublikuj jako komentarz, gdy masz już wystarczającą liczbę powtórzeń. –

Powiązane problemy