6920


タブレットとスマホのレイアウトを分けるために､layoutフォルダを`layout`と`layout-
sw600dp-w720dp`で分けたのですが､タブレットでアプリを起動しているにもかかわらず､スマホ用のレイアウトが表示されてしまいます｡
また横画面用のレイアウトも作成していて`layout-sw600dp-w720dp-
land`というフォルダでわけているのですが､そちらは正常に表示されています｡
原因がわかる方､または同じような経験をしていて解決したことがある方教えて下さい､よろしくお願いします｡

実行端末はNexus 7(2013)です｡


CC BY-SA 3.0
2015-02-22T05:45:57.177
6909
2015-02-22T10:33:15.007
7232
question
android android-layout
タブレットなのにスマホのレイアウトが適用される｡


経験はありませんが、API仕様書は読んで原因はこうじゃないかと思ったので回答します。

手っ取り早い解決方法:  
`layout-sw600dp-w720dp`→`layout-sw600dp`にリネーム  
[Nexus7(2012)のレイアウトに関する公式情報](http://android-
developers.blogspot.jp/2012/07/getting-your-app-ready-for-jelly-bean.html)  
画素数・画面サイズがアップしているがdpはそんなに変わってないはずなので使えるはず。  
縦横のレイアウトも分けたかったら  
`layout-sw600dp-land`,  
`layout-sw600dp-port`でどうでしょうか。

補足説明:  
`layout-sw600dp-w720dp`の`sw`と`w`ですが、  
以下のような判定をするらしいです。  
*[参考1](http://developer.android.com/guide/practices/screens_support.html) [参考2](https://stackoverflow.com/questions/14880746/difference-between-sw600dp-and-w600dp)

`-swNNNdp` 縦、横で短い方の辺の長さがNNNdp以上  
(portraitモード,landscapeモードで固定)  
`-wNNNdp` 今表示されている画面の横の長さがNNNdp以上

例えば、以下のような画面があったとします。

[code]

      **landscapeモードで表示**
        |-----720dp-----|
        |               |
        |             600dp
        |               |
        |---------------|
    
      **portraitモードで表示**
          |--600dp--|
          |         |
          |        720dp
          |         |
          |         |
          |---------|
    
[/code]

この時、`layout-sw600dp-w720dp`は  
原則(*)では以下のような判定になります。

portraitモード: sw600dpだが、w720dpではないので`layout`選択  
landscapeモード:sw600dpで、w720dpなので`layout-sw600dp-w720dp`選択

と、上記のような感じです。

*`layout`の判定式は言語やロケールの設定と異なり、  
条件にミスマッチしても必ずしもデフォルトが選択されるとは限らないそうです。  
[How to Support Multiple
Screens](http://developer.android.com/guide/practices/screens_support.html)に説明が書いてあったのでご一読を。


CC BY-SA 3.0
2015-02-22T10:33:15.007
6920
2015-02-22T10:33:15.007
2017-05-23T12:38:56.083
-1
2904
6909
answer