programing

Android - TextView TextStyle을 프로그래밍 방식으로 설정하시겠습니까?

bestcode 2022. 8. 17. 23:50
반응형

Android - TextView TextStyle을 프로그래밍 방식으로 설정하시겠습니까?

textStyleTextView프그????? 건 것 요.setTextStyle()★★★★★★ 。

확실히 말하면, View / Widget 스타일을 말하는 것이 아닙니다!저는 다음을 말하고 있습니다.

<TextView
  android:id="@+id/my_text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Hello World"
  android:textStyle="bold" />
textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface는 Attribute textStyle입니다.

Shankar V가 추가되어 이전에 설정한 서체 속성을 보존하기 위해 다음과 같이 사용할 수 있습니다.

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

값/스타일에 RedHUGEText라는 스타일이 있다고 가정합니다.xml:

<style name="RedHUGEText" parent="@android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_size_huge</item>
    <item name="android:textColor">@color/red</item>
    <item name="android:textStyle">bold</item>
</style>

XML 레이아웃/your_layout.xml 파일에 평소처럼 TextView를 생성하기만 하면 다음과 같습니다.

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" />

액티비티의 Java 코드에서는 다음과 같이 합니다.

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

나한텐 효과가 있었어!그리고 색상, 크기, 중력 등을 적용했다.Android API Levels를 8~17까지 탑재한 단말기와 태블릿에서 문제없이 사용하고 있습니다.Android 23에서는 이 방법은 더 이상 사용되지 않습니다.context 인수가 삭제되었기 때문에 마지막 행은 다음과 같습니다.

textViewTitle.setTextAppearance(R.style.RedHUGEText);

API를 사용합니다.TextViewCompat

TextViewCompat.setTextAppearance(textViewTitle, R.style.RedHUGEText)

기억해...이는 텍스트 스타일이 Java 로직의 조건에 따라 달라지거나 코드를 사용하여 UI를 "즉각" 구축하는 경우에만 유용합니다.그렇지 않으면 다음 작업을 수행하는 것이 좋습니다.

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" 
    style="@style/RedHUGEText" />

언제든지 네 방식대로 할 수 있어!

(Search(검))setTextAppearance ""도 마찬가지입니다.setTextTypefacestackoverflow에 대해서도 같은 질문이 있습니다.런타임에 TextView 스타일을 변경하는 방법

이 작업을 수행하는 방법은 다음과 같습니다.-

1.

String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));

2.

tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);

3.

SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 
                         0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);

4.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="android:textStyle">bold|italic</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">#C0C0C0</item>
    </style>

</resources>

 tv.setTextAppearance(getApplicationContext(), R.style.boldText);

또는 xml을 통해 원하는 경우

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

Kotlin Version

텍스트 스타일과 함께 현재 글꼴을 유지하려면:

textView.apply {
    setTypeface(typeface, Typeface.NORMAL)
    // or
    setTypeface(typeface, Typeface.BOLD)
    // or
    setTypeface(typeface, Typeface.ITALIC)
    // or
    setTypeface(typeface, Typeface.BOLD_ITALIC)
}

이 질문은 많은 장소에서 다양한 방법으로 질문됩니다.원래는 여기서 대답했지만, 이 스레드에서도 관련이 있다고 생각합니다(답안을 찾고 있던 중에 여기에 오게 되었기 때문에,).

이 문제에 대한 한 가지 해결책은 없지만, 이 방법은 제 사용 사례에 도움이 되었습니다.문제는 'View(context, attrs, defStyle)' 생성자가 실제 스타일을 참조하지 않고 속성을 원한다는 것입니다.그럼, 다음과 같이 하겠습니다.

  1. Atribute 정의
  2. 사용할 스타일을 만듭니다.
  3. 테마에 해당 속성의 스타일을 적용합니다.
  4. 해당 속성을 사용하여 뷰의 새 인스턴스 생성

'res/values/attrs.xml'에서 새 속성을 정의합니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="customTextViewStyle" format="reference"/>
    ...
</resources>    

res/values/styles.xml'에서 커스텀 TextView에서 사용할 스타일을 만듭니다.

<style name="CustomTextView">
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:paddingLeft">14dp</item>
</style>

'res/values/temes.xml' 또는 'res/values/styles.xml'에서 응용 프로그램/활동의 테마를 수정하고 다음 스타일을 추가합니다.

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <item name="@attr/customTextViewStyle">@style/CustomTextView</item>
    </style>
    ... 
</resources>

마지막으로 커스텀 TextView에서 컨스트럭터를 Atribut과 함께 사용할 수 있게 되어 스타일을 수신할 수 있게 되었습니다.

public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
       super(context, null, R.attr.customTextView);
    }
}

주의할 점은 내가 반복적으로 관례를 사용했다는 것이다.TextView는 다른 변형 및 위치에 있지만 뷰의 이름이 스타일 또는 속성 또는 기타와 일치할 필요는 없습니다.또한 이 기술은 TextView뿐만 아니라 모든 커스텀뷰에서 사용할 수 있습니다.

이건 내게 효과가 있었다.

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

또는

textview.setTypeface(Typeface.DEFAULT_BOLD);

부터setTextAppearance(resId)는 API 23 이상에서만 사용할 수 있습니다.다음 명령을 사용합니다.

TextViewCompat.setTextAppearance(textViewGoesHere, resId)

이 방법은 내부적으로 다음과 같이 구현됩니다.

public static void setTextAppearance(@NonNull TextView textView, @StyleRes int resId) {
    if (Build.VERSION.SDK_INT >= 23) {
        textView.setTextAppearance(resId);
    } else {
        textView.setTextAppearance(textView.getContext(), resId);
    }
}

두 가지 간단한 방법으로 해결했습니다.

설명을 따르세요.

기존 스타일 선언:

<style name="SearchInfoText">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">24sp</item>
    <item name="android:textColor">@color/Church_Grey</item>
    <item name="android:shadowColor">@color/Shadow_Church</item>
    <item name="android:shadowRadius">3</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
</style>

내 Android Java 코드:

    TextView locationName = new TextView(getSupportActivity());
    locationName.setId(IdGenerator.generateViewId());
    locationName.setText(location.getName());
    locationName.setLayoutParams(super.centerHorizontal());
    locationName.setTextSize(24f);
    locationName.setPadding(0, 0, 0, 15);
    locationName.setTextColor(getResources().getColor(R.color.Church_Grey));
    locationName.setShadowLayer(3, 1, 1,  getResources().getColor(R.color.Shadow_Church));

안부 전해요.

이거 드셔보세요

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                textView.setTextAppearance(R.style.Lato_Bold);
            } else {
                textView.setTextAppearance(getActivity(), R.style.Lato_Bold);
            }

여기서 설명한 바와 같이 이 기능은 현재 지원되지 않습니다.

이것은 나에게 효과적이다

msg.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
OR
TextView.setTypeface(msg.getTypeface(),Typeface.NORMAL);

대신 꺼짐

TextView.setTypeface(Typeface.DEFAULT_BOLD);

언급URL : https://stackoverflow.com/questions/7919173/android-set-textview-textstyle-programmatically

반응형