developer tip

xml 속성 singleLine이 Android에서 더 이상 사용되지 않습니까?

optionbox 2020. 11. 28. 09:08
반응형

xml 속성 singleLine이 Android에서 더 이상 사용되지 않습니까?


singleLine/ 대한 XML 레이아웃 파일에 사용되는 TextViewEditText다음과 같은 :

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

SO의 일부 사람들singleLine 은 더 이상 사용되지 않는다고 말하고 다른 사람들은 여전히 사용을 제안합니다. 때로는 maxLines="1"작동하지 않을 때 사용하는 것이 필요한 것처럼 보입니다 . ( 여기 , 여기여기 참조 )

문서는이 질문에 답할 수있는 곳이어야합니다. 여기에서 그들은 말한다 :

이 상수는 API 레벨 3에서 더 이상 사용되지 않습니다.

이 속성은 더 이상 사용되지 않습니다. maxLines대신 사용 하여 정적 텍스트의 레이아웃을 변경하고 textMultiLine편집 가능한 텍스트보기 대신 inputType 속성 플래그를 사용하십시오 (singleLine 및 inputType이 모두 제공되는 경우 inputType 플래그가 singleLine의 값을 대체합니다).

그러나 TextView 문서 에는 for android:singleLine또는 for setSingleLine또는 for에서 더 이상 사용되지 않는다는 표시가 없습니다 setTransformationMethod. 비교해 보면 동일한 TextView 문서는 다른 것들이 좋아 STATUS_BAR_HIDDEN하고 fitSystemWindows더 이상 사용되지 않는다고 명시합니다 . 그렇다면 singleLine지원 중단은 생략 된 것입니까, "사용되지 않는 것"입니까, 아니면 무엇입니까?

이 질문은 이전에 질문 되었지만 질문의 주요 초점이 아니 었으며 답변되지 않았습니다.


귀하의 질문에 대한 답변은 귀하가 링크 한 SO 게시물 중 하나에 이미 있다고 생각합니다 . 불행히도의 지원 중단은 singleLines흑백 문제가 아닙니다.

그것은 되어 사용되지 않는,하지만되어 있지 곧 아무데도.

후속 버전에 비해 성능이 좋지 않기 때문에 더 이상 사용되지 않습니다maxLines . 줄 수를 기준으로 "단지"의 높이를 조정하고 문자열을 바꾸지 않는와 달리에 SingleLineTransformationMethod배치 한 문자열의 줄 바꿈 및 캐리지 리턴을 대체 하는 데 사용 됩니다 .TextViewmaxLinesTextView

이 문자 교체 방법은 예기치 않은 방식으로 깨질singleLine있음을 의미하기도합니다 (예 : 사용자 정의 글꼴을 사용하는 경우). 이러한 성능 및 안정성 문제로 인해 지원 중단이 발생했습니다.

그러나 있기 때문에 어디서나 않을 것이다 (가) SO 게시 당신이 상태로 연결, 그것은 많은 오래된 안드로이드 응용 프로그램에서 사용 여전히, 그리고 그것은 여전히 유용 때때로이다 (예를 들어, 당신은 표시 할 때 전체 한 줄에 텍스트를 무시 캐리지 리턴 및 개행).

지원 중단이 반드시 API가 사라지는 것을 의미하지는 않습니다. 이는 사용을 권장하지 않지만 허용 될 수 있음을 의미합니다.


deprecated 속성이 변경 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문서 주석 에서 위의 변경 사항을 정확히 알 수는 없지만 질문에 대해서는

그렇다면 singleLine지원 중단은 생략 된 것입니까, "사용되지 않는 것"입니까, 아니면 무엇입니까?

한 가지 가능한 대답은 다음과 같습니다. TextView'의 단일 행은 더 이상 사용되지 않거나 "사용되지 않음"이 아니었지만보기를 편집 할 수 있는지, 암호 필드인지 또는 단일 / 다중 행에 영향을주는 다른 입력 유형 플래그를 사용하는지 고려하도록 향상되었습니다. .


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 편집기에서 볼 수 있습니다.


singleLine사용되지 않습니다. 논의 할 필요가 없습니다.

유일한 문제는 잘못된 문서입니다.
" 편집 가능한 텍스트보기 대신 속성 에서 textMultiLine플래그 사용" inputType은를 사용하여 달성하려는 것과 정반대입니다 singleLine.

그 대신 android:inputType="text".
나를 위해 그것은 내가 원하는 것을 정확히했습니다-줄 바꿈없이 한 줄로 편집했습니다.


Android Studio 2.2.1이 singleLine을 더 이상 사용되지 않는 것으로 표시한다고 추가 할 것이라고 생각했습니다. 그러나 내가 찾은 것은 내 경우에 다음과 같습니다.

android:singleLine="false"

잘 작동하지만

android:maxLines="2"

하지 않습니다.


Android Studio는 더 이상 사용되지 않는다고 주장하지만 실제로는 한 줄만 허용해야하는 편집 텍스트가있었습니다.

추가하면 maxLines="1"우리의 필요에 적합하지 않은 개행 문자가 허용됩니다.

So we went back to using singleLine="true".


Just for adding some more information to the discussion, Lint now has the following error:

"Combining ellipsize and maxLines=1 can lead to crashes on some devices. Earlier versions of lint recommended replacing singleLine=true with maxLines=1 but that should not be done when using ellipsize.

More info: https://issuetracker.google.com/issues/36950033"

So, I guess that singleLine is now, and I think we should come up with a new term... "deprecatedish"?


I have just added android:inputType="text"and removed android:maxLines="1", it worked fine for me.


Only providing android:maxLines="1" and android:minLines="1" wont solve the issue of keyboard actionNext related issue. Use android:inputType="text" for the same.


Simple alternate way, use: android:maxLines="1"

참고URL : https://stackoverflow.com/questions/30028697/is-the-xml-attribute-singleline-deprecated-or-not-in-android

반응형