一画面の文字数(文字サイズと画面サイズの割合)を取得

Androidアプリの画面設計をしていると、「一画面あたりの文字数」を取得したくなることがあります。「(画面全体に文字列を表示した場合の)一行の文字数」を取得し、それを元にテキストフィールドやボタンの横幅を決められれば、便利ですね。

すでに画面の大きさを取得する処理は試したことがありますから、後は文字サイズを取得するだけ。早速試してみましょう。

幸い、TextViewやButtonには、テキストサイズを取得するgetTextSize()メソッドがあります。この関数は、表示される文字の横幅を「ピクセル数」で返すものなので、今回の目的にはぴったりです。

画面サイズをgetTextSize()で得た値で割れば、(そのGUI部品に表示される文字で描画したときの)一行の文字数が算出できることになるでしょう。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);	
int displayWidth = metrics.widthPixels;

EditText text = new EditText(this);

float cols = displayWidth / text.getTextSize();

また、テキストを表示する部品に対して横幅を「文字数」で指定することもできます(setEms())。もっとも、表示される文字の大きさはフォントの種別や文字そのものの種別(全角/半角はもちろん、iとwなど文字によって異なる可能性もあります)で変わってきますから、指定文字数はあくまで「目安」ですが。

これでテキスト表示/入力を行うGUIコンポーネントを「画面上に占める割合(文字数)」で配置できるようになりました。ただ、スマートフォンなど画面が小さなAndroid端末では、画面そのもののサイズも意識して「最低限の大きさ」を確保したいところですね。