जवाबों:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
एक गतिविधि पर कहा जाता है, इसे परिदृश्य में बंद कर दिया जाएगा। एक्टिविटीइन्फो क्लास में अन्य झंडों के लिए देखें। आप इसे चित्र पर वापस ला सकते हैं या इसे सेंसर / स्लाइडर चालित बना सकते हैं।
अधिक जानकारी यहां: http://www.devx.com/wireless/Article/40792
GetConfiguration रिटर्न और क्या setRequestedOrientation चाहता है के बीच के अंतर से सावधान रहें - वे दोनों अंतर हैं, लेकिन वे विभिन्न निरंतर परिभाषाओं से आ रहे हैं।
यहां 180 डिग्री फ़्लिप की अनुमति देते हुए वर्तमान ओरिएंटेशन को लॉक करने का तरीका बताया गया है
int currentOrientation = getResources().getConfiguration().orientation;
if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
यह रिवर्स पोर्ट्रेट और रिवर्स लैंडस्केप वाले उपकरणों पर काम करता है।
उन्मुखीकरण बंद करना:
int orientation = getActivity().getRequestedOrientation(); int rotation = ((WindowManager) getActivity().getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation(); switch (rotation) { case Surface.ROTATION_0: orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; break; case Surface.ROTATION_90: orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; break; case Surface.ROTATION_180: orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; break; default: orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; break; } getActivity().setRequestedOrientation(orientation);
अनलॉक उन्मुखीकरण:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
मुझे ऐसा ही मामला लग रहा था। मैं किसी भी अभिविन्यास का समर्थन करना चाहता था, लेकिन मुझे वर्कफ़्लो में एक निश्चित बिंदु के बाद वर्तमान अभिविन्यास में रहने की आवश्यकता थी। मेरा समाधान था:
संरक्षित वर्कफ़्लो के प्रवेश पर:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
संरक्षित वर्कफ़्लो से बाहर निकलने पर:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
टैबलेट के लिए समर्थन के साथ @pstoppani उत्तर के लिए वैकल्पिक (@ststani उत्तर के साथ, यह केवल उपकरणों पर काम करेगा> 2.2)
पर आधारित Samsung Galaxy SIII
औरSamsung Galaxy Tab 10.1
public static void lockOrientation(Activity activity) {
Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int tempOrientation = activity.getResources().getConfiguration().orientation;
int orientation = 0;
switch(tempOrientation)
{
case Configuration.ORIENTATION_LANDSCAPE:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
break;
case Configuration.ORIENTATION_PORTRAIT:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270)
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
activity.setRequestedOrientation(orientation);
}
||
में जाँच रहा है । इसलिए मैं 2 संदेह है :::: पहले, क्यों के बजाय दूसरे मामले में और एक अन्य कारण है कि 90 नहीं 180 से 0 डिग्री जाँच ?? rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90
rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270
ROTATION_0
ROTATION_180
||
जाँच उपकरण बनाम परिदृश्य चित्र के आधार पर दो संभावित डिफ़ॉल्ट झुकावों को संभाल रहे हैं।
यहाँ मेरा कोड है, आप इन तरीकों में से एक को अपनी स्क्रीन से लॉक कर सकते हैं और एक बार कार्य को अनलॉक करने के बाद अनलॉक कर सकते हैं।
/** Static methods related to device orientation. */
public class OrientationUtils {
private OrientationUtils() {}
/** Locks the device window in landscape mode. */
public static void lockOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
/** Locks the device window in portrait mode. */
public static void lockOrientationPortrait(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/** Locks the device window in actual screen mode. */
public static void lockOrientation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
// Copied from Android docs, since we don't have these values in Froyo 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
// Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
if (!BuildVersionUtils.hasGingerbread()) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90){
if (orientation == Configuration.ORIENTATION_PORTRAIT){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270)
{
if (orientation == Configuration.ORIENTATION_PORTRAIT){
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
/** Unlocks the device window in user defined screen mode. */
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
यहाँ ऊपर @pstoppani के उत्तर का Xamarin रूपांतरण है।
नोट: यह एक फ़्रैगमेंट के लिए है, गतिविधि को बदलें । इसके साथ । यदि किसी गतिविधि के भीतर उपयोग किया जाता है।
public void LockRotation()
{
ScreenOrientation orientation;
var surfaceOrientation = Activity.WindowManager.DefaultDisplay.Rotation;
switch (surfaceOrientation) {
case SurfaceOrientation.Rotation0:
orientation = ScreenOrientation.Portrait;
break;
case SurfaceOrientation.Rotation90:
orientation = ScreenOrientation.Landscape;
break;
case SurfaceOrientation.Rotation180:
orientation = ScreenOrientation.ReversePortrait;
break;
default:
orientation = ScreenOrientation.ReverseLandscape;
break;
}
Activity.RequestedOrientation = orientation;
}
public void UnlockRotation()
{
Activity.RequestedOrientation = ScreenOrientation.Unspecified;
}
यह उपयोग किए जाने से पहले एक अलग दृष्टिकोण के साथ चला गया है, लेकिन बिना उपयोग के हो सकता है।