bestsource

Android TextView : "setText로 표시된 텍스트 연결 안 함"

bestsource 2023. 10. 26. 21:17
반응형

Android TextView : "setText로 표시된 텍스트 연결 안 함"

setText()를 사용하여 텍스트를 설정하는 방법은 다음과 같습니다.

prodNameView.setText("" + name);

prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));

첫번째는 단순한 사용이고 두번째는 텍스트를 포맷 텍스트로 설정하는 것입니다.

Android Studio가 너무 재미있어요, 메뉴를 사용해봤는데 위의 두 줄에 대한 제안을 받았습니다.

enter image description here

setText와 함께 표시되는 텍스트를 연결하지 마십시오.플레이스홀더와 함께 리소스 문자열을 사용합니다.덜...(Ctrl+F1)

TextView#set 호출 시텍스트:

  • Number# toString()을 호출하여 형식 번호를 지정하지 마십시오. 이 경우 분수 구분자와 로케일별 숫자를 제대로 처리할 수 없습니다.대신 적합한 형식 사양(%d 또는 %f)이 있는 String# 형식을 사용해 보십시오.
  • 문자열 리터럴(예: "Hello")을 전달하여 텍스트를 표시하지 마십시오.하드코딩된 텍스트는 다른 언어로 제대로 번역할 수 없습니다.대신 Android 리소스 문자열을 사용하는 것을 고려해 보십시오.
  • 텍스트 청크를 연결하여 메시지를 작성하지 마십시오.이러한 메시지는 제대로 번역할 수 없습니다.

내가 이걸 위해 무엇을 할 수 있을까요?누구든지 그것이 무엇인지 그리고 제가 무엇을 해야 하는지 설명을 도와줄 수 있습니까?

리소스에 getString의 오버로드 버전이 있으며 이 버전은 다음과 같습니다.varargs활자의Object: getString(int, java.lang).개체...).strings.xml에서 문자열을 올바르게 설정한 경우 올바른 자리 표시자를 사용하여 이 버전을 사용하여 최종 문자열의 형식화된 버전을 검색할 수 있습니다.예.

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

getString(R.string.welcome_message, "Test", 0);

Android는 문자열을 반환합니다.

 "Hello Test! you have 0 new messages"

대해서 setText("" + name);

당신의 첫번째 예는,prodNameView.setText("" + name);말이 안 돼TextView는 null할 수 .TextView는 null 값을 처리할 수 있습니다.이름이 null이면 텍스트가 그려지지 않습니다.

수락한 답변에서 %1$s%2$d와 혼동하지 마십시오.여기 몇 가지 추가 정보가 있습니다.

  • 형식 지정자는 다음 구문일 수 있습니다.

%[argument_index$]format_specifier

  1. 옵션인 argument_index는 "%" 뒤에 "$"로 끝나는 숫자로 지정되며 인수 목록에서 지정된 인수를 선택합니다.첫 번째 인수는 "1$", 두 번째 인수는 "2$" 등으로 참조됩니다.
  2. 필수 형식 지정자는 인수의 형식 지정 방법을 나타내는 문자입니다.지정된 인수에 대한 유효한 변환 집합은 인수의 데이터 유형에 따라 달라집니다.

회색 부분을 프로그래밍 방식으로 삽입한 다음과 같은 형식의 문자열을 생성합니다.

안녕하세요.Test! 당신이 가지고 계신0새 메시지

당신의.string resource:

"welcome_">< "welcome_">안녕하세요.%1$s! 당신은 가지고 있습니다.%2$d >지 </string >

하라구요.string substitution아래에 제시된 바와 같이:

getString(R)).문자열).welcome_message,"Test",0);

참고:

  • %1$s이(가) "테스트" 문자열로 대체됩니다.
  • %2$d는 문자열 "0"으로 대체됩니다.

같은 보풀 오류 메시지를 우연히 발견하고 이런 식으로 해결했습니다.

처음에 내 코드는:

private void displayQuantity(int quantity) {
    TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
    quantityTextView.setText("" + quantity);
}

다음 오류가 발생했습니다.

Do not concatenate text displayed with setText. Use resource string with placeholders.

그래서 제가 추가를 해봤습니다.strings.xml

<string name="blank">%d</string>

제 첫번째 "" + 제 번호(수량)의 자리 표시자입니다.

참고: 내quantityvariable은 이전에 정의된 것으로 문자열에 추가하고자 했던 것입니다.결과적으로 나의 코드는

private void displayQuantity(int quantity) {
    TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
    quantityTextView.setText(getString(R.string.blank, quantity));
}

이 일이 있은 후로, 저의 실수는 사라졌습니다.앱의 동작은 변하지 않았고 내 수량은 보풀 오류 없이 지금 내가 원하는 대로 계속 표시되었습니다.

setText() 메서드 안에 텍스트를 연결하지 말고 String에서 원하는 것을 연결하고 해당 String 값을 setText() 메서드 안에 넣습니다.

ex: 올바른 방법

int min = 120;
int sec = 200;
int hrs = 2;

String minutes = String.format("%02d", mins);
String seconds = String.format("%02d", secs);
String newTime = hrs+":"+minutes+":"+seconds;

text.setText(minutes);

setText()를 다음과 같이 연결하지 마십시오.

text.setText(hrs+":"+String.format("%02d", mins)+":"+String.format("%02d", secs));

스레드를 확인하고 이 스레드와 같은 자리 표시자를 사용해야 합니다(테스트되지 않음).

<string name="string_product_rate_with_ruppe_sign">Price : %1$d</string>

String text = String.format(getString(R.string.string_product_rate_with_ruppe_sign),new BigDecimal(price).setScale(2, RoundingMode.UP));
prodOriginalPriceView.setText(text);

화내지 마요, 너무 간단해요.

String firstname = firstname.getText().toString();
String result = "hi "+ firstname +" Welcome Here";
            mytextview.setText(result);

문제는 당신이 돈을 내고 있기 때문입니다.""모든 줄의 맨 처음에

lint는 전달되는 인수를 검색합니다.setText다음과 같은 경고가 관련된 경우 경고를 생성합니다.

텍스트 청크를 연결하여 메시지를 작성하지 마십시오.이러한 메시지는 제대로 번역할 수 없습니다.

모든 문자열을 연결할 때"".

전달 중인 인수가 이미 텍스트이므로 이 연결을 제거합니다.또한 사용할 수 있습니다..toString()당신의 문자열을 연결하는 대신에 다른 곳이 필요하다면.""

String으로 고쳤습니다.체재를 갖추다

다음을 위하여:

textViewAddress.setText("Address"+address+"\n"+"nCountry"+"\n"+"City"+"city"+"\n"+"State"+"state")

다음:

textViewAddress.setText(
     String.format("Address:%s\nCountry:%s\nCity:%s\nState:%s", address, country, city, state));
       

이걸 쓰면 돼요, 저한테 효과가 있어요.

title.setText(MessageFormat.format("{0} {1}", itemList.get(position).getOppName(), itemList.get(position).getBatchNum()));
prodNameView.setText("" + name); //this produce lint error

val nameStr="" + name;//workaround for quick warning fix require rebuild
prodNameView.setText(nameStr);

리소스에 액세스할 수 없고 Kotlin을 사용하는 경우와 유사한 경우 다음을 수행할 수 있습니다.

val v = "hello"

"placeholder $v placeholder".let {
                    textView.text = it
                }

i18n을 지원할 필요가 없는 경우 Android Studio에서 이 보풀 검사를 비활성화할 수 있습니다.

파일 -> 설정 -> 편집기 -> 검사 -> 안드로이드 -> 보풀 -> TextView 국제화 (불체크)

답변이 너무 늦었지만 우선 변수에 데이터를 저장한 다음 변수 이름을 입력하면 될 것 같습니다. 예:-

// Java syntax
    String a = ("" + name);
    String b = "" + String.format(getString(R.string.string_product_rate_with_ruppe_sign);
    String c = "" + new BigDecimal(price).setScale(2, RoundingMode.UP));
    
    prodNameView.setText(a);
    prodOriginalPriceView.setText(b, c);

textView인 경우 editText에서 myTextView.text = ("Hello World")를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/33164886/android-textview-do-not-concatenate-text-displayed-with-settext

반응형