2011-03-08 17 views
8

एक गतिविधि में मैंने एक वीडियो विजेट (वीडियोव्यू या मीडियाप्लेयर को सर्फस व्यू से जुड़े) को एम्बेड किया है, जिस पर स्क्रीन घुमाए जाने पर आकार अनुकूलित किया जाना चाहिए। इस गतिविधि को TabHost में सामग्री के रूप में उपयोग किया जाता है।स्क्रीन घुमाए जाने पर वीडियो को पूर्णस्क्रीन में चलाने के लिए गतिविधि लेआउट को दोबारा बदलें

मेरे वर्तमान दृष्टिकोण

आदेश स्क्रीन रोटेशन मैं दो लेआउट चित्र के लिए एक और लैंडस्केप ओरिएंटेशन के लिए एक और (./res/layout और ./res/layout-land फ़ोल्डर में रखा) प्रदान की है संभाल करने में ।

इस दृष्टिकोण की समस्या यह है कि प्रत्येक रोटेशन के लिए एक नई गतिविधि बनाई गई है, इसलिए मैं उसी मीडियाप्लेयर (या वीडियो व्यू) => का उपयोग नहीं करता हूं, जब भी मैं स्क्रीन को घुमाने पर शुरुआत से वीडियो शुरू करता हूं। चूंकि वीडियो को वेब से स्ट्रीम किया जाता है, इसलिए दूसरी गतिविधि में वीडियो को पुनरारंभ करते समय इस स्थिति की तलाश करने के लिए वीडियो में स्थिति को स्टोर करने का कोई तरीका नहीं है।

मैं

करना चाहते हैं क्या मैं अनुवाद करने के लिए/पैमाने/गतिविधि के अंदर विचारों को छिपाने के स्क्रीन को घुमाने पर सक्षम होना चाहिए। विभिन्न स्क्रीन आकारों में अनुकूलित लेआउट रखने के लिए अनुवाद/स्केलिंग को लेआउट संगठन को बनाए रखने की आवश्यकता है।

Desired animation/layout

मेरे सवालों का

  • का अनुवाद कैसे/स्क्रीन के ऊपरी-बाएं स्थिति के लिए दृश्यों को स्थानांतरित करने के लिए?
  • एक दृश्य गायब होने के लिए स्क्रीन के बाहर देखें/अनुवाद कैसे करें छुपाएं?
  • स्केल/आकार कैसे बदलें इसके आकार को इसके आस-पास उपलब्ध स्थान पर समायोजित करने के लिए देखें?

  • कौन सा इंटरफ़ेस, इन परिवर्तनों को आग लगाने के लिए स्क्रीन रोटेशन के अधिसूचित होने के लिए मुझे कॉलबैक लागू करने की आवश्यकता है?

+1

+1 ........ –

उत्तर

9

मुझे अंततः इसे करने का अच्छा तरीका मिल गया। एंड्रॉइड प्रलेखन में यह निर्दिष्ट किया गया है कि जब आपको नई गतिविधि को पुनर्निर्माण किए बिना संशोधनों (अभिविन्यास, कीबोर्ड ...) को संभालने की आवश्यकता होती है तो आपको गतिविधि कक्षा के कॉन्फ़िगरेशन चेंज विधि को ओवरराइड करके इसे करना चाहिए। आपको अपनी गतिविधि की मैनिफेस्ट फ़ाइल में समझने योग्य संशोधनों को निर्दिष्ट करना होगा।

आप इस here के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

<activity android:name=".MyActivity" android:configChanges="orientation"></activity> 

और मेरे MyActivity गतिविधि के अंदर मैं निम्न विधि को शामिल किया है::

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     int visibility = View.VISIBLE; 
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      visibility = View.GONE; 
     } 
     getTabHost().getTabWidget().setVisibility(visibility); 
    } 
मेरे गतिविधि के लिए निम्नलिखित लेआउट के साथ

:

मेरे मामले में, मेरा गतिविधि प्रकट की तरह दिखता है

<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" /> 

    </LinearLayout> 

</TabHost> 

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

मुझे आशा है कि इससे आप में से कुछ की मदद मिलेगी। प्रश्न के बहुत अच्छे फ्रेमिंग के लिए

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