Androidでlayout_weightをスマホとタブレットで異なる値にする

# 前書き

AndroidのUIを作る時に、スマホでは画面のこれぐらいの割合で表示したいけど、タブレットの時は別の割合で表示したい、という場面があるかと思います。
今回はその実装をするまでに行った過程を紹介したいと思います。

# やりたいこと

例として、スマホの場合はボタン1を40%、ボタン2を60%、
タブレットの場合はボタン1を10%、ボタン2を90%の縦幅で表示したいとします。

↓スマホの場合
![Screenshot_2016-01-10-11-38-52.png](https://qiita-image-store.s3.amazonaws.com/0/100736/4243732b-180a-7a69-67e5-68e87b9d7d67.png)

# dimenでうまくやろうとしてみた

[超簡単！xmlファイルの変更だけでできるAndroidのタブレット対応](http://qiita.com/suzukihr/items/1a3204e6c713cf870f8d)の記事を参考にしつつ、dimens.xmlとvalues-sw600dp/dimens.xmlを使ってweightを定義すればいけるんじゃないかと思ってやってみました。

```xml:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="@dimen/button1_weight"
        android:text="button1" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="@dimen/button1_weight"
        android:text="button2" />

</LinearLayout>
```

```xml:values/dimens.xml
<resources>
    <dimen name="button1_weight">2</dimen>
    <dimen name="button2_weight">3</dimen>
</resources>
```

```xml:values-sw600dp/dimens.xml
<resources>
    <dimen name="button1_weight">1</dimen>
    <dimen name="button2_weight">9</dimen>
</resources>
```

しかし実行するとこんなエラーが出てきます。

```
Integer types not allowed (at 'button1_weight' with value '2').
```

IntegerがダメならFloat？？と思ってやってみたものの変わらず。
どうやら、dimensに定義するのは数値＋単位でないとダメなようです。

# 解決策

いい情報が見つかりました。
http://stackoverflow.com/questions/9461872/passing-layout-weight-reference-from-dimensions-dimens
dimensionsを使うのではなく、integers.xmlを新しく定義してそちらを使えと。
やってみます。

```xml:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="@integer/button1_weight"
        android:text="button1" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="@integer/button2_weight"
        android:text="button2" />

</LinearLayout>
```

```xml:values/integers.xml
<resources>
    <integer name="button1_weight">2</integer>
    <integer name="button2_weight">3</integer>
</resources>
```

```xml:values-sw600dp/integers.xml
<resources>
    <integer name="button1_weight">1</integer>
    <integer name="button2_weight">9</integer>
</resources>
```

# 実行結果

* スマホ
![Screenshot_2016-01-10-11-38-52.png](https://qiita-image-store.s3.amazonaws.com/0/100736/4243732b-180a-7a69-67e5-68e87b9d7d67.png)


* タブレット
![スクリーンショット 2016-01-10 11.27.08.png](https://qiita-image-store.s3.amazonaws.com/0/100736/0f918a2b-b0eb-1eba-08a4-d12758ed33bf.png)