프로그래밍 방식으로 TextView의 스타일 설정 null, R.style.my_style); 그러나

다음 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을 통해보기를 작성 하기 전에 스타일을 설정 해야 합니다.


답변

받아 들인 대답은 나를 위해 훌륭한 해결책이었습니다. 추가해야 할 유일한 것은 inflate()방법 에 관한 것입니다.

수락 된 답변에서 모든 android:layout_*매개 변수가 적용되지 않습니다.

이유는 조정 방법이 없으므로 원인 null은로 전달되었습니다 ViewGroup parent.

다음과 같이 사용할 수 있습니다.

View view = inflater.inflate(R.layout.view, parent, false);

그리고는 parent이다 ViewGroup조정할 좋아하는 곳에서, android:layout_*.

이 경우 모든 상대 속성이 설정됩니다.

누군가에게 도움이되기를 바랍니다.