2017-05-04 2 views
0

Ich habe eine Android-Anwendung, die Material Design-Thema mit Abwärtskompatibilität durch AppCompat verwendet.Custom style für alle Texte bearbeiten in der Anwendung

Es gibt mehrere Textview's und EditText's in meiner Anwendung. Ich möchte die gleichen Eigenschaften auf alle diese TextView's und EditText's über die Anwendung angewendet werden. Um dies zu erreichen, habe ich einen benutzerdefinierten Stil definiert wie folgt:

<!-- 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> 

unter dem <Application> Tag in meinem AndroidManifest.xml Datei, ich habe android:theme="@style/ArabicTheme" gesetzt.

Unten ist der Ausgang der Aktivität: enter image description here

Wie in der obigen Ausgabe zu sehen ist, ist der Stil nur TextView angewandt wird. Dasselbe gilt jedoch nicht für EditText.

Incase, wenn ich ausdrücklich diese Eigenschaften zum EditText in der entsprechenden Actitivy XML angeben, wie unten dargestellt:

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

dh ich ausdrücklich android:ellipsize="end" und android:gravity="right" zum <EditText> hinzugefügt haben, und erst dann die Ausgabe als erwartet:

enter image description here

Wie ich schon sagte, ich habe mehrere Textview ist und EditText ist und ich diese Eigenschaften alle nicht explizit hinzufügen von ihnen. Also, gibt es eine Möglichkeit, dies mit Styles oder einem anderen Ansatz zu erreichen? Mache ich hier etwas falsch?

+0

Sie können bearbeiten Text Stil mit Java-Code Schriftart wie (normal, fett, normal) –

+0

@ GowthamanM: Auch in diesem Fall muss ich dies explizit für alle Texte bearbeiten in meiner Anwendung. Die Lösung, nach der ich suche, ist, sie einmal zu setzen, und die gleiche Eigenschaft muss für alle EditTexte in der App angewendet werden. – Zax

Antwort

1

Deine Vorgehensweise ist richtig. Entfernen Sie einfach android: aus dem Attributnamen editText:

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

ich dies aber nicht erklären kann. Ich denke, AppCompat Dinge nicht Android-Attribute wiederverwenden, sondern fügen Sie eine andere mit ähnlichen Namen. Gleiches gilt für colorPrimary, srcCompat und andere.

+0

Funktioniert einwandfrei. Irgendeine Idee, die android: vom textViewStyle löscht, würde einen Kompilierungsfehler geben? – Zax

+0

Ich nehme an, dass es keinen textViewStyle außerhalb von Android-Namespace neu definiert – Zielony

0

Ich mache diesen

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

Dann in Ihrer XML-Datei

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

das obige Verfahren Sie zum Einstellen gemeinsame Eigenschaften (fonttype, style..etc) EditExt

Verwandte Themen