programing

내 단추 텍스트가 롤리팝의 모든 캡스에 강제로 적용되는 이유는 무엇입니까?

jooyons 2023. 6. 14. 21:50
반응형

내 단추 텍스트가 롤리팝의 모든 캡스에 강제로 적용되는 이유는 무엇입니까?

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

그것은 버튼 텍스트를 씁니다.이 앱은 Android 2.3 및 Android 4.0을 사용하여 대문자와 소문자를 혼합하여 텍스트를 올바르게 작성합니다.

내 넥서스 9에서 동일한 앱이 실행되면 텍스트의 모든 문자가 대문자로 표시됩니다.

FWIW my 매니페스트에는 다음 문장이 포함되어 있습니다.

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

제 코드에서 이것을 고칠 수 있을까요, 아니면 미국의 버그인가요? 감사합니다.

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

  1. 사용하다android:textAllCaps="false"의 신의에layout-v21

  2. 버튼의 변환 방법을 프로그래밍 방식으로 변경합니다. mButton.setTransformationMethod(null);

  3. Allcaps에 대한 스타일 확인

참고:public void setAllCaps(boolean allCaps),android:textAllCapsAPI 버전 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>

이것은 예를 들어 버튼의 변환 방법을 설정하여 응용 프로그램 코드에서 수정할 수 있습니다.

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가 작게 타이핑하려고 하는 대문자를 비활성화해야 합니다.

롤리팝 기본값은 "textAllCapstrue"와 함께 제공되므로 수동으로 false로 만들어야 합니다.

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

Android"false"의 "false": textAllCapsfalse"<Button>태그가 그거야.

모든 단추에 대해 작동하는 더 쉬운 방법이 있습니다. 테마에서 단추 모양을 변경하기만 하면 됩니다. 다음을 시도해 보십시오.

values-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>

PS: 재료 설계의 원칙을 따르는 것이 좋습니다. Buttons, http://www.google.com/design/spec/components/buttons.html 에서 대문자로 된 텍스트를 표시해야 합니다.

Java:

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

추가할 수 있습니다.android:textAllCaps="false"단추까지

모든 버튼에 적용되는 앱의 테마에 따라 버튼 텍스트가 대문자로 변환될 수 있습니다.테마 / 하기 / 속성 설정하기android:textAllCaps.

안드로이드를 사용합니다.support.v7.vmdk입니다.XML 레이아웃의 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 Studio IDE에서는 필터 아이콘을 클릭하여 전문가 속성을 표시해야 합니다.그러면 당신은 보게 될 것입니다.textAllCaps소유물.선택한 다음 선택을 취소합니다.

당신의 페이스북 버튼 텍스트가 모든 대문자로 나타나서 여기에 도착했다면, 그냥 이것을 추가하세요.android:textAllCaps="false"xml 파일에 있습니다.그것은 나에게 효과가 있었다.

좋아요, 방금 이것과 마주쳤어요.롤리팝의 버튼은 모두 대문자로 나오고 글꼴은 '보통'으로 재설정됩니다.하지만 제 경우(Android 5.02)에는 한 레이아웃에서 올바르게 작동했지만 다른 레이아웃에서는 작동하지 않았습니다!?

API를 변경하는 것은 효과가 없었습니다.
모든 대문자로 설정하려면 최소 API 14가 필요하며 글꼴은 여전히 '보통'으로 재설정됩니다.

Android Material Styles는 정의된 스타일이 없을 경우 스타일을 강제로 변경하기 때문입니다(그래서 내 레이아웃 중 하나에서 작동했고 스타일을 정의했기 때문에 다른 레이아웃에서는 작동하지 않았습니다).

따라서 쉬운 해결책은 매니페스트에서 다음과 같은 각 활동에 대한 스타일을 정의하는 것입니다.
Android:theme="@android:style/theme.NoTitleBar.전체 화면"
(이것이 누군가에게 도움이 되기를 바라며, 어젯밤에 저를 몇 시간 절약해 주었을 것입니다.)

사용하는 경우appcompat-v7당신은 서브클래스 할 수 있습니다.AppCompatButton그리고.setSupportAllCaps(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 문서를 참조하십시오.

기본적으로 Android의 Button은 모든 caps 키워드를 제공합니다.단추 텍스트를 소문자 또는 혼합 문자로 지정하려면 사용하지 않도록 설정할 수 있습니다.textAllCaps플래그 지정(사용android:textAllCaps="false"

@user1010160의 답변이 왜 0점을 받았는지 모르겠습니다.만약 내가 충분한 평판을 받았다면 +1을 주었을 것입니다.

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

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

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

또 다른 프로그래밍 방식의 코틀린 대안:

mButton.transformationMethod = null

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

반응형