IT story

코드에서 안드로이드 세트 스타일

hot-time 2020. 4. 9. 08:07
반응형

코드에서 안드로이드 세트 스타일


TextView 생성자를 다음과 같은 스타일로 사용하려고합니다.

TextView myText = new TextView(MyActivity.this, null, R.style.my_style );

그러나이 작업을 수행 할 때 텍스트보기는 스타일을 취하지 않는 것으로 보입니다 (정적 객체에서 스타일을 설정하여 스타일을 확인했습니다).

나는 또한 사용하려고 myText.setTextAppearance(MyActivity.this, R.style.my_style)했지만 작동하지 않습니다


프로그래밍 방식으로 스타일을 설정할 수 있다고 생각하지 않습니다. 이 문제를 해결하려면 res / layout create 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를 인스턴스화하십시오.

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);

도움이 되었기를 바랍니다.


일반적인 스타일을 만들어 아래처럼 여러 텍스트보기에서 재사용 할 수 있습니다.

textView.setTextAppearance(this, R.style.MyTextStyle);

편집 : 이것은 컨텍스트를 나타냅니다


다음 과 같이 ContextThemeWrapper 를 생성자에 전달할 수 있습니다 .

TextView myText = new TextView(new ContextThemeWrapper(MyActivity.this, R.style.my_style));

생성자에서 스타일을 설정할 수 있지만 스타일은 동적으로 변경 / 설정할 수 없습니다.

View(Context, AttributeSet, int)( int스타일 자원입니다)

Romain Guy의 답변

참고


int 매개 변수 defStyleAttr는 스타일을 지정하지 않습니다. 안드로이드 문서에서 :

defStyleAttr- 보기의 기본값을 제공하는 스타일 자원에 대한 참조를 포함하는 현재 테마의 속성입니다. 기본값을 찾지 않으려면 0 일 수 있습니다.

View 생성자에서 스타일을 설정하려면 두 가지 가능한 솔루션이 있습니다.

  1. ContextThemeWrapper를 사용하여 :

    ContextThemeWrapper wrappedContext = new ContextThemeWrapper(yourContext, R.style.your_style);
    TextView textView = new TextView(wrappedContext, null, 0);
    
  2. 인수가 4 개인 생성자 (LOLLIPOP에서 사용 가능) :

    TextView textView = new TextView(yourContext, null, 0, R.style.your_style);
    

두 솔루션의 핵심 사항 - defStyleAttr뷰에 스타일을 적용하려면 매개 변수가 0이어야합니다.


동적으로 스타일 변경은 지원되지 않습니다 (아직). XML을 통해보기를 작성 하기 전에 스타일을 설정 해야 합니다.


스타일 상속 (또는 이벤트 스타일 가능 속성)을 사용하는 사용자 정의보기를 사용하는 경우 스타일을 잃지 않도록 두 번째 생성자를 수정해야합니다. 이것은 setTextAppearence () 를 사용할 필요없이 나를 위해 일했습니다 .

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 생성자의 세 번째 매개 변수는 테마의 attr 유형을 아래 소스 코드로 허용합니다.

public TextView(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.R.attr.textViewStyle);
}

따라서 R.style이 아닌 R.attr. ** 유형을 전달해야합니다. **

내 코드에서 다음 단계를 수행했습니다.

먼저 attr.xml의 테마에서 사용할 사용자 정의 된 attr을 사용자 정의하십시오.

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

프로그래밍 방식으로 작성된 뷰는 테마에서 지정된 스타일을 사용합니다.

시도해 볼 수 있으며 완벽하게 작동하기를 바랍니다.


EditText로만 테스트했지만 메소드를 사용할 수 있습니다

공공 무효 setBackgroundResource (int resid)

XML 파일에 정의 된 스타일을 적용합니다.

이 방법이 View에 속해 있다고 생각합니다 .UI 요소와 함께 작동한다고 생각합니다.

문안 인사.


사용할 수 있습니다 TextViewCompact.setTextAppearance(textView, R.style.xyz).

참고로 안드로이드 문서 .

참고 URL : https://stackoverflow.com/questions/3142067/android-set-style-in-code

반응형