21

मेरे ऐप में एक टुकड़ा है जिसमें FragmentPagerAdapter चार टुकड़े (ViewPagerIndicator लाइब्रेरी का उपयोग कर) के साथ एक ही गतिविधि है। इन टुकड़ों में से एक में एक अलग पोर्ट्रेट और लैंडस्केप लेआउट दोनों के लिए डिज़ाइन किया गया है, अन्य तीनों को चित्र अभिविन्यास के लिए तय करने की आवश्यकता नहीं है।एक टुकड़े में रोटेशन/परिदृश्य को अनुमति दें

मेरे सोचा प्रकट में android:configChanges="orientation" सेट और सभी टुकड़े की onResume() में getActivity().setRequestedScreenOrientation() कहते हैं, उनमें से तीन में, लेकिन एक रोटेशन की अनुमति देने की जरूरत है कि में SCREEN_ORIENTATION_UNSPECIFIED को SCREEN_ORIENTATION_PORTRAIT को ताला लगा था, लेकिन यह काम नहीं करता। ऐप पोर्ट्रेट मोड में बना हुआ है।

क्या यह हासिल करने का कोई तरीका है?

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

उत्तर

31

प्रत्येक खंड में setUserVisibleHint() ओवरराइड करें।

चित्र में केवल टुकड़े:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(isVisibleToUser) { 
     Activity a = getActivity(); 
     if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 
} 
चित्र/परिदृश्य टुकड़ा में

:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(isVisibleToUser) { 
     Activity a = getActivity(); 
     if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); 
    } 
} 

इस पूरी गतिविधि एक टुकड़ा में बारी बारी से करने की अनुमति देगा, लेकिन में चित्र के लिए इसे ठीक अन्य शामिल हैं।

+1

मैं wouldnt 'setMenuVisibility' ओवरराइड' ओवरराइड setUserVisible' वे एक ही समय में दोनों सेट होते हैं, इसलिए दोनों एक ही काम करना चाहिए, बस का उपयोग कर बेहतर पढ़ता 'UserVisible' –

2

मुद्दा अगर आप सक्षम configChanges आप तो अपनी गतिविधि/टुकड़े में विधि को संभालने की ज़रूरत है।

मतलब यह है कि अगर आपने getActivity().setRequestedScreenOrientation() को आग लगा दी है तो आपको लैंडस्केप लेआउट को फिर से भरने के लिए मैन्युअल रूप से setContentView() पर कॉल करना होगा।

'अनसुलझा' सेटिंग भी परिदृश्य में नहीं बदलेगी, यह केवल वही रहेगा जहां यह है।

मैं पोर्ट्रेट टुकड़ों के लिए getActivity().setRequestedScreenOrientation(SCREEN_ORIENTATION_PORTRAIT) का उपयोग करूंगा। परिदृश्य टुकड़ों के लिए और getActivity().setRequestedScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE)

यह गतिविधि लेआउट को फिर से भर देगा, जिसका अर्थ है कि आपको उस अंतिम विज़िटर पेज का ट्रैक रखने की आवश्यकता होगी, यह सुनिश्चित करने के लिए कि आप यह दिखाते हैं कि लेआउट को उस खंड में वापस डिफ़ॉल्ट रूप से वापस करने के बाद फिर से बनाया गया है उपयोगकर्ता को दिखाया गया है और खंड onResume() कहा जाता है।

यह स्पष्ट रूप से होने वाला है, लेकिन यह संभव है।

+0

धन्यवाद, और SCREEN_ORIENTATION_UNSPECIFIED – Garcon

8

एक बात है कि मेरे लिए काम किया बस डाल करने के लिए

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); 

टुकड़े से प्रत्येक के लिए OnCreateView() तरीकों के शीर्ष पर था। आप उचित SCREEN_ORIENTATION स्थिर के साथ ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR को प्रतिस्थापित करना चाहते हैं।

एक बार मैंने ऐसा किया, यह आईसीएस पर पूरी तरह से काम किया। आपको ईवेंट को विशिष्ट गतिविधि के लिए मैनिफेस्ट समायोजित करना नहीं है।

0
टुकड़ा आप बस अपने onCreate/onCreateView getActivity() setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) में जोड़ने के सेट करना चाहते हैं में

। अन्य टुकड़ों में आप बहु अभिविन्यास जोड़ने की अनुमति देना चाहते हैं getActivity()। SetRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); configChanges के दुरुपयोग पर मुझे सही करने के लिए

1
Write some code in "AndroidManifest.xml" on the particular activity tag. 
 android:configChanges="orientation|screenSize". 

And Write code in Fragment on "onCreateView" method,  
for Portrait: 
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);   
setRetainInstance(true); 

for Lansscape: 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    setRetainInstance(true); 
संबंधित मुद्दे