2012-10-09 43 views
7

मैं अपने कस्टम बटन पर पृष्ठभूमि छवियों को सेट कर रहा हूं। मैंने अपने ऐप के लिए एक स्क्रीनशॉट बनाया और बताया कि जब मैं बटन की चौड़ाई और ऊंचाई के लिए "wrap_content" का उपयोग कर रहा हूं, तो बटन बढ़ाया जाता है। जब मैं डीपी में आकार तय कर रहा हूं, तो यह अच्छा दिखाई देगा (उदा: मेरे एमडीपीआई फ़ोल्डर में मेरे पास 48x48px आइकन हैं, इसलिए मैंने चौड़ाई और ऊंचाई में 48 डीपी लगाया)। क्या आप कृपया मुझे समझा सकते हैं क्यों?बटन पृष्ठभूमि छवियों को बढ़ाया गया (wrap_content या डीपी उपयोग)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/definition_layout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:padding="5dp" 
android:layout_alignParentTop="true" > 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/buttons" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="5dp" > 

    <Button 
     android:id="@+id/addToFavorites" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/favorites_button" /> 

    <Button 
     android:id="@+id/fontup" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/fontup_button" /> 

    <Button 
     android:id="@+id/fontdown" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/fontdown_button" /> 

    <Button 
     android:id="@+id/comment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/comment_button" /> 

    <Button 
     android:id="@+id/speak" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/speak_button" /> 
    </LinearLayout> 

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/buttons"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/image_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    <WebView 
     android:id="@+id/webView1" 
     android:layout_below="@id/image_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    </LinearLayout> 
    </ScrollView> 

    </RelativeLayout> 

उपरोक्त कोड मेरी XML फ़ाइल दिखाता है। आप अपनी समस्या के लिए एक स्क्रीनशॉट देखने के लिए इस लिंक पर देख सकते हैं: https://www.dropbox.com/s/phnxt5p335ltqef/buttons_icon_altered.png

उत्तर

4

यह फैला दिखाई देता है क्योंकि "wrap_content" का अर्थ है एंड्रॉयड छवि को फैलाने के संलग्न लेआउट के अनुरूप बनाने होंगे।

आपके मामले में, रैखिक लेआउट में बटन लेआउट के भीतर जितना अधिक स्थान ले सकते हैं उतना अधिक ले जाएगा। इसलिए जब तक आप बटन के लिए ऊंचाई और चौड़ाई निर्धारित नहीं करते हैं, वे रैखिक लेआउट द्वारा कब्जा कर लिया गया स्थान भरने के लिए बाहर निकल जाएंगे और इसके परिणामस्वरूप, उनकी पृष्ठभूमि छवियां बटन के साथ भी फैल जाएंगी।

लेकिन यदि आप बटन का आकार 48 डीपी पर सेट करते हैं, तो छवियों को विस्तारित नहीं करना होगा क्योंकि वे आकार में 48px भी हैं और इसलिए वे अच्छे लगेंगे। https://developer.android.com/guide/topics/ui/declaring-layout.html

और कैसे कई एंड्रॉयड स्क्रीन आकार और संकल्प के लिए अपनी लेआउट और संपत्ति के प्रबंधन के लिए सीखने के लिए:

https://developer.android.com/guide/practices/screens_support.html

यहाँ लेआउट बारे में अधिक जानकारी के लिए उत्कृष्ट आधिकारिक डेवलपर डॉक्स के माध्यम से जाओ

+0

वे मेरे सैमसंग गैलेक्सी टैब 10 पर अच्छा लग रहे हैं।1 टैबलेट (एमडीपीआई स्क्रीन होने पर), लेकिन जब मैं एक ही मोबाइल एप्लिकेशन पर एक एमडीपीआई स्क्रीन वाला एक ही एप्लीकेशन खोलूंगा, तो वे एक बड़े आकार पर कब्जा करेंगे या वे एक अच्छी जगह लेंगे क्योंकि "डीपी" गतिशील इकाई है? – Anthony

+0

हां। एक भी क्योंकि स्क्रीन का आकार तस्वीर में आता है। आपके टैब में एक अतिरिक्त बड़ी आकार की स्क्रीन होगी। उस स्थिति में, छवि को प्रत्येक दिशा में आनुपातिक रूप से बढ़ाया जा रहा है, इसलिए यह अच्छा लग रहा है। –

+0

तो टैबलेट और मोबाइल फोन (एक ही डीपीआई है) लेकिन अलग-अलग स्क्रीन आकार उसी 48x48px आइकन का उपयोग करेंगे? – Anthony

17

आप मिनीविड्थ & मिनट से 0 डीपी

सेट करके बटन पृष्ठभूमि खिंचाव से बच सकते हैं 210
+0

अपने कोड को थोड़ा स्पष्टीकरण दें। –

+4

मेरे लिए काम नहीं किया –

+2

यह सही जवाब है! – Randy

7

यह बहुत आसान है:

  • उपयोग ImageButtonके बजाय बटन
  • अशक्त
  • सेट src विशेषता
  • सेट करने के लिए पृष्ठभूमि विशेषता निर्धारित स्केल टाइप विशेषता को centerInside

कार्य उदाहरण:

<ImageButton 
android:id="@+id/my_awesome_button" 
android:scaleType="centerInside" 
android:background="@null" 
android:gravity="center" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:src="@drawable/my_awesome_drawable"/> 

नोट: तुम भी "wrap_content" के बजाय एक डीपी मान का उपयोग कर सकते हैं।

मुझे उम्मीद है कि यह मदद करता है।