সর্বদা ল্যান্ডস্কেপ মোড ব্যবহার করতে একটি অ্যান্ড্রয়েড ক্রিয়াকলাপ জোর করুন


144

আমি আমার এইচটিসি জি 1 এ অ্যান্ড্রয়েড ভিএনসি ভিউয়ারটি ব্যবহার করছি । তবে কিছু কারণে, আমার জি 1 প্রতিকৃতি মোডে থাকা সত্ত্বেও অ্যাপ্লিকেশনটি সর্বদা ল্যান্ডস্কেপ মোডে থাকে। যেহেতু অ্যান্ড্রয়েড ভিএনসি ভিউয়ার ওপেন সোর্স, তাই আমি জানতে চাই কীভাবে হার্ড কোডের কোনও ক্রিয়াকলাপটি 'ল্যান্ডস্কেপ' হওয়া সম্ভব। আমি ফোন ওরিয়েন্টেশন সম্মানের জন্য এটি পরিবর্তন করতে চাই।

উত্তর:


188

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ( লিঙ্ক) দেখছেনলাইন 9 ) :

<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">

এই লাইনটি নির্দিষ্ট করে screenOrientation ল্যান্ডস্কেপ হিসাবে তবে লেখক আরও কোনও স্ক্রিন ওরিয়েন্টেশন পরিবর্তনের সাথে ওভাররাইড করে configChanges="orientation|keyboardHidden"। এটি ভিএনসিক্যানভাসঅ্যাক্টিভিটি.জভাতে একটি ওভাররাইড ফাংশনকে নির্দেশ করে।

আপনি যদি ভিএনসি ক্যানভাসঅ্যাক্টিভিটির দিকে লক্ষ্য করেন তবে 109 লাইনে ওভাররাইড ফাংশন:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  // ignore orientation/keyboard change
  super.onConfigurationChanged(newConfig);
}

কোনও কীবোর্ড বা অভিমুখী পরিবর্তনগুলি উপেক্ষা করার জন্য লেখক বিশেষত একটি মন্তব্য করেছিলেন।


আপনি যদি এটি পরিবর্তন করতে চান তবে আপনি উপরে প্রদর্শিত AndroidManLive.xML ফাইলে ফিরে যেতে পারেন এবং লাইনটি এতে পরিবর্তন করতে পারেন:

<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">

ব্যবহারকারী যখন ডিভাইসটি ঘুরিয়ে দেয় তখন পোর্ট্রেট থেকে ল্যান্ডস্কেপে পরিবর্তন করতে প্রোগ্রামটি পরিবর্তন করা উচিত।

এটি কাজ করতে পারে তবে লেআউটটি কীভাবে তৈরি হয়েছিল তার উপর নির্ভর করে জিইউআই কীভাবে দেখায় তা বিঘ্নিত হতে পারে। আপনাকে এর জন্য অ্যাকাউন্ট করতে হবে। এছাড়াও, কীভাবে ক্রিয়াকলাপগুলি কোড করা হয় তার উপর নির্ভর করে আপনি খেয়াল করতে পারেন যে যখন স্ক্রিন ওরিয়েন্টেশন পরিবর্তন করা হয় তখন কোনও ইনপুট বাক্সে ভ্যালুগুলি অদৃশ্য হয়ে যায়। এটিও পরিচালনা করতে হতে পারে।


3
configChangesবৈশিষ্ট্যটি ঠিক কেন প্রয়োজন? আমার নন-কীবোর্ড ফোনটি এটি ছাড়া কাজ করার মতো মনে হচ্ছে ... কোন পরিস্থিতিতে যদি আপনার প্রতিকৃতিটি screenOrientation="landscape"বাদ দেওয়া থাকে তবে প্রতিক্রিয়ার প্রতিকৃতিতে কী পরিবর্তন হবে configChanges?
টিম্ম্ম্ম


সিস্টেমের চিত্রের মতো অন্তর্নির্মিত ক্রিয়াকলাপটি কীভাবে কেবলমাত্র ল্যান্ডস্কেপ বা কেবল প্রতিকৃতিতে লাইব্রেরি নির্বাচন করতে বাধ্য করবেন?
জ্যাকি

118

আপনি আপনার জাভা কোডেও একই ডেটা সেট করতে পারেন।

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

অ্যাক্টিভিটিআইএনফো-র অন্যান্য মান আপনাকে এটিকে সেন্সর চালিত বা লক করা প্রতিকৃতিতে আবার সেট করতে দেয়। ব্যক্তিগতভাবে, আমি ম্যানিফেস্টে এটিকে অন্য প্রশ্নের উত্তরে প্রস্তাবিত কিছুতে সেট করতে চাই এবং পরে যদি প্রয়োজন হয় তবে অ্যান্ড্রয়েড এসডিকে উপরের কলটি ব্যবহার করে পরে এটি পরিবর্তন করতে চাই।


@ ইগর সবসময় না। অ্যান্ড্রয়েড ডক্স থেকে:If the activity is currently in the foreground or otherwise impacting the screen orientation, the screen will immediately be changed (possibly causing the activity to be restarted)
চৈতন্য

40

আমার মধ্যে OnCreate(Bundle), আমি সাধারণত নিম্নলিখিতগুলি করি:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2
অন্যান্য উত্তরে প্রকাশের পদ্ধতিটি কাজ করছে বলে মনে হচ্ছে না তবে @ আনোর্মা আপনার করেছে
অনুপ

31

আপনি ম্যানিফেস্টে কোনও ক্রিয়াকলাপের ওরিয়েন্টেশন নির্দিষ্ট করতে পারেন। এখানে দেখুন ।

<activity android:allowTaskReparenting=["true" | "false"]
...
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
...
                                       "adjustResize", "adjustPan"] >  

24

ম্যানিফেস্টে:

<activity  android:name=".YourActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize">

আপনার ক্রিয়াকলাপে:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);

11

নিম্নলিখিতটি কোডটি যা আমি ল্যান্ডস্কেপ মোডে সমস্ত ক্রিয়াকলাপ প্রদর্শনের জন্য ব্যবহার করেছি:

<activity android:screenOrientation="landscape"
          android:configChanges="orientation|keyboardHidden"
          android:name="abcActivty"/>

2
"ওরিয়েন্টেশন" যদি আপনার অ্যাপ্লিকেশনটি এপিআই স্তরের ১৩ বা ততোধিক লক্ষ্যকে লক্ষ্য করে তবে আপনারও "স্ক্রিনসাইজ" ঘোষণা করতে হবে
মিনা

7

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলের জন্য একটি দ্রুত এবং সহজ সমাধান হ'ল আপনি ল্যান্ডস্কেপ মোডে বাধ্য করতে চান এমন প্রতিটি ক্রিয়াকলাপের জন্য নিম্নলিখিতটি যুক্ত করুন:

android:screenOrientation="landscape"

5

এটি Xamarin.Android এর জন্য কাজ করে। অনক্রিয়েটে ()

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;

4

এটাই!! এই ঠিক করার জন্য দীর্ঘ প্রতীক্ষা।

একটি ক্রিয়াকলাপ ডাবল-স্টার্ট করার বিষয়ে আমার একটি পুরানো অ্যান্ড্রয়েড ইস্যু রয়েছে যা প্রয়োজনীয় (প্রোগ্রাম্যাটিকভাবে) ল্যান্ডস্কেপ মোডে প্রয়োজন: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

এখন অ্যান্ড্রয়েড ল্যান্ডস্কেপ মোড শুরু করে।


3

আর্সলান, আপনি কেন ব্যাকরণগতভাবে ওরিয়েন্টেশনকে বাধ্য করতে চান, যদিও ইতোমধ্যে প্রকাশের একটি উপায় রয়েছে <activity android:name=".youractivityName" android:screenOrientation="portrait" />


আমি প্রশ্নকর্তা নই, তবে সম্ভবত তিনি প্রোগ্র্যাম্যাটিকভাবে বল প্রয়োগ করতে চান কারণ তিনি একটি নির্দিষ্ট সময়ে এটি জোর করতে চান?
হামজা মালিক

1

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


1
আমি একমত নই ম্যানিফেস্টের মাধ্যমে কোডের বিপরীতে কিছু করা সর্বদা আমার পছন্দের পদ্ধতি। একক দায়িত্বের নীতির ভিত্তিতে ম্যানিফেস্টটি কেবলমাত্র অ্যাপ্লিকেশন স্তরের বৈশিষ্ট্য, অনুমতি এবং এপিআই বাইন্ডিংগুলির সাথে সম্পর্কিত। আমি কোনও অ্যাপ্লিকেশন ম্যানিফেস্টে << কার্যকলাপ> ট্যাগটি উপস্থিত থাকার সাথে আসলেই একমত নই এবং তাই আমি কখনই এটি সেখানে রাখি না (এবং এটি ঠিক কাজ করে)। কীভাবে কোনও ক্রিয়াকলাপ উপস্থাপন করা হয় তা উপস্থাপনের উদ্বেগ। আপনার ক্রিয়াকলাপটি কীভাবে এটি উপস্থাপন করা হয় তার জন্য সম্পূর্ণ দায়বদ্ধ হওয়া উচিত এবং তাই আমি সাধারণত সমস্ত উপস্থাপনা যুক্তিকে ভিউ / ক্রিয়াকলাপের কোডে রাখি।
আসুন

0

জন্য অ্যান্ড্রয়েড 4.0 (আইস ক্রিম স্যান্ডউইচ) এবং পরে, আমি ব্যতীত এই যোগ করতে প্রয়োজন landscapeমান।

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

keyboardHidden|orientationপাওয়ার বোতামটি টিপানোর সময় কেবলমাত্র ব্যবহারের ফলে মেমরি ফাঁস এবং আমার ক্রিয়াকলাপগুলি পুনরায় তৈরি হবে।


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

@ রয়েল, ঠিক আছে প্রতিক্রিয়ার প্রতিক্রিয়ায় প্রতিক্রিয়া রোধ করার একমাত্র উপায় যখন উদাহরণস্বরূপ আপনি ডিভাইসটি ঘোরান। এটি প্রতিরোধ করে যে এই কনফিগারেশানগুলি ক্রিয়াকলাপকে প্রভাবিত করে।
পিটারডকে

সামান্য বিমুগ্ধ বার্তার জন্য দুঃখিত, তবে আমি এটি পরীক্ষা করেছি এবং ল্যান্ডস্কেপ মোডের জন্য আমি এই সমস্ত মানগুলি পাই না। আপনি যখন এই সমস্ত মান যুক্ত করেন তবে এর অর্থ আপনি নিজের পরিবর্তনটি ওন-কনফিগারেশন চ্যাঞ্জড () পরিবর্তে পরিচালনা করেন তার পরিবর্তে ক্রিয়াকলাপটি কেবল পুনরায় শুরু করা হয় (এবং আপনাকে এটি প্রয়োগ করতে হবে!) তবে আপনি যদি জোরপূর্বক জোর ঘুরিয়ে ফেলেন না তবে rot
রোল

হাই, তাদের মধ্যে কিছু সম্ভবত প্রয়োজন হয় না, তবে তাদের সমস্ত বাদ দেওয়ার ফলে অদ্ভুত রোটেশন সমস্যা দেখা দেবে। আমি এখনই পরীক্ষা করতে পারছি না, তবে যখন আমি এমন একটি অ্যাপ বিকাশ করছিলাম যা সমস্ত সময় ল্যান্ডস্কেপে থাকা দরকার orientation|screensizeতখন কেবল সমস্ত ক্ষেত্রেই ব্যবহার করা যথেষ্ট ছিল না। এটি প্রতিকৃতিতে স্বতঃরীক্ষণ হবে।
পিটারডকে

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

0

সেটলয়েট পদ্ধতিটি এভাবে কল করার আগে আপনার onCreate পদ্ধতিতে ActivityInfo (android.content.pm.ActivityInfo) ব্যবহার করুন like

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

0

কেবল
অ্যান্ড্রয়েড ব্যবহার করুন : স্ক্রিন ওরিয়েন্টেশন = "প্রতিকৃতি" সরঞ্জাম: উপেক্ষা = "লকড ওরিয়েন্টেশনএকটিভিটি"


0

ক্রিয়াকলাপে নিম্নলিখিত লাইনগুলি যুক্ত করুন

আপনাকে প্রতিটি ক্রিয়াকলাপে প্রবেশ করতে হবে

আড়াআড়ি জন্য

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

প্রতিকৃতি জন্য

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

এখানে মেইনএকটিভিটির উদাহরণ

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity"
            android:screenOrientation="landscape"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".MainActivity2"
            android:screenOrientation="portrait"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

-25

প্রেস CTRL+F11পর্দা ঘোরাতে।


3
তারা এখনই কীভাবে কোনও স্ক্রিনটি ঘোরানো যায় তা নয়, কীভাবে কোনও অ্যাপ্লিকেশনটির ডিফল্ট ওরিয়েন্টেশন সেট করে তা চায় to
কাইল কে

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