Mono Works

チラシのすきま

メモ:XML要素の android:ems

先日、お稽古中に模写したサンプルでお目にかかった「android:ems」について調べていて、分かったこと。

レイアウトファイル(\app\src\main\res\layout\activity_main.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"/>

</LinearLayout>

emsはTextViewの幅を定義

さくっといきます。答えは、こちら。

R.attr  |  Android Developers

emsに整数値を指定すると、TextViewの幅を決めることができると書かれてます。

ここで疑問が2つ。emsの値としては、10とか53とか整数値を設定するんですが、じゃあ「ems=“1”」でどれくらいの幅になるのか。

もうひとつの疑問は、幅の設定なら2つ上の「layout_width」属性でも定義しているけど違いがあるのか、です。

ems=“1"の幅は

明記されているのを見つけることができなかったのですが、「CSSの1em」に似たようなものかな?という感じ。ざっくり書くと1em=1文字分の幅のようです。実際に文字入力欄に「android:ems=“10”」を設定して、文字入力してみた結果がこちら。

androiddevmemo20151120_01

それぞれXperia Z3 Compact SO-02Gで表示してます。設定でフォントのサイズを「特大」と「中(デフォルト)」にしていますが、文字サイズに合わせて、入力欄の幅が変化していますが、文字数は同じなのが分かります。

ただし、文字種によって、きっちり10文字という訳ではないようで、どうやらemsの基準になるのは、半角数字を倍にした大きさのようです。

あと、こちらがNexus 7 2013 で試したスクリーンショット。

androiddevmemo20151120_02

layout_widthとの違い

layout_widthについては、こちらに記載があります。layout_widthに指定できるのは、wrap_content、match_parentの他に、数値を指定するpx、dp、sp、in、mm。

R.attr  |  Android Developers

設定できるattribute(属性)がemsとは異なります。そして、layout_widthに「wrap_content」以外の属性を設定した場合は、layout_widthの設定が採用され、emsの設定は無視されます。

あと、layout_widthは、TextViewや EditViewに必須な要素なので、省略すると警告が出ますね。

emsを使う場面

文字数を目安に Viewの幅を指定したい場合は、layout_widthに wrap_contentを設定して、別途 emsを設定すれば良さそうです。 【参考サイト】

R.attr | Android Developers

メモ:アプリのレイアウト(Viewの幅と高さの指定) | Mono Works

コメント

コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)
執筆者
"ぽぽろんち" @pporoch
pporoch120
Mono Worksの中の人。好きなことをつらつらと書き留めてます。
ギターを始めてから 練習動画をYouTubeにアップしてます。ご笑納ください。
"DQX@ぬここ(UD487-754)、コツメ(NO078-818)"
採用案内