আমি কীভাবে বর্তমান স্ক্রিন ওরিয়েন্টেশন পেতে পারি?


190

আমি যখন আমার ওরিয়েন্টেশনটি আড়াআড়ি অবস্থায় থাকি তখন কিছু পতাকা সেট করতে চাই যাতে অনক্রিটে ক্রিয়াকলাপটি পুনরায় তৈরি করা হয় () আমি প্রতিকৃতি বনাম ল্যান্ডস্কেপে কোনটি লোড করতে পারি তার মধ্যে টগল করতে পারি। আমার ইতিমধ্যে একটি লেআউট-ল্যান্ড এক্সএমএল রয়েছে যা আমার লেআউটটি পরিচালনা করছে।

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

কনফিগারেশন-ওভার রাইডিং ওভার রাইডিং আমার লেআউট-ল্যান্ড এক্সএমএলকে ল্যান্ডস্কেপ ওরিয়েন্টেশনে লোড করতে বাধা দেবে।

আমি কেবলমাত্র অনক্রিট () এ আমার ডিভাইসের বর্তমান ওরিয়েন্টেশন পেতে চাই। আমি এটি কিভাবে পেতে পারি?

উত্তর:


474
Activity.getResources().getConfiguration().orientation

8
এটি কেবল দুটি মান ORIENTATION_PORTRAIT এবং ORIENTATION_landSCAPE সরবরাহ করে। ক্রিয়াকলাপ তথ্য থেকে চারটি মান পাওয়ার কোনও উপায় আছে কি? (এটি ল্যান্ডসসিএপিE_REVERSE এবং পোর্টআরআইআইআরইভারসই পাশাপাশি)
এইচআরজে

18
@ এইচআরজে আপনি getWindowManager () ব্যবহার করতে পারেন। GetDefaultDisplay ()। GetRotation ()
MKJParekh

24
getWindowManager ()। getDefaultDisplay ()। getRotation () প্রদর্শনটির "প্রাকৃতিক" দৃষ্টিভঙ্গির রেফারেন্স সহ রোটেশনটি ফিরিয়ে দেয়, অর্থাত্ একটি ট্যাবলেটের জন্য এটি ল্যান্ডস্কেপ মোডে Surface.ROTATION_0 ফিরে আসবে, যেখানে একটি মোবাইল ফোনের জন্য এটি একই মানটি ফিরে আসবে would পোর্ট্রেট।
জোল্টন

64
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

যখন সুপারক্লাস thisহয়Context


28

কিছু ডিভাইসে void onConfigurationChanged()ক্রাশ হতে পারে। ব্যবহারকারী বর্তমান স্ক্রিন ওরিয়েন্টেশন পেতে এই কোডটি ব্যবহার করবে।

public int getScreenOrientation()
{
    Display getOrient = getActivity().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;
}

আর ব্যবহার করুন

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

1
দয়া করে নোট করুন যে getOrient.getWidth () এবং getOrient.getHeight () এখন হ্রাস করা হয়েছে।
ভ্যালিরিবডাক

আরও বিস্তারিত হিসাবে সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত
Zapnologica

1
সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত এবং সমস্ত অবস্থাতে সেরা কাজ করে। তবে দয়া করে নোট করুন অ্যানিভ্যালার বলেছিলেন getActivity ()। GetWindowManager ()। GetDefaultDisplay ()। GetWidth () এবং getHight () এখন অবচয় করা হয়েছে। দয়া করে getSize (পয়েন্ট আউটসাইজ) ব্যবহার করুন। এটি নতুন পয়েন্ট অবজেক্টটি পাসিং হিসাবে ব্যবহার করা যেতে পারে এবং এটি তার এক্স এবং ওয়াই সদস্য পাবে।
মহেন্দ্র ছিমওয়াল

মত পয়েন্ট আউটসাইজ = নতুন পয়েন্ট (); getOrient.getSize (আউটসাইজ); যদি (আউটসাইজ.এক্স == আউটসাইজ.ই) স্কয়ার ফিরে আসে;
মহেন্দ্র ছিমওয়াল

ভেবেছিলাম আমি উল্লেখ করব, যে কনফিগারেশন.অরিয়েন্টেশন_সোভারটি অবচিত করা হয়েছে এবং এটি ২০১৩ সালে 0 হিসাবে সংজ্ঞায়িত করা হয়েছিল, এটি 3 হিসাবে সংজ্ঞায়িত করা হয়েছে, जबकि কনফিগারেশন। ORIENTIATION_UNDEFINED 0 হিসাবে সংজ্ঞায়িত করা হয়েছে।
ডেভ

26
int rotation =  getWindowManager().getDefaultDisplay().getRotation();

এটি সমস্ত ওরিয়েন্টেশনকে স্বাভাবিক এবং বিপরীতে যেমন দেয়

এবং এটি হ্যান্ডেল

int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}

final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
আন্দ্রে সাইরোকোমস্কি

12
getActivity().getResources().getConfiguration().orientation

এই কমান্ডটি প্রতিকৃতিতে ইনট মান 1 এবং ল্যান্ডস্কেপের জন্য 2 প্রদান করে



1

আপনার ক্রিয়াকলাপ শ্রেণিতে নীচের পদ্ধতিটি ব্যবহার করুন:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

তারপরে আপনার কার্যকলাপটি একটি কনফিগারেশন পরিবর্তন পরিচালনা করে তা ঘোষণা android:configChangesকরতে, আপনি হ্যান্ডেল করতে চান এমন কনফিগারেশন উপস্থাপন করে এমন একটি মান সহ বৈশিষ্ট্য অন্তর্ভুক্ত করতে আপনার ম্যানিফেস্ট ফাইলটিতে উপযুক্ত উপাদানটি সম্পাদনা করুন । সম্ভাব্য মানগুলি ডকুমেন্টেশনে android:configChangesঅ্যাট্রিবিউটের জন্য তালিকাভুক্ত করা হয় (কীবোর্ডের উপলভ্য পরিবর্তন হলে পুনরায় আরম্ভ করতে পর্দার ওরিয়েন্টেশন পরিবর্তিত হয় এবং "কীবোর্ডহিডেন" পুনরায় চালু করতে প্রতিরোধ করতে সর্বাধিক ব্যবহৃত মানগুলি "ওরিয়েন্টেশন" হয়)। আপনি পাইপের সাথে আলাদা করে বৈশিষ্ট্যে একাধিক কনফিগারেশন মান ঘোষণা করতে পারেন | অক্ষর।

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

এখানেই শেষ!!


0

আপনি যদি সেই কনফিগারেশন চ্যাঞ্জড পদ্ধতিটি ওভাররাইড করতে চান এবং এখনও এটি বেসিক স্টাফটি করতে চান তবে সুপার.অনসিফাইগ্রেশন চ্যাঞ্জড () ওভাররাইড পদ্ধতিতে প্রথম বিবৃতি হিসাবে বিবেচনা করুন।


0

আমি কেবলমাত্র অন্য একটি বিকল্প প্রস্তাব করতে চাই যা আপনার কিছু লোকের জন্য উদ্বেগ প্রকাশ করবে:

android:configChanges="orientation|keyboardHidden" 

বোঝায় যে আমরা স্পষ্টভাবে ইনজেকশনের লেআউটটি ঘোষণা করি declare

সেক্ষেত্রে আমরা লেআউট-ল্যান্ড এবং লেআউট ফোল্ডারগুলিকে স্বয়ংক্রিয় ইনজেকশন রাখতে চাই। আপনাকে যা করতে হবে তা হ'ল এটি অনক্রিটটিতে যুক্ত করুন:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

এখানে, আমরা ফোনের ওরিয়েন্টেশনের উপর নির্ভর করে অ্যাকশনবারটি প্রদর্শন করি বা করি না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.