3

TextView#getMaxLines()は自分のアプリケーションで数週間問題なく使用しました。

Lint は、API 16+ ( #setMaxLines()API 1+...) でのみ利用可能であると通知していますが、(私の知る限り) この突然のフラグを引き起こすような変更は何もしていません - 私の min-sdk にはしばらくの間 8 でしたが、ソース管理にそれを証明するファイルがあります。

1) lint がこのエラーにランダムにフラグを立てているのはなぜですか? (明確にするために、最初にそれをキャッチする必要があったと言いたいのですが、これがフラグを立てるべきではなかったということを意味しているわけではありません)。

2) API 16 より前のデバイスで TextView の maxLines を取得する方法はありますか? ソースを確認しましたが、 2.2 デバイスで公開されているメソッドを使用してこの値を取得する方法を考案できませんでした。

4

3 に答える 3

26

のサポート ライブラリ v4に、よりシンプルなソリューションが追加されました。TextViewCompat

int maxLines = TextViewCompat.getMaxLines(yourtextView);

詳細については、この回答をご覧ください。

于 2015-12-10T12:52:05.237 に答える
4

リフレクションを使用できます:

Field mMaximumField = null;
Field mMaxModeField = null;
try {
    mMaximumField = text.getClass().getDeclaredField("mMaximum");
    mMaxModeField = text.getClass().getDeclaredField("mMaxMode");
} catch (NoSuchFieldException e) {
    e.printStackTrace();
}

if (mMaximumField != null && mMaxModeField != null) {
    mMaximumField.setAccessible(true);
    mMaxModeField.setAccessible(true);

    try {
        final int mMaximum = mMaximumField.getInt(text); // Maximum value
        final int mMaxMode = mMaxModeField.getInt(text); // Maximum mode value

        if (mMaxMode == 1) { // LINES is 1
            text.setText(Integer.toString(mMaximum));
        }
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

また:

おそらく、最善の方法は、maxLine 値を値のままにして、xml で値を設定し、コードで int リソースとして取得することです。

于 2013-04-27T19:23:36.633 に答える