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


232

프로그래밍 방식으로 textStyle속성 을 설정하는 방법이 TextView있습니까? 방법이없는 것 같습니다 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" />

1
아래 링크를 참조하고 상위 답변 1 개를 잠글 수 있습니다. stackoverflow.com/questions/6200533/…
Tiep

답변을 확인 하십시오 . 이것이 도움이
되길

답변:


410
textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface는 속성 textStyle입니다.

Shankar V가 추가 한대로 이전에 설정 한 서체 속성을 유지하려면 다음을 사용할 수 있습니다.

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

14
그것은해야textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);
Sankar V

2
@IlyaEremin 이전에 설정된 글꼴을 유지하려면 다음과 같이 사용해야합니다.
Sankar V

@ SankarV 의견을 기반으로 답변을 수정했습니다.
Raz

13
DEFAULT를 풀어야한다고 생각합니다. holder.title.setTypeface (holder.title.getTypeface (), Typeface.BOLD);
Iman Akbari

사실 textview.getTypeface().getStyle()이다android:textStyle
피에르

126

values ​​/ styles.xml에 RedHUGEText라는 스타일이 있다고 가정 해 보겠습니다.

<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 layout / 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 레벨이 8 ~ 17 인 핸드셋 및 태블릿에서 문제없이 사용했습니다. Android 23부터는 해당 메소드가 더 이상 사용되지 않습니다. 컨텍스트 인수가 삭제되었으므로 마지막 행은 다음과 같아야합니다.

textViewTitle.setTextAppearance(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" />

당신은 항상 당신의 길을 가질 수 있습니다!


4
<style>태그에 정의 할 수있는 속성의 하위 집합 만 설정합니다 . 그것은 일반적인 것들 (크기, 색상, 스타일)을 수행하지만 다른 것들 (패딩, 배경, 중력 등 포함)을 적용하지 않습니다
karl

5
최소 API 23이 필요한 것 같습니까?
William T. Mallard

4
api <23에 대한 방법과 api 23+에 대한 방법이 있습니다. <23에 대한 것이 문맥 인수를 취하고 23+에 대한 것이 아닌 것을 제외하고는 동일하게 나타납니다. 후드 아래에서 api 23+ 용 메소드는 <23에 대한 메소드를 호출하고 textview에 멤버 컨텍스트를 사용합니다.
MrPlow 2016 년


52

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

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);

삼.

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"

setTextAppearance ()는 XML에 정의 된 사용자 정의 스타일을 적용하기 위해 내가 얻은 대답입니다. 감사.
ashario

제 생각에는 이것이 스레드에 대한 최상의 답변입니다. 프로그래밍 방식으로 코드를 호출하기위한 많은 옵션
Nguyen Minh Hien

9

Kotlin Version

텍스트 스타일 외에 현재 글꼴을 유지하려면

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

7

이 질문은 많은 다른 장소에서 많은 다른 방법으로 요구됩니다. 나는 원래 여기에 대답했지만이 스레드와 관련이 있다고 생각합니다 ( 답을 찾을 때 여기에 있었기 때문에 ).

이 문제에 대한 한 가지 해결책은 없지만 내 유스 케이스에서 효과가있었습니다. 문제는 'View (context, attrs, defStyle)'생성자가 실제 스타일을 참조하지 않고 속성을 원한다는 것입니다. 그래서 우리는 :

  1. 속성 정의
  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 ​​/ themes.xml'또는 'res / values ​​/ styles.xml'에서 애플리케이션 / 활동의 테마를 수정하고 다음 스타일을 추가하십시오.

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

마지막으로, 사용자 정의 TextView에서 속성과 함께 생성자를 사용할 수 있으며 스타일을받습니다.

public class CustomTextView extends TextView {

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

다른 변형과 다른 장소에서 customTextView를 반복해서 사용했다는 점은 주목할 가치가 있지만, 뷰의 이름이 스타일이나 속성 또는 다른 것과 일치 할 필요는 없습니다. 또한이 기술은 TextView뿐만 아니라 모든 사용자 정의보기에서 작동해야합니다.


5

이것은 나를 위해 일했다

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

또는

textview.setTypeface(Typeface.DEFAULT_BOLD);

2

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

설명을 따르십시오.

기존 스타일 선언 :

<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));

문안 인사.


0

당신은 이것을 시도 할 수 있습니다

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

0

이후 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);
    }
}

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