Android: łączenie tekstu i obrazu na przycisku lub ImageButton
Staram się mieć obraz (jako tło) na przycisku i dodawać dynamicznie, w zależności od tego, co dzieje się w czasie wykonywania, jakiś tekst nad obrazem.
Jeśli używam ImageButton
nie mam nawet możliwości dodania tekstu.
Jeśli używam Button
Mogę dodać tekst, ale tylko zdefiniować obrazek z android:drawableBottom
i podobnymi atrybutami XML zdefiniowanymi tutaj .
Jednak te atrybuty łączą tylko tekst i obraz w wymiarach x i y, co oznacza, że mogę narysować obraz wokół mojego tekstu, ale Nie poniżej/pod moim tekstem (z osią z zdefiniowaną jako wychodzącą z wyświetlacza).
Jakieś sugestie, jak to zrobić? Jednym z pomysłów byłoby rozszerzenie Button
lub ImageButton
i nadpisanie metody draw()
. Ale z moim obecnym poziomem wiedzy tak naprawdę Nie wiem, jak to zrobić (rendering 2D). Może ktoś z większym doświadczeniem zna jakieś rozwiązanie lub przynajmniej jakieś wskazówki na początek?
14 answers
Możesz wywołać {[0] } na Button
, aby ustawić tło przycisku.
Dowolny tekst pojawi się nad tłem.
Jeśli szukasz czegoś podobnego w xml jest:
android:background
atrybut, który działa w ten sam sposób.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 22:06:39
Dla użytkowników, którzy chcą tylko umieścić tło, ikonę-obraz i tekst w jednym Button
z różnych plików: Ustaw na tle Button
, drawableTop/Bottom/Rigth/Left i padding atrybuty.
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/home_btn_test"
android:drawableTop="@drawable/home_icon_test"
android:textColor="#FFFFFF"
android:id="@+id/ButtonTest"
android:paddingTop="32sp"
android:drawablePadding="-15sp"
android:text="this is text"></Button>
Aby uzyskać bardziej wyrafinowany układ, Możesz również użyć RelativeLayout
i uczynić go klikalnym.
Tutorial: świetny tutorial, który obejmuje oba przypadki: http://izvornikod.com/Blog/tabid/82/EntryId/8/Creating-Android-button-with-image-and-text-using-relative-layout.aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-30 12:07:15
Jest o wiele lepsze rozwiązanie tego problemu.
Weź zwykły Button
i użyj atrybutów drawableLeft
i gravity
.
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/my_btn_icon"
android:gravity="left|center_vertical" />
W ten sposób otrzymujesz przycisk, który wyświetla ikonę po lewej stronie przycisku i tekst po prawej stronie ikony wyśrodkowany pionowo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-30 12:09:06
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/home_button"
android:drawableLeft="@android:drawable/ic_menu_edit"
android:drawablePadding="6dp"
android:gravity="left|center"
android:height="60dp"
android:padding="6dp"
android:text="AndroidDhina"
android:textColor="#000"
android:textStyle="bold" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-31 15:47:18
Wystarczy użyć LinearLayout i udawać, że jest to Button
- Ustawienie background
i klikalne jest kluczem:
<LinearLayout
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_default"
android:clickable="true"
android:orientation="horizontal" >
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:src="@drawable/image" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:text="Do stuff" />
</LinearLayout>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-30 12:09:27
Just replace
android:background="@drawable/icon"
Z
android:background="@android:color/transparent"
android:drawableTop="@drawable/[your background image here]"
Izz niezła sztuczka.. ;)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-29 06:53:12
Przyjęłam inne podejście niż tutaj, i działa naprawdę dobrze, więc chciałam się nim podzielić.
Używam stylu, aby utworzyć niestandardowy przycisk z obrazkiem po lewej stronie i tekstem po prawej stronie. Po prostu wykonaj 4 "proste kroki" poniżej:
I. Utwórz swoje 9 łatek przy użyciu co najmniej 3 różnych plików PNG i narzędzia, które masz w: / YOUR_OWN_PATH/android-sdk-mac_x86/tools/./ draw9patch Po tym powinieneś mieć:
Button_normal.9.png, button_focused.9.png i button_pressed.9.png
Następnie pobierz lub utwórz ikonę PNG 24x24.
Ic_your_icon.png
Zapisz wszystko w drawable / folderze w projekcie Android.
II. Utwórz plik XML o nazwie button_selector.xml w Twoim projekcie w folderze drawable/. Państwa powinny być takie:
<item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/button_focused" />
<item android:drawable="@drawable/button_normal" />
III. przejdź do folderu values / i otwórz lub utwórz style.plik xml i utwórz następujący kod XML:
<style name="ButtonNormalText" parent="@android:style/Widget.Button">
<item name="android:textColor" >@color/black</item>
<item name="android:textSize" >12dip</item>
<item name="android:textStyle" >bold</item>
<item name="android:height" >44dip</item>
<item name="android:background" >@drawable/button_selector</item>
<item name="android:focusable" >true</item>
<item name="android:clickable" >true</item>
</style>
<style name="ButtonNormalTextWithIcon" parent="ButtonNormalText">
<item name="android:drawableLeft" >@drawable/ic_your_icon</item>
</style>
ButtonNormalTextWithIcon to " dziecięcy styl" ponieważ rozszerza ButtonNormalText ("styl nadrzędny").
Zauważ, że zmieniając drawableft w ButtonNormalTextWithIcon style, na drawableRight, drawableTop lub drawableBottom możesz umieścić ikonę w innej pozycji względem tekstu.
IV. przejdź do layout / folderu, w którym masz swój XML dla interfejsu użytkownika i przejdź do przycisku, w którym chcesz zastosować styl i sprawić, aby wyglądał tak:
<Button android:id="@+id/buttonSubmit"
android:text="@string/button_submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/ButtonNormalTextWithIcon" ></Button>
I... voila! Masz swój przycisk z obrazkiem na lewa strona.
Dla mnie, to jest lepszy sposób, aby to zrobić! ponieważ robi to w ten sposób można zarządzać rozmiarem tekstu przycisku oddzielnie od ikony, którą chcesz wyświetlić i użyć tego samego tła, które można narysować dla kilku przycisków z różnymi ikonami, zgodnie z wytycznymi Android UI za pomocą stylów.Możesz również utworzyć motyw dla swojej aplikacji i dodać do niego "styl rodzica", aby wszystkie przyciski wyglądały tak samo, i zastosować" styl potomny " z ikoną tylko tam, gdzie jej potrzebujesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-04 18:13:58
<Button android:id="@+id/imeageTextBtn"
android:layout_width="240dip"
android:layout_height="wrap_content"
android:text="Side Icon With Text Button"
android:textSize="20sp"
android:drawableLeft="@drawable/left_side_icon"
/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-20 08:30:37
Możesz użyć drawableTop
(również drawableLeft
, itd.) dla obrazka i ustawić tekst pod obrazkiem dodając gravity
left|center_vertical
<Button
android:id="@+id/btn_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@null"
android:drawableTop="@drawable/videos"
android:gravity="left|center_vertical"
android:onClick="onClickFragment"
android:text="Videos"
android:textColor="@color/white" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-30 12:07:47
Prawdopodobnie moje rozwiązanie będzie pasować do wielu użytkowników, mam nadzieję.
To, co sugeruję, to tworzenie TextView z Twoim stylem. Działa dla mnie doskonale i ma wszystkie funkcje, takie jak przycisk.
Przede wszystkim stwórzmy styl przycisków, którego możesz używać wszędzie...Tworzę button_with_hover.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#8dbab3" />
<gradient android:angle="-90" android:startColor="#48608F" android:endColor="#48608F" />
</shape>
<!--#284682;-->
<!--border-color: #223b6f;-->
</item>
<item android:state_focused="true">
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#284682" />
<solid android:color="#284682"/>
</shape>
</item>
<item >
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="@color/ControlColors" />
<gradient android:angle="-90" android:startColor="@color/ControlColors" android:endColor="@color/ControlColors" />
</shape>
</item>
</selector>
Po Drugie, Pozwala utworzyć przycisk textview.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dip"
android:layout_gravity="right|bottom"
android:gravity="center"
android:padding="12dip"
android:background="@drawable/button_with_hover"
android:clickable="true"
android:drawableLeft="@android:drawable/btn_star_big_off"
android:textColor="#ffffffff"
android:text="Golden Gate" />
I to jest wynik. Następnie Styl niestandardowy przycisk z dowolnymi kolorami lub innymi właściwościami i marginesy. Powodzenia
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 13:42:55
<Button
android:id="@+id/groups_button_bg"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Groups"
android:drawableTop="@drawable/[image]" />
android:drawableLeft
android:drawableRight
android:drawableBottom
android:drawableTop
Http://www.mokasocial.com/2010/04/create-a-button-with-an-image-and-text-android/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-14 13:40:32
Ten kod działa dla mnie doskonale
<LinearLayout
android:id="@+id/choosePhotosView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:clickable="true"
android:background="@drawable/transparent_button_bg_rev_selector">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/choose_photo"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:text="@string/choose_photos_tv"/>
</LinearLayout>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-24 10:40:36
Możesz użyć tego:
<Button
android:id="@+id/reset_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:background="@drawable/btn_med"
android:text="Reset all"
android:textColor="#ffffff" />
<Button
android:id="@+id/undo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:background="@drawable/btn_med"
android:text="Undo"
android:textColor="#ffffff" />
W tym umieściłem obrazek jako background
, a także dodałem tekst..!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-30 12:08:09
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/temp"
/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-01 08:27:11