दिलचस्प पोस्ट
क्या प्रोग्रामेटिक रूप से JAXB को कॉन्फ़िगर करना संभव है? सेलेनियम, अजगर के साथ फ़ाइल कैसे अपलोड करें (चित्र) गतिशील रूप से LINQ क्वेरीज़ उत्पन्न सी ++: किसी संख्या के नज़दीकी बहु के ऊपर गोल करना System.in से लिंक स्कैनर को बंद करें मैं StringBuilder को कैसे साफ़ या खाली कर सकता / सकती हूं? PHP SimpleXML – एक्सपेथ नोड हटाएं किसी विशेष फ़ाइल एक्सटेंशन के लिए Android Intent फ़िल्टर? बास सरणी में कोई मूल्य शामिल है या नहीं एक ही मेज पर दो बार शामिल होने का सबसे अच्छा तरीका क्या है? मैं लोगों को वसंत MVC में XSS करने से कैसे रोकूं? हाइबरनेट के स्क्रॉल योग्य परिणामों का उपयोग करके 90 मिलियन रिकॉर्ड को धीरे-धीरे पढ़ा जा सके Google खाता लॉगआउट और रीडायरेक्ट SQL सर्वर 2008 में हस्तांतरण लॉग को कैसे देखें उद्देश्य सी नाम स्थान की टक्कर को हल करने का सबसे अच्छा तरीका क्या है?

एंड्रॉइड फोन पर अभिविन्यास की जांच करें

मैं एंड्रॉइड फोन लैंडस्केप या पोर्ट्रेट में कैसे देख सकता हूं?

वेब के समाधान से एकत्रित समाधान "एंड्रॉइड फोन पर अभिविन्यास की जांच करें"

मौजूदा कॉन्फ़िगरेशन, जैसा कि संसाधनों को कॉन्फ़िगरेशन ऑब्जेक्ट के रूप में उपलब्ध के रूप में उपलब्ध कराने के संसाधनों को निर्धारित करने के लिए इस्तेमाल किया गया है:

getResources().getConfiguration().orientation 

http://developer.android.com/reference/android/content/res/Configuration.html#orientation

यदि आप getResources का उपयोग करते हैं ()। GetConfiguration ()। कुछ उपकरणों पर अभिविन्यास आपको इसे गलत मिलेगा। हम शुरूआत में http://apphance.com में उस दृष्टिकोण का इस्तेमाल किया। अपफेंस के दूरस्थ लॉगिंग के लिए धन्यवाद हम इसे विभिन्न उपकरणों पर देख सकते हैं और हमने देखा कि विखंडन इसकी भूमिका निभाता है। मैंने अजीब मामलों को देखा: उदाहरण के लिए HTC Desire HD पर चित्र और वर्ग (?!) बारी बारी से:

 CONDITION[17:37:10.345] screen: rotation: 270 orientation: square CONDITION[17:37:12.774] screen: rotation: 0 orientation: portrait CONDITION[17:37:15.898] screen: rotation: 90 CONDITION[17:37:21.451] screen: rotation: 0 CONDITION[17:38:42.120] screen: rotation: 270 orientation: square 

या बिल्कुल उन्मुखीकरण नहीं बदल रहा है:

 CONDITION[11:34:41.134] screen: rotation: 0 CONDITION[11:35:04.533] screen: rotation: 90 CONDITION[11:35:06.312] screen: rotation: 0 CONDITION[11:35:07.938] screen: rotation: 90 CONDITION[11:35:09.336] screen: rotation: 0 

दूसरी ओर, चौड़ाई () और ऊंचाई () हमेशा सही है (यह विंडो प्रबंधक द्वारा उपयोग किया जाता है, इसलिए इसे बेहतर होना चाहिए)। मैं कहूंगा कि सबसे अच्छा विचार चौड़ाई / ऊंचाई की जांच करना हमेशा होता है यदि आप एक पल के बारे में सोचते हैं, तो यह वही है जो आप चाहते हैं – यह जानना कि चौड़ाई ऊंचाई (चित्र) से कम है, विपरीत (लैंडस्केप) या अगर वह समान (स्क्वायर) है

तो यह इस सरल कोड पर आता है:

 public int getScreenOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = Configuration.ORIENTATION_UNDEFINED; if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; } else{ if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else { orientation = Configuration.ORIENTATION_LANDSCAPE; } } return orientation; } 

फोन की वर्तमान अभिविन्यास निर्दिष्ट करने का एक पूरा तरीका:

  public String getRotation(Context context){ final int rotation = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation(); switch (rotation) { case Surface.ROTATION_0: return "portrait"; case Surface.ROTATION_90: return "landscape"; case Surface.ROTATION_180: return "reverse portrait"; default: return "reverse landscape"; } } 

चीर बिन्ह नगुएन

इस समस्या को सुलझाने का एक अन्य तरीका प्रदर्शन से सही रिटर्न मान पर निर्भर नहीं है बल्कि एंड्रॉइड संसाधनों पर निर्भर करता है।

निम्न सामग्री के साथ फ़ोल्डर्स res/values-land और res/values-port में फ़ाइल layouts.xml बनाएँ:

res / values-भूमि / layouts.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <bool name="is_landscape">true</bool> </resources> 

res / values बंदरगाह / layouts.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <bool name="is_landscape">false</bool> </resources> 

अपने स्रोत कोड में आप अब वर्तमान अभिविन्यास तक पहुंच सकते हैं:

 context.getResources().getBoolean(R.bool.is_landscape) 

यहां कोड स्निपेट डेमो है कि कैसे हैकबोड और मार्टिज़न द्वारा स्क्रीन अभिविन्यास की सिफारिश की गई है:

❶ ट्रिगर जब परिवर्तन ओरिएंटेशन:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); int nCurrentOrientation = _getScreenOrientation(); _doSomeThingWhenChangeOrientation(nCurrentOrientation); } 

हेडबोड की सिफारिश के अनुसार वर्तमान अभिविन्यास प्राप्त करें:

 private int _getScreenOrientation(){ return getResources().getConfiguration().orientation; } 

❸ वर्तमान स्क्रीन अभिविन्यास पाने के लिए वैकल्पिक समाधान हैं ❷ मार्टिजन समाधान का पालन करें:

 private int _getScreenOrientation(){ Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); return display.getOrientation(); } 

नोट : मैं दोनों ❷ और ​​both को लागू करने की कोशिश कर रहा था, लेकिन RealDevice (NexusOne SDK 2.3) ओरिएंटेशन पर यह गलत ओरिएंटेशन देता है।

★ तो मैं इसका उपयोग करने की सलाह देता हूं ❷ स्क्रीन ओरिएंटेशन पाने के लिए जो अधिक लाभ होते हैं: स्पष्ट, सरल और एक जादू की तरह काम करते हैं

★ हमारी उम्मीद के मुताबिक सही सुनिश्चित करने के लिए ओरिएंटेशन की ध्यान से वापसी करें (हो सकता है कि सीमित भौतिक डिवाइस विनिर्देश पर निर्भर हो)

आशा है कि यह मदद,

 int ot = getResources().getConfiguration().orientation; switch(ot) { case Configuration.ORIENTATION_LANDSCAPE: Log.d("my orient" ,"ORIENTATION_LANDSCAPE"); break; case Configuration.ORIENTATION_PORTRAIT: Log.d("my orient" ,"ORIENTATION_PORTRAIT"); break; case Configuration.ORIENTATION_SQUARE: Log.d("my orient" ,"ORIENTATION_SQUARE"); break; case Configuration.ORIENTATION_UNDEFINED: Log.d("my orient" ,"ORIENTATION_UNDEFINED"); break; default: Log.d("my orient", "default val"); break; } 

getResources().getConfiguration().orientation उपयोग करें getResources().getConfiguration().orientation यह सही तरीका है

आपको बस विभिन्न प्रकार के परिदृश्य के लिए, परिदृश्य में देखना चाहिए कि डिवाइस सामान्य रूप से उपयोग करता है और दूसरा

फिर भी यह समझ में नहीं आ रहा है कि यह कैसे प्रबंधित करें।

इनमें से अधिकतर उत्तर पोस्ट किए जाने के बाद कुछ समय बीत चुका है और कुछ समय से अब पदावनत विधियों और स्थिरांक का उपयोग किया गया है।

मैंने इन विधियों और स्थिरांक का अब और उपयोग नहीं करने के लिए जेरेक के कोड को अपडेट किया है:

 protected int getScreenOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); Point size = new Point(); getOrient.getSize(size); int orientation; if (size.x < size.y) { orientation = Configuration.ORIENTATION_PORTRAIT; } else { orientation = Configuration.ORIENTATION_LANDSCAPE; } return orientation; } 

नोट करें कि मोड Configuration.ORIENTATION_SQUARE अब समर्थित नहीं है

मुझे यह मिल गया सभी डिवाइसों पर विश्वसनीय होना चाहिए, जिस पर मैंने इसके बारे में getResources().getConfiguration().orientation का उपयोग करने की विधि के विपरीत परीक्षण किया है getResources().getConfiguration().orientation

रनटाइम में स्क्रीन अभिविन्यास की जांच करें

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } } 

ऐसा करने का एक और तरीका है:

 public int getOrientation() { if(getResources().getDisplayMetrics().widthPixels>getResources().getDisplayMetrics().heightPixels) { Toast t = Toast.makeText(this,"LANDSCAPE",Toast.LENGTH_SHORT); t.show(); return 1; } else { Toast t = Toast.makeText(this,"PORTRAIT",Toast.LENGTH_SHORT); t.show(); return 2; } } 

एंड्रॉइड एसडीके आपको यह ठीक बता सकता है:

 getResources().getConfiguration().orientation 

मुझे लगता है कि ओरिएंटेशन परिवर्तन के प्रभावी होने के बाद यह कोड काम कर सकता है

 Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); 

override Activity.onConfigurationChanged (कॉन्फ़िगरेशन newConfig) फ़ंक्शन और newConfig, अभिविन्यास का उपयोग करें यदि आप setContentView पर कॉल करने से पहले नए अभिविन्यास के बारे में सूचित करना चाहते हैं।

मुझे लगता है कि getRotationv () का उपयोग करना मदद नहीं करता क्योंकि http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () स्क्रीन के रोटेशन को इसके "प्राकृतिक" उन्मुखीकरण।

इसलिए जब तक आप "प्राकृतिक" अभिविन्यास नहीं जानते, तो रोटेशन अर्थहीन है

मुझे एक आसान तरीका मिल गया है,

  Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; if(width>height) // its landscape 

कृपया मुझे बताओ कि इसमें किसी के साथ कोई समस्या है?

सरल और आसान 🙂

  1. 2 एक्सएमएल लेआउट बनाएं (यानी पोर्ट्रेट और लैंडस्केप)
  2. जावा फाइल में, लिखें:

     private int intOrientation; 

    onCreate विधि पर और सेट से पहले सेट setContentView लिखें लिखें:

     intOrientation = getResources().getConfiguration().orientation; if (intOrientation == Configuration.ORIENTATION_PORTRAIT) setContentView(R.layout.activity_main); else setContentView(R.layout.layout_land); // I tested it and it works fine. 

पुरानी पोस्ट मुझे पता है अभिविन्यास जो कुछ भी हो सकता है या फिर स्वैप किया जाता है। मैं इस फ़ंक्शन को डिज़ाइन किया है जिसका उपयोग उपकरण को सही उन्मुखीकरण में सेट करने के लिए किया जाता है, यह जानने के लिए कि डिवाइस पर चित्र और परिदृश्य सुविधाओं को कैसे व्यवस्थित किया जाता है।

  private void initActivityScreenOrientPortrait() { // Avoid screen rotations (use the manifests android:screenOrientation setting) // Set this to nosensor or potrait // Set window fullscreen this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); DisplayMetrics metrics = new DisplayMetrics(); this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); // Test if it is VISUAL in portrait mode by simply checking it's size boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); if( !bIsVisualPortrait ) { // Swap the orientation to match the VISUAL portrait mode if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ) { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); } } else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); } } 

एक जादू की तरह काम करता है!

इस तरह का प्रयोग करें,

  int orientation = getResources().getConfiguration().orientation; String Orintaion = ""; switch (orientation) { case Configuration.ORIENTATION_UNDEFINED: Orintaion = "Undefined"; break; case Configuration.ORIENTATION_LANDSCAPE: Orintaion = "Landscrape"; break; case Configuration.ORIENTATION_PORTRAIT: Orintaion = "Portrait"; break; default: Orintaion = "Square";break; } 

स्ट्रिंग में आपके पास ऑरियनमेंट है

ऐसा करने के कई तरीके हैं, कोड का यह टुकड़ा मेरे लिए काम करता है

  if (this.getWindow().getWindowManager().getDefaultDisplay() .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { // portrait mode } else if (this.getWindow().getWindowManager().getDefaultDisplay() .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { // landscape }