2017-05-04 95 views
0

我有一個Android應用程序,它通過AppCompat向後兼容使用Material設計主題。全部自定義樣式在應用程序中編輯文本

在我的應用程序中有多個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不適用。

櫃面,如果我明確地在相應的Actitivy的XML指定這些屬性到的EditText,如下所示:

<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" /> 

即我已經明確添加android:ellipsize="end"android:gravity="right"<EditText>,才把輸出是作爲預計:

enter image description here

就像我說的,我有多個TextView的年代和EditText上的,我不能這些屬性明確添加到所有其中。那麼,有什麼方法可以使用樣式或其他方法來實現這一點?我在這裏做錯了什麼?

+0

您可以使用java代碼編輯文字樣式類似於(普通,粗體,普通)字體 –

+0

@GowthamanM:即使在這種情況下,我需要爲我的應用程序中的所有編輯文本明確執行此操作。我正在尋找的解決方案是,將其設置一次,並且必須對應用中的所有EditText應用相同的屬性。 – Zax

回答

1

你的方法是正確的。剛剛從EDITTEXT的屬性名稱中刪除android:

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

我無法解釋這雖然。我想appCompat的東西不會重用android屬性,但添加其他類似的名字。 colorPrimary,srcCompat等也一樣。

+0

完美無瑕。任何想法從textViewStyle中刪除android:會給編譯錯誤? – Zax

+0

我想在android命名空間之外沒有重新定義textViewStyle – Zielony

0

我一直在做這個

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

那麼你的XML文件中

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

做設置公共屬性(fontType,style..etc)上面的方法editext

相關問題