Kiedy uruchamiam układ na określonym pliku XML, otrzymuję to:
This tag and its children can be replaced by one <TextView/>
and a compound drawable
Jaką zmianę należy wprowadzić dla następującego kodu xml:
<LinearLayout android:id="@+id/name_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:background="@drawable/grouplist_single_left_grey_area" >
<ImageView android:id="@+id/photo_image"
android:layout_width="@dimen/thumbnail_width"
android:layout_height="@dimen/thumbnail_height"
android:paddingBottom="5dip"
android:paddingTop="5dip"
android:paddingRight="5dip"
android:paddingLeft="5dip"
android:layout_marginRight="5dip"
android:clickable="true"
android:focusable="true"
android:scaleType="fitCenter"
android:src="@*android:drawable/nopicture_thumbnail"
android:background="@drawable/photo_highlight" />
<TextView android:id="@+id/name"
android:paddingLeft="5dip"
android:layout_weight="1"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
Tak to wygląda na ekranie:
Ikona aparatu jest domyślna. Kliknięcie tego daje użytkownikowi możliwość wyboru innego obrazu.
Odpowiedzi:
Aby rozwinąć odpowiedź Romaina Guya, oto przykład.
Przed:
Po:
źródło
Scal
TextView
iImageView
w jeden, używającsetCompoundDrawable*()
metod TextView lub używającandroid:drawableLeft
.źródło
setCompoundDrawable()
nie zajmie się twoim rysunkiem w takiej postaci, w jakiej jest, musisz go wywołaćsetBounds
(patrz API ). Aby go ustawić, możesz uzyskać poprzednie ograniczenia za pomocąTextView.getCompoundDrawables()
, uzyskując dostęp do prawidłowego indeksu do rysowania i ostatecznie wywołującgetBounds()
.Pomyślałem, że również do tego postaram się uzyskać dodatkowe punto: możesz dodać dopełnienie między obrazem a tekstem za pomocą
android:drawablePadding
. https://stackoverflow.com/a/6671544/1224741źródło
Czasami można zamienić
ImageView
(lub wiele) naTextView
jedenTextView
ze złożonymi rysunkami. Nie ma wielu parametrów, które można zastosować do złożonego, rysowanego za pomocą natywnego interfejsu API i tej biblioteki TextViewRichDrawable , ale jeśli możesz zarządzać jednym TextView zamiast korzystać z LinearLayout, zdecydowanie powinieneś go używać .Lista atrybutów i parametrów, które można zastosować do złożonych rysunków:
Rozmiar: ( TAK, naprawdę ):
Nawet ustaw zasób wektorowy jako możliwy do rysowania:
Drawable's Padding using natywnego API
android:drawablePadding
-> linkOto przykład:
źródło
LinearLayout
Który zawieraImageView
iTextView
może być bardziej skutecznie traktować jako rozciągliwej związek (pojedynczyTextView
, za pomocądrawableTop
,drawableLeft
,drawableRight
i / lubdrawableBottom
atrybutów zwrócić jeden lub więcej obrazów sąsiadujące tekście).Jeśli dwa widgety są przesunięte względem siebie za pomocą marginesów, można to zastąpić
drawablePadding
atrybutem.We wtyczce Eclipse znajduje się szybka naprawa kłaczków do wykonania tej konwersji.
Od: Oficjalne dokumenty API Androida!
źródło
Dodaj
tools:ignore="UseCompoundDrawables"
do<LinearLayout>
.źródło
Kiedy postępowałem zgodnie z powyższym kodem, tekst wewnątrz TextView nie jest poprawnie ustawiany. Musisz ustawić jego grawitację na środku | zacząć osiągnąć to, co pokazano w zadanym pytaniu.
Widok tekstu wygląda następująco:
źródło
Jeśli nie chcesz zmieniać ImageView i TextView, możesz zmienić wersję w pliku AndroidManifest.xml jako:
Jeśli Twoja wersja to android: targetSdkVersion = "17" zmień ją na "18".
Mam nadzieję, że to naprawi. Zrobiłem to i dobrze to zrobiłem
źródło
Innym podejściem jest osadzenie ViewImage w innym LinearLayout (pozwala obsłużyć go z samym id):
źródło
źródło