एक ImageView के आसपास अवांछित पैडिंग


142

मुझे अपनी सभी गतिविधियों / विचारों में एक हेडर ग्राफिक शामिल करना होगा। हेडर वाली फाइल को हेडर। 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>

android:background="#00FF00"हरे (हरे) पर ध्यान दें , यह सिर्फ दृश्य उद्देश्य है।

मैं उन्हें इस तरह अपने विचारों में शामिल करता हूं:

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

इसलिए, जब मैं वास्तव में इसे आज़माता हूं, तो परिणाम बाईं छवि की तरह दिखता है, इसके बजाय इसे (दाएं) जैसा दिखना चाहिए:

हरी सीमा पर ध्यान दें

(१) यह - नारंगी - भाग छवि / छवि में है प्रश्न
(२) अप्रकाशित हरी सीमा। नोट: आम तौर पर, हरा क्षेत्र पारदर्शी होगा - यह केवल हरा है क्योंकि मैंने सेट किया है background

शीर्ष पर छवि के चारों ओर हरी सीमा पर ध्यान दें; यह ImageView का हिस्सा है और मैं अभी यह पता नहीं लगा सकता कि यह वहां क्यों है या मैं इससे कैसे छुटकारा पा सकता हूं। यह सभी पैडिंग और मार्जिन 0 पर सेट करता है (लेकिन परिणाम समान है जब मैं उन्हें छोड़ देता हूं)। छवि एक 480x64px jpeg * है और मैंने इसे रेस / ड्रॉबल ( drawable-Xdpiहालांकि किसी में नहीं) में डाल दिया है ।

(* जेपीईजी, क्योंकि ऐसा लगता है कि मैं पुरानी पीएनजी गामा समस्या पर लड़खड़ा गया हूं - पहले मैंने हरे रंग की सीमा को चित्र के रूप में एक ही नारंगी बनाकर समस्या के चारों ओर काम किया, और रंग मेल नहीं खाते।)

मैंने इसे अपनी htc इच्छा / 2.2 / बिल्ड 2.33.163.1 और एमुलेटर पर आजमाया। इसके अलावा मैंने किसी को # android-dev में समस्या का वर्णन किया; वह समस्या को पुन: पेश कर सकती थी लेकिन उसका कोई स्पष्टीकरण नहीं था। निर्माण लक्ष्य 1.6 है।

अपडेट @tehgoose: यह कोड सटीक समान शीर्ष + निचला गद्देदार परिणाम देता है।

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

नकारात्मक मार्जिन और / या गद्दी मूल्यों हो सकता है भी काम - android:layout_margin="-10dp",android:padding="-10dp"
Samis

जवाबों:


442

आखिरकार!

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

adjustViewbounds विशेषता चाल किया:

इसे सही पर सेट करें यदि आप चाहते हैं कि ImageView अपने ड्रॉबल के पहलू अनुपात को संरक्षित करने के लिए इसकी सीमा को समायोजित करे।

मैं यहाँ पर ठोकर खाई । आपकी सहायताके लिए धन्यवाद!


7
मुझे भी यही समस्या है, लेकिन इस समाधान का कोई असर नहीं हुआ।
मार्टी मिलर

4
वाह ... उस विशेषता के बिना स्क्रीन घनत्व के आधार पर अवांछित पैडिंग जोड़ा जा रहा था, इसलिए यह केवल कुछ उपकरणों पर हो रहा था। इसने मुझे पागल कर दिया क्योंकि छवि उन सभी उपकरणों पर ठीक लग रही थी जो मेरे खुद के हैं, फिर जब मैं इसे किसी मित्र के डिवाइस पर आज़माऊंगा, तो यह बकवास जैसा लग रहा था। धन्यवाद।
15

देवताओं का शुक्र है कि मैंने अपना पहला एटेम्पट एंड्रॉइड के कुछ पहनने के लिए बग को हल करने की कोशिश से स्विच किया। मेरा मानना ​​है कि यह समस्या एंड्रॉइड से सामान बदलने वाले कुछ निर्माताओं में शुरू हुई और फिर उन्हें अगले संस्करणों में इसे हल करने के लिए एक संपत्ति डालनी होगी।
रत्न टाटा

अफसोस की बात है कि यह कम एपिस, 16 और 17 के लिए कम से कम काम नहीं करता है।
लूजर

1
वाह यह वही है जो मैं देख रहा था, मैं कुछ घंटों के लिए अपना सिर खरोंच रहा था, यहां तक ​​कि अपने लेआउट को अमान्य करने की कोशिश कर रहा था और यह छवि की ऊंचाई / चौड़ाई सेट कर रहा था। इस तरह के एक सरल समाधान जो स्केलटेप की आवश्यकता के बिना पूरी तरह से काम करता है।
कोड़ीअंगेल

39
android:scaleType="fitXY"

इससे मेरा काम बनता है।


3
scaleType="fitXY"हालांकि कुछ अलग करता है: यह छवि के पहलू अनुपात को बदलता है, जिससे विकृति पैदा होती है। यह कभी-कभी स्वीकार्य हो सकता है, उदाहरण के लिए एक अमूर्त पृष्ठभूमि छवि के लिए।
स्टेफ्स

1
मैंने एंड्रॉइड का उपयोग करके पहलू अनुपात को नियंत्रित किया: चौड़ाई और एंड्रॉइड: ऊंचाई, और स्केलपाइप = "fitXY" ने मेरे लिए वांछित पहलू अनुपात के साथ छवि दृश्य को भर दिया, यह कम से कम मेरा अनुभव था। आपके सहयोग के लिए धन्यवाद।
बद्र

यह काम करता है, लेकिन छवि स्पष्ट, असंतुलित है, फसली है
'

1
बिल्कुल नहीं, लेकिन android: scaleType = "fitEnd" ने जादू की तरह काम किया।
लाइब्रेरियन

मैं का एक संयोजन पाया android:adjustViewBounds="true"और android:scaleType="fitXY"क्या मैं अपने लेआउट में ImageViews संरेखित करने के लिए आवश्यक था। चित्र सिर्फ एक पिक्सेल या दो (एक हाय-रेस डिस्प्ले पर बहुत छोटे) द्वारा बंद थे adjustViewBoundsscaleTypeदृश्य सीमा को समायोजित करने के बाद छवि के अंतिम स्केलिंग को बाध्य करने के लिए लगता है जोड़ना जो छवि को नए सीमा के पूर्ण आकार के पैमाने पर मजबूर करता है।
जेफ लॉकहर्ट

3

यह छवि पहलू अनुपात के साथ करना है। डिफ़ॉल्ट रूप से, सिस्टम छवि स्रोत के मूल पहलू अनुपात को रखता है। जो ज्यादातर मामलों में लेआउट में निर्दिष्ट लेआउट या आयाम से बिल्कुल मेल नहीं खाता है। इसलिए,

  1. या तो निर्दिष्ट लेआउट को फिट करने के लिए छवि का आकार बदलें, या
  2. android:scaleTypeछवि को फिट करने के लिए उपयोग करें । उदाहरण के लिए, आप निर्दिष्ट कर सकते हैंandroid:scaleType="fitXY"

3

उन अतिरिक्त पैडिंग को ऑटोजेनर किया गया है क्योंकि एंड्रॉइड मूल पहलू अनुपात प्राप्त करने की कोशिश करेगा। कृपया नीचे प्रयास करें

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

0

हो सकता है आप दे सकते हैं specific height to imageView say 50dp or 40dpऔर adjust image to make green borderगायब हो सकते हैं ।

उदाहरण के लिए: android:layout_height="40dp"


लेआउट_अवेशन = "480px" और लेआउट_हाइट = "64px" सेट करने से वह परिणाम मिलता है जो मैं चाहता हूं, लेकिन पिक्सेल बहुत व्यावहारिक नहीं हैं। मैं ईमानदारी से समझ में नहीं आता कि कैसे dp में अनुवाद करता है।
स्टेप्स

आप पिक्सेल के रूप में आप डीपी का उपयोग करना चाहिए। बस इतना ही वे हैं; स्वतंत्र पिक्सेल प्रदर्शित करें। लेकिन यह काम करता है।
उदयकिरण

dp / dip का अर्थ है घनत्व स्वतंत्र पिक्सेल; जहां तक ​​मैं समझता हूं, यह विभिन्न घनत्वों को कवर करता है, लेकिन (निश्चित रूप से) अलग-अलग स्क्रीन आकार नहीं। सभी मैं चाहता हूं कि छवि 100% स्क्रीन की चौड़ाई के पैमाने पर हो और ऊंचाई को छोड़ दें ताकि अनुपात रखा जाए।
stefs

0
android:layout_height="wrap_content"

आपको इसे "fill_parent" में बदलने की आवश्यकता है

आपको अपनी छवि को स्केल करने की भी आवश्यकता हो सकती है इसलिए यह जिस तामचीनी में है उसे भरने के लिए यह सही अनुपात होगा।

मुझे समझ नहीं आ रहा है कि आपको फ्रेम लेआउट की आवश्यकता क्यों है। इसके बिना, आपकी छवि बस स्क्रीन वैसे भी भर जाएगी।

संपादित करें: हाँ, क्षमा करें, छवि के लिए xml ऊंचाई है।


1
जोड़ने की एकमात्र बात यह है कि उसे लेआउट की ऊँचाई निर्धारित करने की आवश्यकता है ImageView, यह आपके उत्तर में स्पष्ट नहीं है :)
ernazm

मैंने इसे आसपास के लेआउट के बिना भी आज़माया, कुछ भी नहीं बदलता है। इसके अलावा, वर्तमान छवि सिर्फ एक प्लेसहोल्डर है - जल्द ही अतिरिक्त तत्व होंगे (आसपास के लेआउट को सही ठहराना)। मुझे स्क्रीन से मेल खाने वाली छवि नहीं चाहिए, मैं इसे वहीं चाहता हूं, सबसे ऊपर।
10

यह देखने के लिए डबल चेक करें कि आपकी छवि में ऊपर और नीचे खाली जगह है या नहीं। यदि नहीं तो एंड्रॉइड का उपयोग करके इमेजव्यू ऑब्जेक्ट को स्केल करने का प्रयास करें: स्केल टाइप = ""। वहाँ एक होना चाहिए जो आप की तलाश में है।
NotACleverMan


-1

बेहतर लुक देने के लिए आपको इमेजव्यू के आसपास आकार प्रदान करना होगा।

यहाँ मैंने क्या उपयोग किया है:

<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
रुको! मैंने पहले से ही आकृतियों (टैब बैकग्राउंड के लिए) के साथ काम किया है, लेकिन ईमानदारी से, मुझे समझ नहीं आ रहा है कि मैं यहाँ कैसे लागू करूँ।
बजे

@ श्नाइल: दो आकृतियाँ बनाएँ। xml फ़ाइल, और एक चयनकर्ता। xml। छवि पृष्ठभूमि को selector.xml फ़ाइल के रूप में लागू करें। चयनकर्ता फ़ाइल में दो राज्य केंद्रित / चयनित और सामान्य स्थिति प्रदान करते हैं।
ज़ोम्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.