텍스트 보기의 스타일을 프로그래밍 방식으로 설정
저는 그것을 사용하려고 합니다.TextView
다음과 같은 스타일의 생성자:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style);
그러나 이렇게 하면 텍스트 보기가 스타일을 사용하지 않는 것 같습니다(정적 객체에 스타일을 설정하여 확인했습니다).
저는 또한 사용해 보았습니다.myText.setTextAppearance(MyActivity.this, R.style.my_style)
하지만 그것도 작동하지 않습니다.
저는 당신이 그 스타일을 프로그램적으로 설정할 수 있다고 생각하지 않습니다.이 문제를 해결하려면 res/layout에서 다음 내용과 같이 tvtemplate.xml을 생성하는 등과 같이 할당된 스타일로 템플릿 레이아웃 xml 파일을 생성할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is a template"
style="@style/my_style" />
그런 다음 이 값을 부풀려 새 텍스트 보기를 인스턴스화합니다.
TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
일반 스타일을 만들고 아래와 같은 여러 텍스트 보기에서 다시 사용할 수 있습니다.
textView.setTextAppearance(this, R.style.MyTextStyle);
편집:this
에 대한 참조Context
물건.
다음과 같이 ContextThemeWrapper를 생성자에게 전달할 수 있습니다.
TextView myText = new TextView(new ContextThemeWrapper(MyActivity.this, R.style.my_style));
생성자에서 스타일을 설정할 수 있지만 스타일은 동적으로 변경/설정할 수 없습니다.
View(Context, AttributeSet, int)
(그int
스타일에 대한 참조를 포함하는 현재 테마의 속성입니다.)
매개 변수 intdefStyleAttr
스타일을 지정하지 않습니다.Android 설명서에서:
defStyleAttr - 뷰에 대한 기본값을 제공하는 스타일 리소스에 대한 참조를 포함하는 현재 테마의 특성입니다.기본값을 찾지 않으려면 0으로 설정할 수 있습니다.
View 생성자에서 스타일을 설정하려면 다음 두 가지 방법이 있습니다.
ContextThemeWrapper 사용 시:
ContextThemeWrapper wrappedContext = new ContextThemeWrapper(yourContext, R.style.your_style); TextView textView = new TextView(wrappedContext, null, 0);
4개의 인수 생성자 사용(롤리팝부터 사용 가능):
TextView textView = new TextView(yourContext, null, 0, R.style.your_style);
두 솔루션의 핵심 사항 -defStyleAttr
뷰에 스타일을 적용하려면 매개 변수가 0이어야 합니다.
스타일을 동적으로 변경할 수 없습니다(아직).XML을 통해 보기를 만들기 전에 스타일을 설정해야 합니다.
스타일 상속(또는 이벤트 스타일 가능 특성)을 사용할 수 있는 사용자 정의 뷰를 사용하는 경우 스타일이 손실되지 않도록 두 번째 생성자를 수정해야 합니다.setTextApearance()를 사용하지 않아도 효과가 있었습니다.
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs, attrs.getStyleAttribute());
}
수락된 답변은 저에게 훌륭한 해결책이었습니다.추가할 것은 다음과 같습니다.inflate()
방법.
모두 승인된 답변입니다.android:layout_*
매개 변수가 적용되지 않습니다.
그 이유는 그것을 조정할 방법이 없기 때문입니다.null
로 통과되었습니다.ViewGroup parent
.
다음과 같이 사용할 수 있습니다.
View view = inflater.inflate(R.layout.view, parent, false);
그리고parent
그것은ViewGroup
하고 android:layout_*
.
이 경우 모든 관련 속성이 설정됩니다.
누군가에게 유용하기를 바랍니다.
저도 그 문제에 부딪혔고, 스타일을 프로그래밍적으로 설정하는 방법을 찾았습니다.아마 여러분 모두가 필요할 것입니다. 그래서 저는 거기서 업데이트합니다.
View 생성자의 세 번째 매개 변수는 아래의 소스 코드로 테마의 특성 유형을 허용합니다.
public TextView(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.textViewStyle);
}
그래서 당신은 R.attr의 유형을 통과해야 합니다.R.style 보다는.**
코드에서 다음 단계를 수행했습니다.
먼저, attr.xml의 테마에서 사용할 사용자 지정 특성을 사용자 지정합니다.
<attr name="radio_button_style" format="reference" />
두 번째로 style.xml에서 사용한 테마에 스타일을 지정합니다.
<style name="AppTheme" parent="android:Theme.Translucent">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="radio_button_style">@style/radioButtonStyle</item>
</style>
<style name="radioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">64dp</item>
<item name="android:background">#000</item>
<item name="android:button">@null</item>
<item name="android:gravity">center</item>
<item name="android:saveEnabled">false</item>
<item name="android:textColor">@drawable/option_text_color</item>
<item name="android:textSize">9sp</item>
</style>
마지막에 사용하세요!
RadioButton radioButton = new RadioButton(mContext, null, R.attr.radio_button_style);
프로그래밍 방식으로 작성된 보기는 테마에서 지정된 스타일을 사용합니다.
당신은 시도해 볼 수 있고, 그것이 당신에게 완벽하게 효과가 있기를 바랍니다.
우리는 사용할 수 있습니다.TextViewCompact.setTextAppearance(textView, R.style.xyz)
.
참고용 Android 문서.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
textView.setTextAppearance(R.style.yourStyle)
확장 함수 kotlin을 사용할 수 있습니다.
fun TextView.setStyle(@StyleRes resId: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setTextAppearance(resId)
} else {
setTextAppearance(context, resId)
}
}
나는 EditText로만 테스트했지만 당신은 그 방법을 사용할 수 있습니다.
public void setBackgroundResource(내부)
XML 파일에 정의된 스타일을 적용합니다.
이 방법은 View에 속하기 때문에 어떤 UI 요소에서도 작동할 것으로 생각합니다.
안부 전해요.
언급URL : https://stackoverflow.com/questions/3142067/set-style-for-textview-programmatically
'programing' 카테고리의 다른 글
상태 표시줄 아래에 겹치는 도구 모음 (0) | 2023.08.31 |
---|---|
스팬 요소에 대해 마진탑이 작동하지 않습니까? (0) | 2023.08.31 |
구성: 오류: MySQL include dir를 찾지 못했습니다. (0) | 2023.08.26 |
문자열에서 모든 공백 제거 (0) | 2023.08.26 |
프로그래밍 방식으로 다른 보기 컨트롤러/장면으로 신속하게 이동 (0) | 2023.08.26 |