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는 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
""도 마찬가지입니다.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);
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)' 생성자가 실제 스타일을 참조하지 않고 속성을 원한다는 것입니다.그럼, 다음과 같이 하겠습니다.
- Atribute 정의
- 사용할 스타일을 만듭니다.
- 테마에 해당 속성의 스타일을 적용합니다.
- 해당 속성을 사용하여 뷰의 새 인스턴스 생성
'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
'programing' 카테고리의 다른 글
SVG 이미지를 추가하여 텍스트 필드를 확인하는 방법 (0) | 2022.08.17 |
---|---|
Vue 구성 요소에서 JSON 텍스트용 HTML을 올바르게 렌더링합니다. (0) | 2022.08.17 |
Vuex 스토어를 사용하여 웹 워커 구성 (0) | 2022.08.17 |
Vue 2 : null 속성 ID를 읽을 수 없습니다. (0) | 2022.08.17 |
Vue: Vuex getter에서 데이터가 변경되지 않았습니까? (0) | 2022.08.17 |