2011-02-03 17 views
220

私のアプリケーションは "ランドスケープ"モード用に設計されていないので、アプリケーション用にポートレートモードを強制しようとしています。強制的に "ポートレート"オリエンテーションモード

いくつかのフォーラムを読んだ後、私は私のマニフェストファイルに次の行を追加:

<application 
    android:debuggable="true" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait"> 

しかし、それは私のデバイス(HTCの欲望)上では動作しません。マニフェストファイルの行を無視して、 "portrait" lo "landscape"に切り替わります。

は読んだ多くのフォーラムの後、私は私のマニフェストファイルでこれを追加しようとしました:

<application 
    android:debuggable="true" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:configChanges="orientation"  
    android:screenOrientation="portrait"> 

と私の活動のクラスでこの機能:

public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

しかし、再び、運。

答えて

430

ではなく、あなたが活動要素に属性を適用する必要があり、アプリケーション要素に方向性を与えないでください、あなたはまた、以下に示すようconfigChangesを設定する必要があります。

例:

<activity 
    android:screenOrientation="portrait" 
    android:configChanges="orientation|keyboardHidden"> 
</activity> 

これはマニフェストファイルAndroidManifest.xmlで適用されます。

+1

ありがとうございます!それは私の間違いだった! – thomaus

+12

configChangesとは何ですか? – Dror

+45

@Orchestrator、configChangesは、構成変更がアクティビティ自体によって処理されることを意味します。それがなければ、オリエンテーションの変更があればアクティビティが再開されます。オリエンテーションが「肖像」であると指定した場合、それはどのように変化するでしょうか?オリエンテーションを変更する別のアクティビティーを起動した後、新しいアクティビティーが終了し、アクティビティーに戻った場合に変更することができます。たとえば、サムスンギャラクシーS3のデフォルトの画像キャプチャインテントは、特定の方向でそれを行います。 –

9

私はandroid:screenOrientation="portrait"が個々の活動に使用できると思います。私はあなたがあなたの活動にandroid:configChanges="orientation|keyboardHidden"を追加したいと思います

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

:だからのような<activity>タグにその属性を使用できますか?それ以外の場合は、設定変更時にアクティビティが再開されます。アクティビティが定義されている - onConfigurationChanged

android:screenOrientation="portrait"  
android:configChanges="orientation|keyboardHidden" 

マニフェストファイルに追加されていることのみonCreate

15

注、次に呼び出されないであろう。

2

私は

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" 
    android:label="@string/app_name" android:name="Project Name" 
    android:screenOrientation="portrait" 
    android:theme="@android:style/Theme.Black.NoTitleBar"> 

(ちょうどandroid:screenOrientation="portrait"を追加しました)に私のためにこの固定物事を変え、私のAndroidManifest.xml

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" 
    android:label="@string/app_name" android:name="Project Name" 
    android:theme="@android:style/Theme.Black.NoTitleBar"> 

にこのラインを持っていました。補完する

2

何か:私は最近、アプリを更新している、以前は風景やポートレートモードの両方で働いていた、と私は更新されたバージョンは、ポートレートモードで動作するはずですしたいので、私はへ

android:screenOrientation="portrait" 

を追加しました対応するアクティビティがあり、アップデートをテストしたときにクラッシュしました。次に、

android:configChanges="orientation|keyboardHidden" 

も追加して動作します。

+1

にあります。これは質問の回答ではない場合は、コメントとして追加している可能性があります。 – JPReddy

1

Androidのドキュメントによれば、構成変更の可能性として、screenSizeも含まれることがよくあります。

android:configChanges="orientation|screenSize" 

アプリケーション・ターゲットのAPIレベル13以上( minSdkVersionが及びtargetSdkVersion属性によって宣言される)場合、それはまた、とき デバイスが変更されるため、あなたはまた は、「画面サイズ」の設定を宣言する必要がありますポートレートと風景の向きを切り替えます。

あなたのすべてがあなたの例で値keyboardHiddenを含める場合も、あなたはその後もlocalemccfontScalekeyboardなどを考慮していないでしょうか?...

7

あなたは私のような多くの活動をしている場合あなたのアプリケーションで、またはマニフェスト内の各アクティビティタグのコードを入力したくない場合は、これを行うことができます。お使いのアプリケーションベースクラスの

あなたはライフサイクルコールバックを取得します

ので、基本的に、ここでトリガコードが取得上のアプリケーションクラスで作成作成する際に、各アクティビティの中に何が起こるのか...

public class MyApplication extends Application{ 

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

    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { 
      @Override 
      public void onActivityCreated(Activity activity, Bundle bundle) { 
       activity.setRequestedOrientation(
         ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 


// for each activity this function is called and so it is set to portrait mode 


      } 

      @Override 
      public void onActivityStarted(Activity activity) { 

      } 

      @Override 
      public void onActivityResumed(Activity activity) { 

      } 

      @Override 
      public void onActivityPaused(Activity activity) { 

      } 

      @Override 
      public void onActivityStopped(Activity activity) { 

      } 

      @Override 
      public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { 

      } 

      @Override 
      public void onActivityDestroyed(Activity activity) { 

      } 
     }); 
} 

私はこれが役立つことを願っています

0

短い回答:しないでください。

アプリを再デザインして、ポートレートモードとランドスケープモードの両方で実行できるようにします。ポートレートとランドスケープの両方で動作するように設計できないUIのようなものはありません。怠惰なまたは想像力のない開発者だけです。

理由はかなり簡単です。できるだけ多くの異なるデバイスで幅広い視聴者がアプリを使用できるようにしたいと考えています。特定の画面の向きを強制することで、その向きをサポートしていないデバイスでアプリが実行されるのを防ぐことができます。異なる向きを希望する潜在的な顧客を苛立たさせたり離れたりすることはありません。

例:アプリをポートレートモードにするようにデザインしています。顧客は、主にランドスケープモードで使用する2-in-1デバイスでアプリをダウンロードします。
結果1:あなたのアプリは使用できないか、お客様がデバイスのドッキングを解除して回転させ、使い慣れていないか快適な向きで使用するように強制されます。
結果2:あなたのアプリの直感的ではないデザインに苛立ちを感じ、代替案を見つけたり、アプリを完全に捨てたりします。

私は今、このアプリと一緒に消費者と開発者として戦っていますが、私はそれが嫌いです。アプリとして役立つように、それが提供する機能と同じくらい素晴らしいので、私は私のデバイスを使用する他のすべての方法に反する方向を使用するので、私は絶対にアプリが嫌いです。

あなたの顧客があなたのアプリを嫌うことは望ましくありません。


私は、これは直接の質問に答えていないので、私は興味がある人のためにもう少し詳細にそれを説明したい知っています。

開発者はコードを書くことが本当にうまくいく傾向があり、設計時には本当にひどいです。この質問は、コード質問のように聞こえますが、質問者は確かにコード質問のように感じますが、実際には設計上の質問です。

質問は本当に「どのように私のUIをデザインするのですか?質問者は機能するようにUIをデザインし、ポートレートモードでしか見えないようにすることを選択しました。私はそれが開発時間を節約することだったと思うか、アプリのワークフローが特にポートレイトレイアウトに役立つからです。しかし、これらの理由は、適切な設計を促す重要な要素をすべて無視してしまいます。

  1. カスタマーエンゲージメント - あなたの顧客があなたのアプリにプルされていないと感じるようにしたいアプリを開く前に、顧客が行っていたことからスムーズに移行する必要があります。 (これはほとんどのプラットフォームで一貫した設計原則が採用されているため、ほとんどのアプリは似通っていますが、ほとんど同じではありません)。

  2. お客様の反応 - 顧客はアプリに積極的に反応します。彼らはそれを楽しむべきです。たとえそれが仕事のための給与アプリであっても、それを開いて時計を入れるのは楽しいことです。アプリはあなたの顧客の時間を節約し、代替案に対する不満を減らすはずです。 (ユーザーがあなたのアプリに対して憤慨してブランドに憤慨するアプリを嫌うアプリ)

  3. カスタマーのコンバージョン - 顧客がブラウジングからインタラクションまですばやく簡単に移動できるようにする。これは、インプレッションを収益に変換する、あらゆるアプリの最終目標です。 (収入を生成しないアプリは、ビジネスの観点から、構築するためにあなたの時間の無駄です。)

設計が不十分なUIは、最終的には減収につながる顧客エンゲージメントと応答を低減します。モバイルセントリックな世界(特にポートレート/風景表示モードのテーマ)では、これはなぜ敏感なウェブデザインが大きな問題であるかを説明しています。 Walmart Canada introduced responsive design on their website in November 2013 and saw a 20% increase in customer conversion. O'Neill Clothingはレスポンシブウェブデザインとrevenue from customers using iOS devices increased 101.25%, and 591.42% from customers using Android devicesを実装しました。

アプリを1つの表示モードにしないでください。それを反応させて、かわいくする。

+1

私はそれがうまく設計されたUIであることを理解し、同意します。しかし、それはあなたがそうする必要があるかもしれないという事実を変えることはありませんし、それにもかかわらず、その枠組みは一般的にそれらの能力を持つべきです。将来のアプリがどのようなものになり必要なのかは決して分かりませんので、問題はまだ有効です。 –

+1

あなたは間違っていません。私は、私の答えは、不必要にこれを行ういくつかのアプリで欲求不満を感じ、その経験を完全に失ってしまったと思う。私は、表示モードをロックするための合法的なケースの数が極限的に少ないことを言います。これは他の問題を思い起こさせます。コードを知っているため、UIやデザインのやり方や基本的なベストプラクティス(\ AppData - EWWWWにインストールされたJavaアプリケーション)を学習することなく、多くのアマチュア開発者がアプリケーションを書くことができます。 – Thomas

+0

私は知っている..あなたと全く同感!乾杯 –

関連する問題