7

मेरे पास कई नेस्टेड लेआउट हैं जो मैं कोड में मांग पर 90 डिग्री घुमाने की कोशिश कर रहा हूं। मुझे बस ठीक काम करने वाली चीज़ों का सेटरोटेशन हिस्सा मिला है, लेकिन दुर्भाग्यवश चीजें घूर्णन के साथ काफी सही आकार में नहीं आ रही हैं। इन तत्वों की चौड़ाई match_parent पर सेट की गई है, और रोटेशन के बाद भी यह पैरेंट चौड़ाई से मेल खाती है, माता-पिता की ऊंचाई नहीं कि यह मेल खाना चाहिए।setRotation का उपयोग करने के बाद लाइनर में match_parent को रीफ्रेश कैसे करें?

एक्सएमएल

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/mainLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="link.basiclifecounter.LifeCounter" 
    android:background="#CC00CC"> 

    <LinearLayout 
     android:id="@+id/topPlayers" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="2" 
     android:orientation="vertical" 
     android:background="#CC0000"> 

     <RelativeLayout 
      android:id="@+id/p3" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1"> 

     **A bunch of stuff in here** 

     </RelativeLayout> 

     <RelativeLayout 
      android:id="@+id/p2" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1"> 

     **A bunch of stuff in here** 

     </RelativeLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/bottomPlayer" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:background="#00CC00"> 

     <RelativeLayout 
      android:id="@+id/p1" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1"> 

     **A bunch of stuff in here** 

     </RelativeLayout> 
    </LinearLayout> 
</LinearLayout> 

रोटेशन जावा कोड

view.findViewById(R.id.topPlayers).setRotation(90); //Rotate the entire top box 
view.findViewById(R.id.p3).setRotation(180); //Flip one side so both players face outwards 

This picture से पहले रोटेशन होता छवि को दर्शाता है।

This picture रोटेशन के बाद छवि दिखाता है।

जैसा कि आप देख सकते हैं, पूरे बॉक्स को इसकी ऊंचाई के बाद घुमाया गया है और चौड़ाई पहले ही सेट हो चुकी है। अज्ञात संस्करण में चौड़ाई (match_parent) पूर्ण स्क्रीन होनी चाहिए और ऊंचाई (layout_weight = 2) स्क्रीन के 2/3s होना चाहिए। यह ठीक काम करता है। समस्या घूमने के बाद होती है, ये आकार नए घूर्णन को बदलने और बदलने के बजाए समान रहते हैं।

मैंने समस्या निवारण में मदद के लिए कुछ उज्ज्वल पृष्ठभूमि रंगों में फेंक दिया, कि जो गुलाबी आप देख रहे हैं वह मुख्य लीनियरआउट में है, न कि घुमाए गए किसी भी लेआउट में।

मैंने कोड के बजाय xml में घूर्णन को शामिल करने का प्रयास किया, और बाद के चित्र के समान सटीक परिणाम प्राप्त किए, इसलिए यह स्पष्ट रूप से कुछ है जो मुझे समझ में नहीं आता कि लेआउट चौड़ाई कैसे प्राप्त करें मुझे चाहिए। क्या मैं रोटेशन के साथ लेआउट_वेट का प्रभावी ढंग से उपयोग नहीं कर सकता?

+0

क्या इसके लायक मैं इस का समाधान किया था कभी नहीं के लिए।मैंने रोटेशन के साथ और बिना अलग कस्टम एक्सएमएल फाइलें तैयार कीं और एक कस्टम वर्टिकल टेक्स्टव्यू का उपयोग करके सुझाव दिया [यहां] (http://stackoverflow.com/questions/1258275/vertical-rotated-label-in-android) मेरा टेक्स्ट प्राप्त करने के लिए घुमाना। एक आकर्षण की तरह काम करना, भले ही एकाधिक एक्सएमएल फाइलें एक साधारण रोटेशन की तुलना में थोड़ा उलझन में हों। –

+0

मुझे अभी तक एक सुंदर जवाब नहीं है, लेकिन मुझे लगता है कि यह दृश्य के माता-पिता के आयाम प्राप्त करके और दृश्य के आयामों को मिलान करने के लिए प्राप्त किया जा सकता है। आईई, 'int चौड़ाई = ((देखें) myView.getParent())। GetWidth(); ',' myView.setLayout पैराम (नया फ्रेमलाउटआउट .आउटआउट (चौड़ाई, ऊंचाई)); '। मुझे स्थिति के साथ कुछ समस्याएं हैं, लेकिन मुझे लगता है कि मैं 'setPivotX()' और 'setX() 'के कुछ संयोजन वाले लोगों को दूर कर सकता हूं। – VinceFior

+0

लेआउट पैरामीटर की ऊंचाई और वजन मानों को स्वैप करें और जब आप इसे घुमाते हैं तो दृश्य के लेआउट पैरा को रीसेट करें। –

उत्तर

1

मुझे लगता है कि आपको इस Stack Overflow question में उल्लिखित एक ही समस्या है। ऐसा लगता है कि लेआउट उद्देश्यों के लिए रोटेशन को ध्यान में नहीं रखा जाता है। दूसरे शब्दों में, लेआउट तब होता है जब घूर्णन से पहले रखे गए विचारों के साथ घूर्णन होता है।

यह answer उसी प्रश्न के लिए आपकी मदद कर सकता है।

आप माप को मैन्युअल रूप से समायोजित भी कर सकते हैं। किसी भी तरह से थोड़ा गन्दा है, लेकिन मुझे लगता है कि यह वही तरीका है।


आप एक वैकल्पिक लेआउट लोड कर सकते हैं जो रोटेशन करने की बजाए आपकी इच्छानुसार व्यवहार करेगा। (नीचे लेआउट और छवि देखें।) आप प्रोग्रामेटिक रूप से लेआउट पैरामीटर को बदलकर एक ही परिणाम प्राप्त कर सकते हैं।

यहां एक project on GitHub है जो प्रोग्रामिंग के घूर्णन को प्रदर्शित करता है। दृश्य तीन सेकंड विराम के बाद घूमता है।

मुझे आशा है कि आपको यह उपयोगी लगेगा।

enter image description here

alternate.xml

<LinearLayout 
     android:id="@+id/topPlayers" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="2" 
     android:background="#CC0000" 
     android:orientation="horizontal"> 

     <RelativeLayout 
      android:id="@+id/p3" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:orientation="vertical" 
      android:rotation="90"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="p3" 
       android:textSize="48sp" /> 
     </RelativeLayout> 

     <RelativeLayout 
      android:id="@+id/p2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#0000CC" 
      android:gravity="center" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:rotation="-90" 
       android:text="p2" 
       android:textSize="48sp" /> 
     </RelativeLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/bottomPlayer" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#00CC00" 
     android:orientation="vertical"> 

     <RelativeLayout 
      android:id="@+id/p1" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="p1" 
       android:textSize="48sp" /> 
     </RelativeLayout> 
    </LinearLayout> 

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