Programing

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

lottogame 2020. 2. 21. 21:59
반응형

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


최근에 새로운 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의 버그입니까?


왜 그런 일이 일어나고 있는지 모르겠지만 3 가지 간단한 시도가 있습니다.

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

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

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

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


다음은 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>

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

mButton.setTransformationMethod(null);

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

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

이 줄을 스타일에 추가

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


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

android:textAllCaps="false"

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


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


<Button>태그에 android : textAllCaps = "false"를 추가하십시오.


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

값은 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 버튼에 대문자 텍스트를 표시해야합니다


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"/>

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


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

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


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


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


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

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

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

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


당신이 사용하는 경우 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 문서를 참조하십시오 .


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


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

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

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

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


자바:

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"
      .
      .
   />

참고 URL : https://stackoverflow.com/questions/26958909/why-is-my-button-text-forced-to-all-caps-on-lollipop



반응형