先日、お稽古中に模写したサンプルでお目にかかった「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の幅を定義
さくっといきます。答えは、こちら。
emsに整数値を指定すると、TextViewの幅を決めることができると書かれてます。
ここで疑問が2つ。emsの値としては、10とか53とか整数値を設定するんですが、じゃあ「ems=“1”」でどれくらいの幅になるのか。
もうひとつの疑問は、幅の設定なら2つ上の「layout_width」属性でも定義しているけど違いがあるのか、です。
ems=“1"の幅は
明記されているのを見つけることができなかったのですが、「CSSの1em」に似たようなものかな?という感じ。ざっくり書くと1em=1文字分の幅のようです。実際に文字入力欄に「android:ems=“10”」を設定して、文字入力してみた結果がこちら。
それぞれXperia Z3 Compact SO-02Gで表示してます。設定でフォントのサイズを「特大」と「中(デフォルト)」にしていますが、文字サイズに合わせて、入力欄の幅が変化していますが、文字数は同じなのが分かります。
ただし、文字種によって、きっちり10文字という訳ではないようで、どうやらemsの基準になるのは、半角数字を倍にした大きさのようです。
あと、こちらがNexus 7 2013 で試したスクリーンショット。
layout_widthとの違い
layout_widthについては、こちらに記載があります。layout_widthに指定できるのは、wrap_content、match_parentの他に、数値を指定するpx、dp、sp、in、mm。
設定できるattribute(属性)がemsとは異なります。そして、layout_widthに「wrap_content」以外の属性を設定した場合は、layout_widthの設定が採用され、emsの設定は無視されます。
あと、layout_widthは、TextViewや EditViewに必須な要素なので、省略すると警告が出ますね。
emsを使う場面
文字数を目安に Viewの幅を指定したい場合は、layout_widthに wrap_contentを設定して、別途 emsを設定すれば良さそうです。 【参考サイト】
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)