web-dev-qa-db-ja.com

xml属性singleLineはAndroidで非推奨ですか?

singleLineは、次のようなTextViewおよびEditTextのxmlレイアウトファイルで使用されます。

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:singleLine="true" />

一部の人々 on SO say singleLineは非推奨ですが、 他の人々 はまだ使用することを提案しています。 maxLines="1"は機能しません。 ( herehere 、および here を参照)

ドキュメントは、この質問に答えるために行くべき場所です。 ここで、彼らは言う:

この定数はAPIレベル3で廃止されました

この属性は非推奨です。代わりにmaxLinesを使用して静的テキストのレイアウトを変更し、編集可能なテキストビューの代わりにinputType属性でtextMultiLineフラグを使用します(singleLineとinputTypeの両方が指定されている場合、inputTypeフラグがオーバーライドしますsingleLineの値)。

ただし、 TextView docs では、 Android:singleLine またはfor setSingleLine またはfor setTransformationMethod 。比較すると、同じTextViewドキュメントでは、STATUS_BAR_HIDDENおよびfitSystemWindowsは非推奨です。 singleLineの非推奨は省略ですか、それは「非推奨」でしたか?

この質問は 以前に尋ねられました ですが、質問の主な焦点ではありませんでした(そして答えられませんでした)。

61
Suragch

あなたの質問に対する答えは、すでにSO リンク先の投稿 のいずれかにあると思います。残念ながら、singleLinesの廃止は黒白問題ではありません。

それはis非推奨ですが、notいつでもどこでもすぐに行くことです。

後継のmaxLinesに比べてパフォーマンスが低いため、廃止されました。 SingleLineTransformationMethod を使用して、高さを「ジャスト」調整するTextViewとは異なり、maxLinesに配置した文字列の改行とキャリッジリターンを置き換えます。 TextViewの行数に基づいており、文字列の置換は行いません。

この文字の置換方法は、singleLine予期しない方法で壊れる になる可能性があることも意味しました(たとえば、カスタムフォントを使用する場合)。これらのパフォーマンスと信頼性の問題が原因で廃止されました。

ただし、はどこにも行きません。なぜなら、、あなたがリンクしたSO投稿として、多くの古いAndroidアプリケーションでまだ使用されているからです- andそれでも有用な場合があります(たとえば、1行にentireテキストを表示し、復帰と改行を無視する場合)。

非推奨は必ずしもAPIがなくなることを意味しないことに注意してください。これは、その使用が推奨されていないことを意味しますが、許可される場合があります。

45
ugo

非推奨の属性が変更で追加されました d24b8183b9 これは、Googleの内部SCMからのダンプにすぎません:

//branches/cupcake/...@130745からの自動インポート

変更からわかるように、_core/res/res/values/attrs.xml_ diff は@deprecated docコメントを追加しますが、_core/Java/Android/widget/TextView.Java_ diffsetSingleLine()のドキュメントコメント。

Googleの内部SCM履歴にアクセスできないと、_attrs.xml_ docコメントで上記の変更を正確に引き起こした原因を知ることはできませんが、質問については

singleLineの非推奨は省略ですか、それは「非推奨」でしたか?

可能な答えの1つは次のとおりです。TextViewの単一行は非推奨ではなく、「非推奨」でもありませんが、ビューが編集可能か、パスワードフィールドか、単一/マルチラインネス。

19
ozbek

TextView (v5.1.0 r1)の公式grepcodeで:

Android:singleLineには@Deprecatedアノテーションが付いていません。

setInputType メソッドにもこれがあります:

boolean singleLine = !isMultilineInputType(type);

// We need to update the single line mode if it has changed or we
// were previously in password mode.
if (mSingleLine != singleLine || forceUpdate) {
    // Change single line mode, but only change the transformation if
    // we are not in password mode.
    applySingleLine(singleLine, !isPassword, true);
}

setInputTypemSingleLine値をオーバーライドします。

編集:このxml属性は正式に廃止されました。 ( API 3?以降 )。 AndroidStudio xmlエディターで表示できるようになりました。

9
Täg

singleLine IS非推奨。説明は不要です。

唯一の問題は、間違ったドキュメントです。
「編集可能なテキストビューの代わりにtextMultiLine属性でinputTypeフラグを使用する」は、singleLineを使用して達成したいことの正反対です。

代わりにAndroid:inputType="text"

5

Android Studio 2.2.1は非推奨としてsingleLineにフラグを立てます。

Android:singleLine="false"

うまく機能しますが、

Android:maxLines="2"

ではない。

4
Seb

Android Studioは非推奨であると主張していますが、実際には、単一行のみを許可する編集テキストがありました。

maxLines="1"を追加すると、改行文字が許可されるようになりましたが、これは私たちのニーズには適していません。

そこで、singleLine="true"の使用に戻りました。

4
EpicPandaForce

ディスカッションに情報を追加するために、Lintには次のエラーがあります。

ellipsizemaxLines=1を組み合わせると、一部のデバイスでクラッシュする可能性があります。lintの以前のバージョンでは、singleLine=truemaxLines=1に置き換えることをお勧めしますが、ellipsize

詳細: https://issuetracker.google.com/issues/369500 "

だから、singleLineが今だと思うし、新しい用語を思い付くべきだと思う...「非推奨」?

4
Rui

Android:inputType="text"を追加し、Android:maxLines="1"を削除しましたが、うまくいきました。

3
Divya

Android:maxLines="1"およびAndroid:minLines="1"を提供するだけでは、キーボードactionNext関連の問題を解決できません。同じためにAndroid:inputType="text"を使用します。

1
oj24031989

簡単な代替方法、使用:Android:maxLines="1"

0