TextViewの幅を文字数で設定します


88

本当にこれに対する答えを探しています

数値または文字に基づいてTextViewの幅を設定したい。したがって、常に3文字の幅にしたい場合は、それを設定すると、textSize設定に基づいて調整されます。これがないと、幅を50dip程度に設定する必要がありますが、フォントサイズによっては正しい場合とそうでない場合があります。


でディメンションを指定することでこれを行う方法がある可能性がありますsp
CommonsWare

@CommonsWare、ええ、機能する可能性のある1文字に等しいSPの数を教えていただければ(ただし、minEmsを使用して以下の私の答えを参照してください)。したがって、テキストサイズ= 30spで、3文字の幅が必要な場合、幅を90spに設定しますか?私はそれを試すことができたと思います。
フラグル

2
ええ、minEmsおそらくより良い答えです。
CommonsWare 2011年

回答:


177

私自身の質問に答える...

そして勝者は:minEms属性を設定する(android:minEms)!!!

つまり、「ems」は最も幅の広い文字、通常は「M」のサイズを指していることがわかります。したがって、EditTextまたはTextViewでminEmsを整数値(たとえば3)に設定すると、幅が3文字以上になるようにする必要があります。maxEmsも設定できます。

それで、このスレッドでのカイルの答えは間違っていましたが、私に答えを見つけさせたので、カイルに感謝します。


3
もちろん、これが実際に機能するかどうかを確認するためにまだテスト中ですが、これまでのところ、そのように見えます。
フラグル

8
また、この回答が指摘しlayout_widthているようにwrap_content、minEmsとmaxEmsが意図したとおりに機能する必要があることにも注意してください。
Jonik 2014

0

ほとんどのフォントは、すべての文字幅が同じになるように設定しているわけではありません。クーリエはおそらくこれに対して最もよく使われる例外ですが、たとえば、一般的にiとAの違いを見てください。これにより、あなたが求めていることは少し問題になります。


そうです、私はこの問題が解決されたことを望んでいました。したがって、文字で幅を設定し、表示時にそのフィールドのフォント特性を見つけて、それに基づいてどのくらいの大きさにするかを決定します。とても簡単な方法で、この問題が解決されたかどうかを本当に尋ねます。そうではないようですね。
フラグル

0

使用してみてください: android:maxLength="3"

これにより、テキストが特定の文字数に制限されます。


0

ems、一般的な信念に反して(または少なくともここのemsに関するほとんどのスレッドから)、単一の「M」の幅に基づいていません。

もともとはタイポグラフィと同じでしたが、Androidを含むデジタルメディアでは、使用する書体のサイズ、つまり高さ(アクセント記号や発音区別符号のパディングを除く)に意味がシフトしました。

つまりems、TextViewにを指定すると、それがtextSizeベースとして使用され、ems指定された値が乗算されます。

サンプルとして、16sp TextViewemsを4に設定すると、その幅は64sp幅になります。includeFontPaddingConstraintLayout内で2つのTextView(falseに設定)を並べて使用することで、簡単にテストできます(を活用するためlayout_constraintDimensionRatio)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.