শুধুমাত্র প্রতিকৃতি মোডে কীভাবে পুরো অ্যাপ্লিকেশন সেট করবেন?


201

অ্যাপ্লিকেশনটি কেবল প্রতিকৃতি মোডে চলছে তাই আমি কীভাবে এটি সেট করব? আমি চাই অ্যাপ্লিকেশন চলাকালীন ল্যান্ডস্কেপ মোডটি অক্ষম করা হোক। আমি কীভাবে প্রোগ্রামটিমে এটি করব?

উত্তর:


293

যে কোনও অ্যান্ড্রয়েড সংস্করণ জন্য

এক্সএমএল থেকে

আপনি android:screenOrientation="portrait"আপনার মেনিফেস্ট.এমএমএল ফাইলের প্রতিটি ক্রিয়াকলাপের জন্য নির্দিষ্ট করতে পারেন । আপনি applicationট্যাগটিতে এই বিকল্পটি নির্দিষ্ট করতে পারবেন না ।

জাভা থেকে

অন্যান্য বিকল্পটি প্রোগ্রামিয়ালি এটি করা, উদাহরণস্বরূপ Activityবেস ক্লাসে:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

অ্যান্ড্রয়েড 4+ (API 14+) এর জন্য

সর্বশেষ বিকল্পটি ক্রিয়াকলাপের জীবনচক্র শ্রোতাদের সাথে এটি করা যা কেবলমাত্র অ্যান্ড্রয়েড 4.0.০ (এপিআই 14+) এর পরে পাওয়া যায়। একটি কাস্টম Applicationক্লাসে সবকিছু ঘটে :

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapterএটি কেবলমাত্র একটি সহায়ক শ্রেণি যা আপনাকে তৈরি করতে হবে যা খালি বাস্তবায়ন হবে ActivityLifecycleCallbacks(যাতে আপনার যখন কেবলমাত্র তাদের একটির প্রয়োজন হয় তখন আপনাকে সেই ইন্টারফেসের প্রতিটি পদ্ধতি ওভাররাইড করতে হবে না)।


1
এটা কাজ করছে না. আমি ডিভাইসটি চালু করার সময় এটি ল্যান্ডস্কেপ মোডে পরিণত হয়। এবং কোডে আরও কিছু জিনিস আমি এই সেট-রিকুইস্টেড ওরিয়েন্টেশন (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) ব্যবহার করছি; setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); অগ্রগতি বার জন্য নির্দেশাবলী। এই নির্দেশাবলী কোন সমস্যা আছে?
নরেশ

ইহা কাজ করছে. আর একটি বিষয় আপনার কোডিং অংশে দুটি নির্দেশাবলীর উপরে রাখবেন না। এর অর্থ এটি স্ক্রিনের ওরিয়েন্টেশন পরিবর্তনের জন্য সেন্সরটিকে সক্ষম করে।
নরেশ

3
-1: জিজ্ঞাসাবাদী বিশেষত এটি কীভাবে // প্রোগ্রামক্রমে // করার অনুরোধ করেছেন এবং পুরো অ্যাপ্লিকেশনটির জন্য (যা আমাকে বিশ্বাস করতে পরিচালিত করে যে তারা প্রতিটি ক্রিয়াকলাপ পৃথকভাবে এটি করতে চায় না)।
jwir3

@ jwir3, আমি একমত নই "প্রোগ্রামিং" কেবল কোড কোড রচনা করে না, এটি সমস্ত মেটা ফাইল, আপনার ব্যবহৃত সংস্থানসমূহ, আইডিই এর আইডিসিএনক্র্যাসির চারপাশে কাজ করা ইত্যাদি This এটি একটি ভাল উত্তর, সমস্যার সমাধান করে এবং ওপি এটি সঠিক হিসাবে চিহ্নিত করেছিল marked স্পষ্টতই মূল প্রশ্নের যথেষ্ট উত্তর।
জেমস ওয়েবস্টার

9
লাইফসাইকেলক্যালব্যাক্স পদ্ধতিটি ব্যবহার করে আপনি যখন আপনার ডিভাইসটি ল্যান্ডস্কেপ মোডে রাখেন তখন কার্যকলাপের সূচনায় বিলম্ব হবে। আমার ধারণা এটি কারণ কারণ ডিভাইসগুলি ক্রিয়াকলাপের অভ্যন্তরে সংক্ষিপ্তভাবে ল্যান্ডস্কেপ মোডে ফিরে আসে এবং এটি পরিচালনা করার জন্য সময় প্রয়োজন। ম্যানিফেস্টে ওরিয়েন্টেশন নির্ধারণের এই প্রভাব নেই।
অজ্ঞাতনামা

142

হ্যাঁ আপনি প্রোগ্রামগতভাবে এবং আপনার সমস্ত ক্রিয়াকলাপকে প্রসারিত এমন একটি অ্যাবস্ট্রাক্ট অ্যাক্টিভিটি তৈরি করার জন্য আপনার উভয় ক্রিয়াকলাপের জন্য এটি করতে পারেন।

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

এই বিমূর্ত ক্রিয়াকলাপটি একটি গ্লোবাল মেনুতেও ব্যবহার করা যেতে পারে।


3
দ্রষ্টব্য: আমি বিশ্বাস করি যে ActivityInfo.SCREEN_ORIENTATION_NOSENSORএটি আরও ভাল উত্তর হওয়া উচিত কারণ এটি ডিভাইসটিকে ডিফল্ট অবস্থায় রেখে দেওয়ার উদ্দেশ্য কারণ কোনও কোনও ডিভাইসের প্রতিকৃতি ওরিয়েন্টেশন নেই। তবে, 'নাকনসর' আমার পক্ষে কাজ করে না, সুতরাং @ আরকনের উত্তর আমার পক্ষে দাঁড়িয়েছে।
ডেভিড ম্যানপারল

104

আপনার সমস্ত ক্রিয়াকলাপকে একটি সাধারণ বেস শ্রেণি বাড়িয়ে না দিয়ে আপনি আপনার পুরো অ্যাপ্লিকেশনটির জন্য এটি করতে পারেন।

কৌতুকটি Applicationআপনার প্রকল্পের একটি সাবক্লাস অন্তর্ভুক্ত করা হয়েছে তা নিশ্চিত করার আগে is এর মধ্যে onCreate()বলা হয়, যখন আপনার অ্যাপ্লিকেশনটি প্রথম শুরু হয়, আপনি ActivityLifecycleCallbacksক্রিয়াকলাপের জীবনচক্রের ইভেন্টগুলির বিজ্ঞপ্তিগুলি পেতে কোনও বস্তুর (API স্তর 14+) নিবন্ধভুক্ত করেন ।

এটি যখনই আপনার অ্যাপ্লিকেশনটিতে কোনও ক্রিয়াকলাপ শুরু হয় (বা বন্ধ হয়ে যায়, বা পুনরায় চালু করা হয় বা যাই হোক না কেন) আপনার নিজের কোডটি কার্যকর করার সুযোগ দেয় । এই মুহুর্তে আপনি setRequestedOrientation()নতুন তৈরি করা ক্রিয়াকলাপটি কল করতে পারেন ।

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}

9
এই প্রশ্নের একমাত্র উত্তর যা প্রশ্নের উত্তর দেয়। তাদের সকলকে শাসন করার জন্য একটি লাইন।
স্যামুয়েল

2
* একটি শ্রেণি তাদের সকলকে শাসন করার জন্য।
জয় মায়ু

3
এবং ম্যানিফেস্ট অ্যাপ্লিকেশন রুটে যুক্ত করতে ভুলবেন না। অ্যান্ড্রয়েড: নাম = "। মাই অ্যাপ"
ফয়সাল নাসির

2
এই পদ্ধতিকে ক্রিয়াকলাপের অনক্রিট () কে দুইবার কল করে।
সন্দীপ আর

3
সমস্যাটি যখন আপনি ডিভাইসটিকে অনুভূমিকভাবে ধরে রাখেন এবং নতুন ক্রিয়াকলাপ শুরু করেন, এটি ল্যান্ডস্কেপ অভিযোজনে উপস্থিত হয় এবং তারপরে প্রতিকৃতিতে ঘোরানো হয়। প্রতিকৃতি নির্দেশে পুরো অ্যাপ্লিকেশনটিকে লক করার একমাত্র ভাল উপায় হ'ল ম্যানিফেস্টের প্রতিটি তাত্পর্যকে চিহ্নিত করা।
ডেন

42

আপনি এটি আপনার প্রকাশিত ফাইলে সেট করতে পারেন ..

android:name=".your launching activity name"
android:screenOrientation="portrait"

এবং আপনি নিজের ক্লাস ফাইলে কোড লিখেও এটি অর্জন করতে পারেন:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


24

অ্যান্ড্রয়েড যুক্ত করুন: স্ক্রিন ওরিয়েন্টেশন = অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলটিতে "প্রতিকৃতি"। উদাহরণ স্বরূপ:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">

25
তিনি বলেছিলেন অ্যাপ্লিকেশন কোনও ক্রিয়াকলাপ নয়।

10

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

android:screenOrientation="portrait" 

আপনি কেবল প্রতিকৃতি মোডে প্রদর্শন করতে চান এমন প্রতিটি ক্রিয়াকলাপে আপনার অ্যাপ্লিকেশনটির ম্যানিফেস্ট ফাইলটিতে এই লাইনটি লিখুন।


8

প্রতিটি ক্রিয়াকলাপের জন্য আপনার প্রকাশিত ফাইলে এটি লিখুন:

android:screenOrientation="portrait" 

2

অ্যান্ড্রয়েড বিকাশকারী গাইড হিসাবে:

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

"স্ক্রীনসাইজ" বর্তমান উপলব্ধ পর্দার আকার পরিবর্তন হয়েছে। এটি বর্তমান উপলভ্য আকারের পরিবর্তনের প্রতিনিধিত্ব করে, বর্তমান দিক অনুপাতের সাথে তুলনামূলকভাবে, তাই যখন ব্যবহারকারী ল্যান্ডস্কেপ এবং প্রতিকৃতিতে পরিবর্তন করে change তবে, যদি আপনার অ্যাপ্লিকেশনটি এপিআই লেভেল 12 বা তার চেয়ে কমের লক্ষ্যবস্তু করে, তবে আপনার ক্রিয়াকলাপ সর্বদা এই কনফিগারেশন পরিবর্তনটিকে নিজেরাই পরিচালনা করে (কোনও অ্যান্ড্রয়েড 3.2 বা উচ্চতর ডিভাইসে চলাকালীন এই কনফিগারেশন পরিবর্তনটি আপনার ক্রিয়াকলাপটি পুনরায় আরম্ভ করে না)। এপিআই লেভেল 13 এ যুক্ত হয়েছে।

সুতরাং, AndroidManLive.xML ফাইলে আমরা রাখতে পারি:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

1

আমার কনফিগারেশনএক্সএমএল এর <preference name="orientation" value="portrait" />অধীনে যোগ করা <widget>আমার পক্ষে কাজ করেছিল।

(অন্যান্য সমাধানগুলি আমার ডিভাইসে কার্যকর হয়নি, বিল্ডিংয়ের সময় ওভাররাইট করা হয়েছিল বা বিল্ড প্রক্রিয়া চলাকালীন অবচয় ত্রুটি দিয়েছে gave)


কোথায় বলা হয়েছে config.xml? আপনি কোন উন্নয়ন প্ল্যাটফর্মের কথা উল্লেখ করছেন?
তাশ পেমহিভা

1

ম্যানিফেস্ট ফাইলে আপনি কোন ক্রিয়াকলাপ "প্রতিকৃতি" ব্যবহার করতে চান তা অবশ্যই আপনাকে এই কোডটি ক্রিয়াকলাপ ট্যাগে লিখতে হবে

  android:screenOrientation="portrait" 

এটার মত

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

তবে আপনি যদি ল্যান্ডস্কেপে স্ক্রিন চান তবে এই কোডটি ব্যবহার করুন

android:screenOrientation="landscape"

1
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

0

কেউ যদি হতাশ ছিল, কিভাবে আপনি এই আপনার সমগ্র অ্যাপ্লিকেশানের জন্য আপনার সকল ক্রিয়াকলাপের একটি সাধারণ বেস বর্গ প্রসারিত করতে না করেও করতে পারে Kotlin , নীচের উদাহরণ দেখুন:

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

এবং তারপরে আপনাকে অ্যান্ড্রয়েড ম্যানিফেস্টে আপনার সাধারণ বেস ক্লাসটি যুক্ত করতে হবে:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

0

আপনি এটি দুটি উপায়ে করতে পারেন।

  1. যোগ android:screenOrientation="portrait"সংশ্লিষ্ট কার্যকলাপ আপনার ম্যানিফেস্ট ফাইলে
  2. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); Activity onCreate () পদ্ধতিতে আপনার ক্রিয়াকলাপে যুক্ত করুন

0

গ্রাহাম বোরল্যান্ড উত্তরের অনুরূপ ... তবে মনে হচ্ছে আপনি চাইলে অ্যাপ্লিকেশন ক্লাস তৈরি করতে হবে না ... কেবল আপনার প্রকল্পে একটি বেস ক্রিয়াকলাপ তৈরি করুন

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

আপনি যেখানে প্রতিকৃতি মোড ব্যবহার করতে চান সেখানে অ্যাপকোম্প্যাটঅ্যাক্টিভিটির পরিবর্তে এই শ্রেণিটি প্রসারিত করুন

public class your_activity extends BaseActivity {}

0

জামারিন ব্যবহারকারীদের জন্য:

আপনি যদি আপনার সমস্ত ক্রিয়াকলাপকে BaseActivityকেবল প্রসারিত করেন তবে যুক্ত করুন:

this.RequestedOrientation = ScreenOrientation.Portrait;

এটি সমস্যার সমাধান করবে। আপনি যদি চান যে কোনও বিশেষ ক্রিয়াকলাপ ল্যান্ডস্কেপে থাকে তবে এটিকে ওভাররাইড করে OnActivityCreated। হিসাবে:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

-11

আপনার ম্যানিফেস্টে এটি টাইপ করুন:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

6
এটি 3 বছরের পুরানো উত্তর ইতিমধ্যে বলে নি এমন নতুন কিছু যুক্ত করে না। আপনি এটি মুছে ফেলা বিবেচনা করতে পারেন। আপনি যদি নিজের উত্তরটি অন্যদের থেকে পৃথক করে এমন আরও তথ্য অন্তর্ভুক্ত করার জন্য আপনার উত্তরটি সম্পাদনা করার সিদ্ধান্ত নেন তবে দয়া করে @ আমাকে উত্তর দিন।
আর্টজম বি

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