Muszę dołączyć grafikę nagłówka do wszystkich moich działań / widoków. Plik z nagłówkiem nazywa się header.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#0000FF"
android:padding="0dip">
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="0dip"
android:layout_marginTop="0dip"
android:layout_marginBottom="0dip"
android:padding="0dip"
android:paddingTop="0dip"
android:paddingBottom="0dip"
android:layout_gravity="fill"
android:background="#00FF00"
/>
</FrameLayout>
Zwróć uwagę na android:background="#00FF00"
(zielony), to tylko cele wizualizacji.
Uwzględniam je w moich poglądach w ten sposób:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
style="@style/white_background">
<include layout="@layout/header" />
(...)
Tak więc, kiedy faktycznie to wypróbuję, wynik wygląda jak lewy obraz, a nie jak powinien wyglądać (po prawej):
(1) Ta - pomarańczowa - część to przedmiotowy obraz / ImageView
(2) Niekochana zielona ramka. uwaga: normalnie zielony obszar byłby przezroczysty - jest zielony tylko dlatego, że ustawiłem background
.
Zwróć uwagę na zieloną ramkę wokół obrazu u góry; Jest częścią ImageView i po prostu nie mogę zrozumieć, dlaczego tam jest ani jak mogę się go pozbyć. Ustawia wszystkie wypełnienia i marginesy na 0 (ale wynik jest taki sam, gdy je pomijam). Obraz ma format JPEG * 480x64px i umieściłem go w res / drawable (nie w jednym z tych drawable-Xdpi
).
(* jpeg, ponieważ wygląda na to, że natknąłem się na stary problem z gamma png - na początku obejrzałem ten problem, ustawiając zieloną ramkę na tę samą pomarańczową co na zdjęciu, a kolory nie pasowały.)
Wypróbowałem to na moim htc Desire / 2.2 / Build 2.33.163.1 i na emulatorze. Opisałem również problem komuś w # android-dev; Mogła odtworzyć problem, ale też nie miała wytłumaczenia. docelowa kompilacja to 1,6.
update @tehgoose: ten kod daje dokładnie ten sam wynik z dopełnieniem góra i dół.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
style="@style/white_background">
<!-- <include layout="@layout/header" /> -->
<ImageView
android:src="@drawable/header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00FF00"
android:layout_weight="0"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dip"
android:layout_weight="1">
(... rest of the elements)
</LinearLayout>
</LinearLayout>
źródło
android:layout_margin="-10dp"
,android:padding="-10dp"
Odpowiedzi:
Wreszcie!
atrybut adjustViewbounds wystarczyły:
natknąłem się na to tutaj . dzięki za pomoc!
źródło
Mi to pasuje.
źródło
scaleType="fitXY"
robi jednak coś innego: zmienia proporcje obrazu, co prowadzi do zniekształceń. czasami może to być dopuszczalne, np. w przypadku abstrakcyjnego obrazu tła.android:adjustViewBounds="true"
iandroid:scaleType="fitXY"
było to, czego potrzebowałem, aby wyrównać ImageViews w moim układzie. Obrazy różniły się o jeden lub dwa piksele (bardzo małe na wyświetlaczu o wysokiej rozdzielczości) z zaledwieadjustViewBounds
. DodaniescaleType
wydaje się wymusić ostateczne skalowanie obrazu po dostosowaniu granic widoku, co wymusza skalowanie obrazu do pełnego rozmiaru nowych granic.Ma to związek z proporcjami obrazu. Domyślnie system zachowuje oryginalne proporcje źródła obrazu. Które w większości przypadków nie odpowiadają dokładnie układowi lub wymiarom określonym w układzie. W związku z tym,
android:scaleType
do dopasowania obrazu. Na przykład możesz określićandroid:scaleType="fitXY"
źródło
to dodatkowe wypełnienie jest generowane automatycznie, ponieważ Android próbowałby uzyskać oryginalne proporcje. spróbuj poniżej
źródło
Możesz dać
specific height to imageView say 50dp or 40dp
iadjust image to make green border
zniknąć.Na przykład:
android:layout_height="40dp"
źródło
Musisz zmienić to na „fill_parent”
Konieczne może być również przeskalowanie obrazu, aby wypełnić ramkę, w której się znajduje.
Nie rozumiem, dlaczego w ogóle potrzebujesz układu ramek. Bez tego obraz i tak po prostu wypełniłby ekran.
EDYCJA: tak, przepraszam, xml to wysokość widoku obrazu.
źródło
ImageView
, nie jest to tak ewidentne w Twojej odpowiedzi :)użyj tego androida: scaleType = "fitXY" w imageview xml
źródło
Musisz zapewnić kształt wokół widoku obrazu, aby uzyskać lepszy wygląd.
Oto czego użyłem:
źródło