2017-08-19 7 views
-1

私はラジオアプリで作業していましたが、私は携帯電話のタブレットとポートレートモードで表示するように強制しました。 これを達成するためにこれまで私が行ってきたことがここにあります。タブレット用の横向きモードと携帯用のポートレートを強制的に使用する

まず、res.valuesにboolリソースを入れて、画面サイズを確認します。

// From my res/values/bool.xml(sw600 and 720)dp. 

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

// res/values/bool.xml 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="portrait_only">true</bool> 
</resources> 

私は、主な活動にブール値をチェックすることによって、コードを要求された画面の向きを余儀なくされました。

 @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // locking out landscape screen orientation for mobiles 
     if(getResources().getBoolean(R.bool.portrait_only)){ 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
     // locking out portait screen orientation for tablets 
     if(getResources().getBoolean(R.bool.landscape_only)){ 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     } 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 

    } 
} 

これまでのところ、これはかなりうまくいきました。今私は持っている問題があります。

タブレット用のポートレートモードをロックアウトするためのコードを実装したとき、私のアプリは横向きに切り替えてから数秒間ポートレートに切り替わりました。私はそれが最初に肖像画で始まっていないことをどうやって確認しますか?それはランドスケープで開始する必要があります。

+0

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – Selvin

+0

setContentView()の前にコードを呼び出していますか? – Juan

答えて

0

I最終的に私の問題の解決策を見つけました。私は、値のリソースファイル内の代替画面ビューへの参照を与えていませんでした。あなたが私のbool.xmlリソースファイルを編集したところで、私は期待通りの結果を得ました。

bool.xml (mobile) 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="portrait_only">true</bool> 
    <bool name="landscape_only">false</bool> 
</resources> 

// bool.xml (sw600dp) 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="portrait_only">false</bool> 
    <bool name="landscape_only">true</bool> 
</resources> 

// bool.xml (sw720dp) 
    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
     <bool name="portrait_only">false</bool> 
     <bool name="landscape_only">true</bool> 
    </resources> 

これで、私の活動は、必要に応じて、要求された画面の向きで開始されます。

0

通知をキャンセルする前にヌルチェックを追加するだけです。正しく向きを変更するために

@Override 
     protected void onDestroy() { 
      if(radioService != null){ 
      radioService.cancelNotification(); 
     } 
     super.onDestroy(); 
} 

、あなたはマニフェストのアクティビティタグに以下を追加する必要があります -

<activity 
    android:name="com.ABC" 
    android:configChanges="keyboardHidden|orientation|screenSize"> 
</activity> 

そして、あなたのレイアウトを設定する前にsetRequestedOrientation()を呼び出してくださいすなわち

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // locking out landscape screen orientation for mobiles 
     if(getResources().getBoolean(R.bool.portrait_only)){ 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
     // locking out portait screen orientation for tablets 
     if(getResources().getBoolean(R.bool.landscape_only)){ 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     } 

     setContentView(R.layout.activity_main); 
} 
+0

これでエラーは取り除かれましたが、アプリは縦書きで数秒間表示されてから、ランドスケープに切り替わります。私は肖像画で始まる活動を望んでいません。どのようにラウンドを得るのですか? – benruty

+0

これをマニフェストファイルに追加しましたか? android:configChanges = "keyboardHidden | orientation | screenSize"アクティビティタグ内に追加しましたか?これがうまくいかない場合はお知らせください。 –

+0

私はそれを追加しましたが、問題を解決しませんでした。代わりに、適切にレンダリングする前に、ポートレートモードのランドスケープUIで数秒間開いた – benruty

関連する問題