2013-08-29 5 views
7

में केंद्रित नहीं है, मुझे एहसास है कि यह शायद एक मामूली लेआउट सवाल है, लेकिन मुझे ऐसा लगता है कि मैं जिस तरह से महसूस करता हूं उसे बिना किसी कंटेनर लेआउट में लेयरिंग के बिना काम करना चाहता हूं। जो मैं करने की कोशिश कर रहा हूं वह एक छवि दृश्य स्थापित है जैसे कि निम्नलिखित शर्तें संतुष्ट हैं:एंड्रॉइड इमेज व्यू वजन के आकार का आकार पैरेंट लाइनरलाइट

  1. छवि दृश्य की चौड़ाई अपने माता-पिता की चौड़ाई (अब के लिए स्क्रीन चौड़ाई) का कुछ प्रतिशत है।
  2. छवि दृश्य स्क्रीन के भीतर क्षैतिज रूप से केंद्रित है।

मैंने एक एक्सएमएल लेआउट का उपयोग करके एक टेस्ट केस बनाया है, लेकिन व्यावहारिक रूप से मैं इन लेआउट और प्रोग्रामेटिक रूप से विचारों को बनाउंगा; मुझे नहीं लगता कि यह सही लेआउट को समझने के प्रयोजनों के लिए महत्वपूर्ण है।

मैं एंड्रॉइड लेआउट में वजन से कुछ हद तक परिचित हूं और आमतौर पर रिश्तेदार वज़न कारकों के साथ कई विचारों को लेआउट करने के लिए उनका उपयोग कैसे किया जाता है। स्थिति 1 को संतुष्ट करने के लिए, मैं एक कंटेनर रैखिकलाइट (क्षैतिज अभिविन्यास) बनाता हूं, अपना वजन सेट करें = 1, फिर मेरे छवि दृश्य को जो भी प्रतिशत चाहता है उसके वजन के साथ एम्बेड करें, 0.5 कहें। यह काम!

अगला, मैं छवि दृश्य को क्षैतिज रूप से स्क्रीन में केंद्रित होने के लिए समाप्त करना चाहता हूं। तो मैंने गुरुत्वाकर्षण को "केंद्र"/"केंद्र होरिज़ोंटल" पर सेट किया। यह वह जगह है जहां मैं फंस गया हूं, इससे कोई फर्क नहीं पड़ता कि मैं क्या गुरुत्वाकर्षण/लेआउट_ग्रैविटी सेटिंग्स चुनता हूं, यह हमेशा बाईं तरफ संरेखित होता है।

लेआउट फ़ाइल:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="1.0"> 
     <ImageView 
      android:src="@drawable/earth" 
      android:adjustViewBounds="true" 
      android:layout_width="0" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.5" 
      android:layout_gravity="center_horizontal" 
      android:id="@+id/imageView1" /> 
    </LinearLayout> 
</LinearLayout> 

परिणाम:

Resulting image aligned to the left

क्या मैं सच में हासिल करना चाहते हैं कुछ इस तरह है:

Desired result

लेकिन आदेश प्राप्त करने के लिए जितना मुझे इसलिए तरह मेरे imageView के दोनों तरफ वजन 0.25 के साथ दो डमी LinearLayouts डालने के लिए किया था:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="1.0"> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="0" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25"/> 
     <ImageView 
      android:src="@drawable/earth" 
      android:adjustViewBounds="true" 
      android:layout_width="0" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.5" 
      android:layout_gravity="center_horizontal" 
      android:id="@+id/imageView1" /> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="0" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25"/> 
    </LinearLayout> 
</LinearLayout> 

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

मुझे उम्मीद है कि मेरे पास लेआउट पर बेहतर कोई बेहतर समाधान होगा! आदर्श रूप से कुछ जहां मैं सिर्फ "गुरुत्वाकर्षण" सेट कर सकता हूं (हालांकि मैं इसे काम करने में सक्षम नहीं हूं), या क्षैतिज रैखिकलायआउट कंटेनर और वजन की आवश्यकता के बिना चौड़ाई निर्धारित करने का कुछ वैकल्पिक तरीका, क्योंकि उस कंटेनर के बिना मैं केंद्र कर सकता हूं क्षैतिज रूप से मेरे शीर्ष-स्तर लंबवत LinearLayout में।

धन्यवाद!

संपादित करें: मुझे अभी एहसास हुआ कि डमी पैडिंग लाइनरलाइट्स का उपयोग करके मेरे दूसरे लेआउट प्रयास में मैं दूसरे पैडिंग लीनियरलाउट (0 के वजन पर सेट कर सकता हूं) से दूर कर सकता हूं।25) और मेरी छवि दृश्य से पहले एक डमी पैडिंग लीनियरलाउट का उपयोग करें, क्योंकि वे माता-पिता में पूर्व निर्धारित वजन के सापेक्ष हैं। उदा .:

<LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="1.0"> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="0" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25"/> 
     <ImageView 
      android:src="@drawable/earth" 
      android:adjustViewBounds="true" 
      android:layout_width="0" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.5" 
      android:layout_gravity="center_horizontal" 
      android:id="@+id/imageView1" /> 
    </LinearLayout> 

अभी भी आदर्श समाधान नहीं है जिसे मैं उम्मीद कर रहा था।

उत्तर

7

आप बस अपने रैखिक लेआउट (imageView में नहीं)

करने के लिए android:gravity="center" जोड़ सकते हैं मुझे आशा है कि यह मदद करता है।

+0

शायद 'center_horizontal'? – gunar

+0

@ गुन्नर, नहीं, center_horizontal काम नहीं करता है। जैसा कि मुझे उम्मीद है कि ImageView के माता-पिता एक क्षैतिज एलएल केंद्र है केवल ऊर्ध्वाधर दिशा में है। – Camputer

+0

आवश्यक नहीं है क्योंकि लाइनरलेआउट ऊंचाई पहले से ही एंड्रॉइड पर सेट है: layout_height = "wrap_content" – Simo

0

ImageView की गुरुत्वाकर्षण केंद्र में नहीं है क्योंकि मूल रैखिकलायआउट क्षैतिज है।

आप पैरेंट लीनियरआउट के गुरुत्वाकर्षण को सेट करना चाहते हैं, जो कि अपने माता-पिता (लंबवत रैखिकलायआउट) के अंदर क्षैतिज रूप से केंद्र करेगा।

संबंधित मुद्दे