質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Android

    6621questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3778questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Kotlin

    359questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

AndroidでテキストをTextView枠内に収めたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,874

hiyokko_android

score -10

Android Studio Kotlinで、

TextViewからテキストがはみ出る時は、フォントサイズを自動調整して、テキストビュー内に納めるようにしようと思って下記コードを書いているのですが、必要以上に小さくなってしまい、うまくいきません。
どこが間違ってるのかもしわかりましたら教えていただきたいです。

fun TextView.adjustSizeFit () {
//    // テキストの横幅取得
//    var textWidth = paint.measureText(this.getText().toString());
//    val textLenght = length()
//    val newTextSize = textSize * (textWidth / textLenght / textSize)
//    setTextSize(TypedValue.DENSITY_DEFAULT, newTextSize);

    val MIN_TEXT_SIZE : Float = 12.0f
    val paint : Paint = Paint();

    val viewWidth = getWidth();
    val viewHeight = getHeight();

    //    適当に大きめの数値からスタート
    var textSize = 300f;

    paint.setTextSize(textSize);

    var fm : Paint.FontMetrics = paint.getFontMetrics();
    var textHeight : Float = (Math.abs(fm.top)) + (Math.abs(fm.descent)) as Float;

    var textWidth : Float = paint.measureText(this.getText().toString());
    while (viewWidth < textWidth || viewHeight < textHeight){
        if (MIN_TEXT_SIZE >= textSize){
            textSize = MIN_TEXT_SIZE;
            break;
        }

        textSize--;

        paint.setTextSize(textSize);

        fm = paint.getFontMetrics();
        textHeight = (Math.abs(fm.top)) + (Math.abs(fm.descent)) as Float;
        textWidth = paint.measureText(this.getText().toString());
    }
    setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

Kotlinではありませんが、この辺を参考にしてうまくいきませんか?
【Android】横幅に合わせてテキストサイズを調整するTextView


いまさらな覚書。

API 26から導入されるAutosizing TextViewsを用いれば、上記サイトのようなループで最適サイズを探すようなコードを作らずとも、自動的に最適なサイズを設定してくれるようだ。
Autosizing TextViews

ただし、フォントサイズを無段階に調整できるわけではないので、どんなときでもTextViewの幅ぴったりに収まるようなサイズを選択するのは難しそう(不可能?)。

Autosizing TextViewsの実験画像

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/14 17:16

    すみませんが、まさにそのサイトを参考にしてkotlinで書いたコードが載せてあるコードなのですが。。。。。
    テラテイル使ってまもないですが、コードって見てもらえないのですね。。

    キャンセル

  • 2017/09/14 17:19

    その載せてあるサイトのままでは余計うまくいかないので、いろいろ試行錯誤して改良して、まだうまくいってないのが載せてあるコードです。

    キャンセル

  • 2017/09/15 00:56

    私の回答が間抜けなものだったことは申し訳ないですが、他の方の回答を待たず1日で閉じてしまうとは、随分と忙しいことですね。私など回答し始めて間もないペーペーなのに、そのペーペーの所業でteratailを見切ったかのようなことを言われてもねえ・・・。

    キャンセル

  • 2017/09/15 12:49

    はい、そうですね。

    キャンセル

check解決した方法

-5

解決してないですが、自分で解決するのでクローズします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Android

    6621questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3778questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Kotlin

    359questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。