버튼 텍스트가 Lollipop의 모든 캡으로 강제되는 이유는 무엇입니까?


447

최근에 새로운 Nexus 9 태블릿 (Lollipop-API 21)을 사용하여 호환성을 테스트 한 내 앱 "Tide Now WA"에서

버튼 텍스트를 씁니다. 이 앱은 Android 2.3 및 Android 4.0을 사용하여 텍스트를 올바르게 작성합니다. 즉, 대문자와 소문자가 혼합되어 있습니다.

Nexus 9에서 동일한 앱을 실행하면 텍스트의 모든 문자가 대문자로 표시됩니다.

내 매니페스트에 다음 내용이 포함되어 있습니다.

uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"

내 코드 에서이 문제를 해결할 수 있습니까? 아니면 OS의 버그입니까?


대문자와 소문자를 어떻게 혼합 했습니까
N Sharma

그들은 같은 <문자열 이름 = "r1s1"> 시애틀 </ 문자열> 나의 strings.xml의에 정의되어 있습니다
user1644002

예. 21. 입력하기에는 너무 이릅니다. 죄송합니다
user1644002

23
머티리얼 (또는 API 21+의 DeviceDefault) 테마를 사용할 때 버튼 텍스트는 기본적으로 모두 대문자입니다. 의도 한대로 작동합니다.
alanv

답변:


636

왜 그런 일이 일어나고 있는지 모르겠지만 세 가지 사소한 시도가 있습니다.

  1. android:textAllCaps="false"당신의 사용layout-v21

  2. 프로그래밍 방식으로 버튼의 변환 방법을 변경하십시오. mButton.setTransformationMethod(null);

  3. Allcaps 스타일을 확인하십시오

참고 : public void setAllCaps(boolean allCaps), android:textAllCaps하다 가능한 API 버전 14에서.


# 1은 아무런 차이가 없었습니다. # 3을 수행하는 방법을 모르고 스타일이 없습니까? 이제 시도 # 2.
user1644002

2
예, 다음을 추가하십시오. btn [i] .setTransformationMethod (null); 감사합니다
user1644002

2
나는 Nikola의 대답을 해결책으로 받아들이고 있지만 질문의 다른 부분은 alanv가 제공 한 것으로 위의 의견에서 그 이유를 설명했습니다.
user1644002

1
textAllCaps XML attr은 API> 14 만 지원되므로 프로그래밍 방식을 사용했습니다. 감사합니다!
patrickjason91

3
나는 <item name="android:textAllCaps">false</item>스타일 정의에 사용 했다
누군가 어딘가에

169

다음은 values ​​/ themes.xml에서 수행 한 작업입니다.

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="buttonStyle">@style/MyButton</item>
    </style>

    <style name="MyButton" parent="Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
    </style>

8
API 레벨 14 이전 지원을 위해을 사용할 수 있습니다 <item name="textAllCaps">false</item>.
CommonsWare는

이것은 Widget.AppCompat.Button에만 적용됩니다. 더 일반적인 답변은 아래 Ashish Chaugule에 의해 제공됩니다. 즉, 테마 스타일에 직접 <item name = "android : textAllCaps"> false </ item>을 추가합니다. (질문은 원래 단추에 대해 특별히 요청되었지만, allCaps가 단추에 필요하지 않은 경우 메뉴 항목, 작업 등에 대해서는 원하지 않습니다.)
user2808624

1
나를 위해 작동하지 않았다. 내가 바뀔 때 일하러 buttonStyle갔다android:buttonStyle
Vasily Kabunov

2
XML에서 android:textAllCaps="false"(안드로이드 스튜디오 3.0을 사용하고 있습니다)
meyasir

107

이것은 버튼의 TransformationMethod를 설정하여 응용 프로그램 코드에서 수정 가능합니다.

mButton.setTransformationMethod(null);

Kotlin의 경우 구문은 다음과 같습니다. mButton.transformationMethod = null
Native_Mobile_Arch_Dev

66

android : textAllCaps = "false"를 설정하십시오. appcompat 스타일을 사용하는 경우 textAllCaps가 스타일 앞에 오도록하십시오. 그렇지 않으면 스타일이 스타일을 재정의합니다. 예를 들면 다음과 같습니다.

android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"

매력처럼 작동했지만 제 경우에는 다음과 같이해야했습니다. <style name = "textAppearanceButton"parent = "@ android : style / TextAppearance.Material.Widget.Button"> <item name = "android : textAllCaps"> false < / item> </ style>
Vfleitao

58

이 줄을 스타일에 추가

    <item name="android:textAllCaps">false</item>


52
나는 왜 그들이이 결정을 내 렸는지 알지 못합니다
Glenn Maynard

5
머티리얼 디자인의 본질에
맞기

가난한 사람들은 재료 디자인의 사각형 상자에 갇혀
eric

35

이것은 작동하고 있습니다 .... 코드에서 코드를 아래 코드에 추가하십시오.

android:textAllCaps="false"

U가 small을 입력하려는 대문자를 비활성화해야합니다.


32

Lollipop 기본값은 "textAllCaps true"와 함께 제공되므로 수동으로 false로 설정해야합니다.


5
잘 알고 있습니다. 안드로이드 버전 당 이러한 모든 기본값을 나열하는 사이트가 있다면?
Adam


19

모든 버튼에서 작동하는 더 쉬운 방법이 있습니다. 테마의 버튼 모양을 변경하고 다음을 시도하십시오.

값은 21 / styles.xml

<resources>
    <style name="myBaseTheme"
        parent="@android:style/Theme.Material.Light">
        <item name="android:colorPrimary">@color/bg</item>
        <item name="android:colorPrimaryDark">@color/bg_p</item>
        <item name="android:textAppearanceButton">@style/textAppearanceButton</item>
    </style>

    <style name="textAppearanceButton" parent="@android:style/TextAppearance.Material.Widget.Button">
        <item name="android:textAllCaps">false</item>
    </style>
</resources>

추신 : 머티리얼 디자인의 원칙을 따르는 것이 좋습니다. http://www.google.com/design/spec/components/buttons.html 버튼에 대문자 텍스트를 표시해야합니다


2
버튼 텍스트가 더 이상 버튼에 맞지 않을 때까지 디자인 지침을 따르는 것이 좋습니다.
누군가 어딘가에

구글은 스타일에 대해 이야기하는 것을 중단해야합니다-소문자 버튼으로 인해 거리에서 울고 졸리는 ppl이 있다는 것을 몰랐습니다!
bharal

11

XML 레이아웃에서 android.support.v7.widget.AppCompatButton을 사용하면 레이아웃 21을 갖거나 프로그래밍 방식으로 변경하는 것을 피할 수 있습니다. 당연히 이것은 AppCompat v7 라이브러리에서도 작동합니다.

<android.support.v7.widget.AppCompatButton
    android:id="@+id/btnOpenMainDemo"
    android:textAllCaps="false"
    style="@style/HGButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_main_demo"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"/>

도움이 되었기를 바랍니다.


11

XML에서 android : textAllCaps = "false" 줄을 사용하십시오 .

<Button
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/login_str"
            android:background="@color/colorBlue"
            android:textColor="@color/colorWhite"
            android:textAllCaps="false"
           />

9

Android Studio IDE에서는 필터 아이콘을 클릭하여 전문가 속성을 표시해야합니다. 그런 다음 textAllCaps속성 을 볼 수 있습니다. 확인 후 확인을 취소하십시오.


9

android:textAllCaps="false"버튼에 추가 할 수 있습니다 .

모든 버튼에 적용되는 앱 테마에 따라 버튼 텍스트가 대문자로 변환 될 수 있습니다. 속성 설정에 대한 테마 / 스타일 파일을 확인하십시오 android:textAllCaps.


9

자바:

yourButton.setAllCaps(false);

코 틀린 :

yourButton.isAllCaps = false

XML :

android:textAllCaps="false"

스타일 :

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="buttonStyle">@style/yourButtonStyle</item>
    </style>

    <style name="yourButtonStyle" parent="Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
    </style>

레이아웃에서 :

   <Button
      .
      .
      style="@style/yourButtonStyle"
      .
      .
   />

4

페이스 북 버튼 텍스트가 모든 대문자로 표시되어 여기에 도착한 경우 android:textAllCaps="false"xml 파일에 추가 하십시오. 그것은 나를 위해 일했다.


2

좋아, 방금 이것에 부딪쳤다. Lollipop의 버튼은 모두 대문자로 표시되며 글꼴은 'normal'로 재설정됩니다. 그러나 내 경우 (Android 5.02) 한 레이아웃에서 올바르게 작동했지만 다른 레이아웃에서는 작동하지 않았습니다!?

API 변경이 작동하지 않았습니다.
모든 대문자로 설정하려면 최소 API 14가 필요하고 글꼴은 여전히 ​​'정상'으로 재설정됩니다.

안드로이드 머티리얼 스타일은 스타일이 정의되어 있지 않으면 스타일을 강제로 변경하기 때문입니다.

: 쉬운 수정 내 경우에는 단지 있었다 각 활동에 대한 매니페스트에 스타일을 정의하는 것입니다 그래서
안드로이드 : 테마 = "@ 안드로이드 : 스타일 / Theme.NoTitleBar.Fullscreen"
(이 사람을 도움이되기를 바랍니다, 나에게 저장 한 것 몇 가지 지난 밤 시간)


4
이것은 매우 나쁜 시도입니다. 버튼에 대한 스타일을 작성하십시오. 값 21에서 allCaps가 거짓입니다. 오래된 테마 (여기서는 Holo 테마)로 돌아 가면 앱이 더 추악하고 사용자에게 일관성이 없습니다.
bluewhile

2

당신이 사용하는 경우 appcompat-v7, 당신은 하위 클래스 AppCompatButtonsetSupportAllCaps(false)다음의 모든 버튼에이 클래스를 사용합니다.

/**
 * Light extension of {@link AppCompatButton} that overrides ALL CAPS transformation
 */
public class Button extends AppCompatButton {
    public Button(Context context, AttributeSet attrs) {
        super(context, attrs);
        setSupportAllCaps(false);
    }

    public Button(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setSupportAllCaps(false);
    }
}

AppCompatButton # setSupportAllCaps (boolean) Android 문서를 참조하십시오 .


2

기본적으로 안드로이드의 버튼은 모든 대문자 키워드를 제공합니다. 버튼 텍스트를 소문자 또는 대소 문자로 사용하려면 다음을 사용 textAllCaps하여 플래그를 비활성화 할 수 있습니다android:textAllCaps="false"


0

@ user1010160의 답변이 0 점인 이유를 모르겠습니다. 평판이 충분하면 +1을 주었을 것입니다.

내 응용 프로그램은 14 미만의 API를 위해 설계되었으며 프로그램에 코드를 추가하고 싶지 않기 때문에 그의 대답을 읽을 때까지 해결책을 찾지 못했습니다. 그가 말한 것은 응용 프로그램 스타일에서 필요한 작업을 수행했지만 활동에 스타일을 추가하고 textAllCaps를 false로 설정하지 않으면 작동하지 않는다는 것입니다.

스타일의 기본값은 AllCaps 속성 일 수 있으므로 활동에 대한 스타일을 갖는 것만으로는 충분하지 않습니다 (내 활동에 스타일이 있음). 활동에서도 해당 특성을 명시 적으로 false로 설정해야합니다.

이제 매니페스트 파일의 응용 프로그램 및 활동 부분에 모두 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.