2017-05-04 12 views
0

AppCompat을 통해 이전 버전과의 호환성을 갖는 Material 디자인 테마를 사용하는 Android 애플리케이션이 있습니다.애플리케이션의 모든 편집 텍스트에 대한 사용자 정의 스타일

내 애플리케이션에는 Textview'sEditText's이 여러 개 있습니다. 응용 프로그램에서 동일한 속성을 모두 TextView'sEditText's에 적용하고 싶습니다. 아래 그림과 같이이를 위해, 내가 정의 스타일을 정의했습니다 :

<!-- Base application theme. --> 
    <style name="ParentTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style> 

    <style name="ArabicTheme" parent="ParentTheme"> 
     <item name="android:editTextStyle">@style/arabicEditText</item> 
     <item name="android:textViewStyle">@style/arabicTextView</item> 
    </style> 

    <style name="arabicEditText" parent="@android:style/Widget.EditText"> 
     <item name="android:gravity">right</item> 
     <item name="android:ellipsize">end</item> 
    </style> 

    <style name="arabicTextView" parent="@android:style/Widget.TextView"> 
     <item name="android:gravity">right</item> 
    </style> 

<Application> 태그 아래 내 AndroidManifest.xml 파일에서, 나는 android:theme="@style/ArabicTheme"을 설정했습니다. 상기 출력에서 ​​보듯 enter image description here

이 스타일은 단지 TextView 적용되는 :

아래는 활동의 출력이다. 그러나, 동일은 EditText에 적용되지 않습니다.

넣다 아래와 같이 I 명시 대응 Actitivy의 XML에 글고 이러한 속성을 지정하는 경우 :

<EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:hint="Name" 
     android:ellipsize="end" 
     android:gravity="right" 
     android:ems="10" 
     android:layout_below="@+id/textView" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="16dp" 
     android:id="@+id/editText" /> 

내가 명시 <EditText>android:ellipsize="end"android:gravity="right" 추가 한, 즉, 오직 다음 출력 같다 예상 : 내가 말했듯이

enter image description here

, 난 여러 텍스트 뷰의 가지고 글고의 내가 명시 적으로 모든 이러한 속성을 추가 할 수 없습니다 그들의. 그래서, 스타일이나 다른 접근법을 사용하여 이것을 달성 할 수있는 방법이 있습니까? 내가 여기서 뭐 잘못하고 있니?

+0

자바 코드를 사용하여 편집 텍스트 스타일을 지정할 수 있습니다. (일반, 굵게, 보통) –

+0

@GowthamanM :이 경우에도 응용 프로그램의 모든 편집 텍스트에 대해 명시 적으로이 작업을 수행해야합니다. 내가 찾고있는 솔루션은 한 번 설정하고 같은 속성이 응용 프로그램의 모든 EditText에 적용되어야합니다. – Zax

답변

1

귀하의 접근 방식은 정확합니다. 그냥 EDITTEXT의 속성 이름에서 android:을 제거 :

<item name="editTextStyle">@style/arabicEditText</item> 

나는이 생각을 설명 할 수 없다. appCompat는 android 속성을 재사용하지 않지만 비슷한 이름을 가진 속성을 추가합니다. 동일은 colorPrimary, srcCompat 및 기타로갑니다.

+0

완벽하게 작동합니다. android : textViewStyle에서 어떤 아이디어를 제거해도 컴파일 오류가 발생합니까? – Zax

+0

안드로이드 네임 스페이스 밖에서 재정의 된 textViewStyle이 없다고 생각합니다. – Zielony

0

나는

<com.packagename.LightEditText 
android:id="@+id/edtTaskName" 
android:layout_height="wrap_content" 
android:layout_width="match_parent"/> 

이 editext하는 것이 일반적 특성 (fontType을, style..etc)을 설정하기위한 위의 방법을 수행하여 XML 파일 안에 그런 다음이

public class LightEditText extends android.widget.EditText{ 

    public LightEditText(Context context) { 
     super(context); 
     setFont(); 

    } 

    public LightEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setFont(); 
    } 

    public LightEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     setFont(); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public LightEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
     setFont(); 
    } 

    /** 
    * This method is used to set the given font to the TextView. 
    */ 
    private void setFont() { 
     Typeface typeface = TypefaceCache.get(getContext().getAssets(), "fonts/Roboto-Light.ttf"); 
     setTypeface(typeface); 
    } 

    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
    } 
} 

을하고있다