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

프로그래밍 방식으로 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" />



답변

textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface는 속성 textStyle입니다.

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

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


답변

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

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


답변

setTextAppearance또는을 검색하십시오 setTextTypeface. stackoverflow에 비슷한 질문이 있습니다 : 런타임에 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);

삼.

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. 속성 정의
  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뿐만 아니라 모든 사용자 정의보기에서 작동해야합니다.


답변

이것은 나를 위해 일했다

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

또는

textview.setTypeface(Typeface.DEFAULT_BOLD);