Bir ImageView çevresinde istenmeyen dolgu


142

Tüm aktivitelerime / görüşlerime bir başlık grafiği eklemem gerekiyor. Üstbilgiye sahip dosyaya header.xml adı verilir:

<?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>

android:background="#00FF00"(Yeşil) not edin , sadece görselleştirme amaçlıdır.

Onları böyle görüşlerime ekliyorum:

<?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" />
  (...)

Yani, gerçekten denediğimde, sonuç neye benzemesi gerektiği yerine sol görüntüye benziyor (sağda):

yeşil sınırı not et

(1) Bu - turuncu - kısım, söz konusu resim / ImageView'dur
(2) Sevilmeyen yeşil kenarlık. not: normalde, yeşil alan şeffaf olurdu - Ben sadece çünkü yeşil ayarlayın background.

Üstteki görüntünün etrafındaki yeşil kenarlığa dikkat edin; ImageView'in bir parçası ve neden orada olduğunu veya ondan nasıl kurtulabileceğimi anlayamıyorum. Tüm dolguları ve kenar boşluklarını 0 olarak ayarlar (ancak bunları atladığımda sonuç aynıdır). Görüntü 480x64px jpeg * ve res / drawable içine koydum ( drawable-Xdpigerçi birinde değil ).

(* jpeg, çünkü eski png gama problemi üzerinde tökezledim - ilk önce yeşil kenarlığı resim ile aynı turuncu hale getirerek problemi çözdüm ve renkler eşleşmedi.)

Htc desire / 2.2 / Build 2.33.163.1 ve emülatörde denedim. Ayrıca ben sorunu # android-dev birine anlattı; Sorunu yeniden üretebilirdi ama hiçbir açıklaması yoktu. yapı hedefi 1.6.

update @tehgoose: bu kod aynı üst + alt dolgulu sonucu verir.

<?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>

Negatif marj ve / veya dolgu değerleri de işe yarayabilir - android:layout_margin="-10dp",android:padding="-10dp"
samis

Yanıtlar:


442

en sonunda!

<ImageView
  (...)
  android:adjustViewBounds="true" />

adjustViewbounds nitelik hile yaptı:

ImageView'ın çizilebilir en boy oranını korumak için sınırlarını ayarlamasını istiyorsanız bunu true olarak ayarlayın.

Burada tökezledim . yardımınız için teşekkürler!


7
Aynı problemim var, ama bu çözümün bir etkisi yoktu.
Marty Miller

4
Wow ... bu özellik olmadan ekran yoğunluğuna bağlı olarak istenmeyen dolgu ekleniyordu, bu yüzden sadece bazı cihazlarda oluyordu. Beni delirtti çünkü görüntü sahip olduğum tüm cihazlarda iyi görünüyordu, o zaman bir arkadaşımın cihazında denediğimde bok gibi görünüyordu. TEŞEKKÜR EDERİM.
DiscDev

Tanrıya şükür ben android bir şey bulmak için hata çözmeye çalışırken ilk denemeye geçmek. Bu sorunun bazı üreticilerin android'den bir şeyler değiştirmeye başladığına inanıyorum ve sonra sonraki sürümlerde çözmek için bir özellik koymak zorundalar.
Ratata Tata

Ne yazık ki bu en azından alt apis, api 16 & 17 için işe yaramaz.
Luoser

1
Vay canına, tam da aradığım şey bu, başımı birkaç saat çiziyordum, hatta düzenimi geçersiz kılmaya ve görüntünün yüksekliğini / genişliğini ayarlamaya çalıştım. ScaleType'a ihtiyaç duymadan mükemmel çalışan böyle basit bir çözüm.
CodyEngel

39
android:scaleType="fitXY"

Benim için çalışıyor.


3
scaleType="fitXY"farklı bir şey yapar: görüntünün en boy oranını değiştirerek bozulmaya yol açar. bu bazen kabul edilebilir, örneğin arka plan resmi için.
stefs

1
Ben android: width ve android: height kullanarak en boy oranını kontrol ettim ve scaleType = "fitXY" en azından benim deneyimim olan imageView benim için istenen en boy oranı ile doldurdu. Girdiniz için teşekkürler.
Badr

Çalışır, ancak görüntü
unpretty

1
Tam olarak değil android: scaleType = "fitEnd" sihir gibi çalıştı.
TheLibrarian

Bir kombinasyon buldum android:adjustViewBounds="true"ve android:scaleType="fitXY"ImageViews düzenimde hizalamak için gereken şeydi. Görüntüler yalnızca bir veya iki piksel (yüksek çözünürlüklü ekranda çok küçük) ile kapalıydı adjustViewBounds. Eklemek, scaleTypegörüntü sınırları ayarlandıktan sonra görüntünün son ölçeklendirilmesini zorlar gibi görünür; bu da görüntüyü yeni sınırların tam boyutuna ölçeklendirmeye zorlar.
Jeff Lockhart

3

Görüntü en boy oranı ile ilgilidir. Varsayılan olarak, sistem görüntü kaynağının orijinal en boy oranını korur. Çoğu durumda, mizanpajda belirtilen mizanpaj veya boyutlarla tam olarak eşleşmez. Bu nedenle,

  1. Görüntünün boyutunu belirtilen düzene sığacak şekilde değiştirin veya
  2. Görüntüye android:scaleTypesığdırmak için kullanın . Örneğin,android:scaleType="fitXY"

3

Bu orijinal dolgu otomatik üretildi çünkü android orijinal en boy oranını almaya çalışacaktı. lütfen aşağıyı deneyin

scaletype = "fitCenter"
android:adjustViewBounds="true"
android:layout_height="wrap_content"

0

Belki verebilir specific height to imageView say 50dp or 40dpve adjust image to make green borderyok olabilirsiniz.

Örneğin: android:layout_height="40dp"


layout_width = "480px" ve layout_height = "64px" ayarını yapmak istediğim sonucu verir, ancak pikseller çok pratik değildir. dürüstçe nasıl dp çevirir anlamıyorum.
stefs

Dp'yi pikseller gibi kullanmalısınız. Hepsi bu; bağımsız pikselleri göster. ama işe yarıyor.
Udaykiran

dp / dip Yoğunluktan Bağımsız Piksel anlamına gelir; anladığım kadarıyla, farklı yoğunlukları kapsar, ancak (elbette) farklı ekran boyutlarını içermez. tüm istediğim görüntü% 100 ekran genişliğine ölçeklendirmek ve böylece oranlar korunur yüksekliği bırakın.
stefs

0
android:layout_height="wrap_content"

Bunu "fill_parent" olarak değiştirmeniz gerekiyor

Ayrıca görüntünüzü, içinde bulunduğu çerçeveyi doldurmak için doğru oran olacak şekilde ölçeklendirmeniz gerekebilir.

Orada çerçeve düzenine neden ihtiyacınız olduğunu anlamıyorum. Onsuz, görüntünüz zaten ekranı doldurur.

EDIT: evet, üzgünüm, xml görüntü görüntüleme yüksekliği.


1
Ekleyecek tek şey, düzen yüksekliğini ayarlaması gerektiğidir ImageView, cevabınızda o kadar da belirgin değil :)
ernazm

Ben de çevreleyen bir düzen olmadan denedim, hiçbir şey değişmez. ayrıca, mevcut görüntü sadece bir yer tutucudur - yakında ek öğeler olacaktır (çevredeki düzeni haklı çıkarır). görüntünün ekrana uymasını istemiyorum, sadece orada, üstte istiyorum.
stefs

Resminizde üstte ve altta boş alan olup olmadığını iki kez kontrol edin. Değilse android kullanarak imageview nesnesini ölçeklendirmeyi deneyin: scaleType = "". Aradığınıza uygun bir tane olmalı.
NotACleverMan


-1

Daha iyi bir görünüm için görüntü görünümü etrafında şekil vermeniz gerekir.

İşte ne kullandım:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--<gradient android:startColor="#FFFFFF" android:endColor="#969696"

    android:angle="270">
-->
<gradient android:startColor="#FFFFFF" android:endColor="#FFFFFF"

    android:angle="270">
</gradient>
    <stroke android:width="2dp" android:color="@color/graycolor" />
<corners android:radius="2dp" />
<padding android:left="5dp" android:top="5dp" android:right="5dp"
    android:bottom="5dp" />


2
çüş! zaten sekme arka planlar için şekillerle çalıştı, ama dürüst olmak gerekirse, ben burada nasıl uygulamak gerektiğini anlamıyorum.
stefs

@Schnalle: iki şekiller.xml dosyası ve bir selector.xml dosyası oluşturun. görüntü arka planını selector.xml dosyası olarak uygulayın. Seçici dosyasında odaklanmış / seçilmiş ve normal durum için iki durum sağlayın.
Zoombie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.