2014-11-08 57 views
4

我正在使用棒棒糖的新功能,例如coloracent,colorPrimary用于预棒棒糖设备的样式。自定义字体EditText焦点

styles.xml

<resources> 

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/material_teal500</item> 
    <item name="colorPrimaryDark">@color/material_teal600</item> 
    <item name="colorAccent">@color/material_white</item> 
</style> 

现在我要创建我的TextView,EditText上和按键的自定义字体。 在款式中,我使用白色为。所以在edittext白色的重点应该来。请参阅下图了解默认的edittext焦点。这工作正常。

This is the picture of default edittext behavious

但每当我创建一个自定义的字体的EditText重点行为是不同的。 它没有显示白色。相反,它显示为黑色。有关我的电子邮件的自定义edittext行为,请参阅下图。

This is my custom edittext behaviour

这是我的自定义字体的EditText类。

public class TypefaceButton extends Button { 

    /* 
    * Permissible values ​​for the "typeface" attribute. 
    */ 
    private final static int ROBOTO_THIN = 0; 
    private final static int ROBOTO_THIN_ITALIC = 1; 
    private final static int ROBOTO_LIGHT = 2; 
    private final static int ROBOTO_LIGHT_ITALIC = 3; 
    private final static int ROBOTO_REGULAR = 4; 
    private final static int ROBOTO_ITALIC = 5; 
    private final static int ROBOTO_MEDIUM = 6; 
    private final static int ROBOTO_MEDIUM_ITALIC = 7; 
    private final static int ROBOTO_BOLD = 8; 
    private final static int ROBOTO_BOLD_ITALIC = 9; 
    private final static int ROBOTO_BLACK = 10; 
    private final static int ROBOTO_BLACK_ITALIC = 11; 
    private final static int ROBOTO_CONDENSED = 12; 
    private final static int ROBOTO_CONDENSED_ITALIC = 13; 
    private final static int ROBOTO_CONDENSED_BOLD = 14; 
    private final static int ROBOTO_CONDENSED_BOLD_ITALIC = 15; 
    /** 
    * List of created typefaces for later reused. 
    */ 
    private final static SparseArray<Typeface> mTypefaces = new SparseArray<Typeface>(16); 

    /** 
    * Simple constructor to use when creating a view from code. 
    * 
    * @param context The Context the view is running in, through which it can 
    *    access the current theme, resources, etc. 
    */ 
    public TypefaceButton(Context context) { 
     super(context); 
    } 

    /** 
    * Constructor that is called when inflating a view from XML. This is called 
    * when a view is being constructed from an XML file, supplying attributes 
    * that were specified in the XML file. This version uses a default style of 
    * 0, so the only attribute values applied are those in the Context's Theme 
    * and the given AttributeSet. 
    * <p/> 
    * <p/> 
    * The method onFinishInflate() will be called after all children have been 
    * added. 
    * 
    * @param context The Context the view is running in, through which it can 
    *    access the current theme, resources, etc. 
    * @param attrs The attributes of the XML tag that is inflating the view. 
    * @see #TypefaceButton(android.content.Context, android.util.AttributeSet, int) 
    */ 
    public TypefaceButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     parseAttributes(context, attrs); 
    } 

    /** 
    * Perform inflation from XML and apply a class-specific base style. This 
    * constructor of View allows subclasses to use their own base style when 
    * they are inflating. 
    * 
    * @param context The Context the view is running in, through which it can 
    *     access the current theme, resources, etc. 
    * @param attrs The attributes of the XML tag that is inflating the view. 
    * @param defStyle The default style to apply to this view. If 0, no style 
    *     will be applied (beyond what is included in the theme). This may 
    *     either be an attribute resource, whose value will be retrieved 
    *     from the current theme, or an explicit style resource. 
    * @see #TypefaceButton(android.content.Context, android.util.AttributeSet) 
    */ 
    public TypefaceButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     parseAttributes(context, attrs); 
    } 

    /** 
    * Parse the attributes. 
    * 
    * @param context The Context the view is running in, through which it can access the current   theme, resources, etc. 
    * @param attrs The attributes of the XML tag that is inflating the view. 
    */ 
    private void parseAttributes(Context context, AttributeSet attrs) { 
     TypedArray values = context.obtainStyledAttributes(attrs, R.styleable.TypefaceTextView); 

     int typefaceValue = values.getInt(R.styleable.TypefaceTextView_typeface, 0); 
     values.recycle(); 

     setTypeface(obtaintTypeface(context, typefaceValue)); 
    } 

    /** 
    * Obtain typeface. 
    * 
    * @param context  The Context the view is running in, through which it can 
    *      access the current theme, resources, etc. 
    * @param typefaceValue values ​​for the "typeface" attribute 
    * @return Roboto {@link android.graphics.Typeface} 
    * @throws IllegalArgumentException if unknown `typeface` attribute value. 
    */ 
    private Typeface obtaintTypeface(Context context, int typefaceValue) throws IllegalArgumentException { 
     Typeface typeface = mTypefaces.get(typefaceValue); 
     if (typeface == null) { 
      typeface = createTypeface(context, typefaceValue); 
      mTypefaces.put(typefaceValue, typeface); 
     } 
     return typeface; 
    } 

    /** 
    * Create typeface from assets. 
    * 
    * @param context  The Context the view is running in, through which it can 
    *      access the current theme, resources, etc. 
    * @param typefaceValue values ​​for the "typeface" attribute 
    * @return Roboto {@link android.graphics.Typeface} 
    * @throws IllegalArgumentException if unknown `typeface` attribute value. 
    */ 
    private Typeface createTypeface(Context context, int typefaceValue) throws IllegalArgumentException { 
     Typeface typeface; 
     switch (typefaceValue) { 
      case ROBOTO_THIN: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Thin.ttf"); 
       break; 
      case ROBOTO_THIN_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-ThinItalic.ttf"); 
       break; 
      case ROBOTO_LIGHT: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Light.ttf"); 
       break; 
      case ROBOTO_LIGHT_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-LightItalic.ttf"); 
       break; 
      case ROBOTO_REGULAR: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Regular.ttf"); 
       break; 
      case ROBOTO_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Italic.ttf"); 
       break; 
      case ROBOTO_MEDIUM: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Medium.ttf"); 
       break; 
      case ROBOTO_MEDIUM_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-MediumItalic.ttf"); 
       break; 
      case ROBOTO_BOLD: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Bold.ttf"); 
       break; 
      case ROBOTO_BOLD_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BoldItalic.ttf"); 
       break; 
      case ROBOTO_BLACK: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Black.ttf"); 
       break; 
      case ROBOTO_BLACK_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BlackItalic.ttf"); 
       break; 
      case ROBOTO_CONDENSED: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Condensed.ttf"); 
       break; 
      case ROBOTO_CONDENSED_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-CondensedItalic.ttf"); 
       break; 
      case ROBOTO_CONDENSED_BOLD: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BoldCondensed.ttf"); 
       break; 
      case ROBOTO_CONDENSED_BOLD_ITALIC: 
       typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BoldCondensedItalic.ttf"); 
       break; 
      default: 
       throw new IllegalArgumentException("Unknown `typeface` attribute value " + typefaceValue); 
     } 
     return typeface; 
    } 

} 

我在xml中使用了自定义类型的面孔,如下所示。

<appname.utilities.TypefaceEditText 
     android:id="@+id/editText2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_margin="@dimen/ten_dp" 
     custom:typeface="roboto_light" 
     android:ems="10" 
     android:hint="@string/user_email" 
     android:inputType="textEmailAddress" 
     android:textColor="@color/material_grey200" 
     android:textColorHint="@color/material_grey200" /> 

我该如何解决这个问题!任何想法?我知道我可以在Java类文件中实现自定义字体。但我想以这种方式实施。在我自己的自定义编辑文本中,我也想显示相同的重音颜色。先谢谢了!

回答

2

我找到了!对于应用colorAccent只是扩展您的自定义EditText类从 android.support.v7.widget.AppCompatEditText

1

这是适用于我的自定义edittext,让我们尝试此代码为您的情况。添加这些2线XML在您Activity's布局(您edittext的布局):

<LinearLayout 
    android:focusable="true" 
    android:focusableInTouchMode="false" 
    /> 
1

尝试是这样的:

editText2.setOnTouchListener(new OnTouchListener() 
    { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     editText2.setFocusableInTouchMode(true); 
     return false; 
    } 
    }); 
+0

希望这可能会帮助你! – 2014-11-08 06:17:48

+0

对不起,我想我没有正确地表达我的问题。它正在关注EditText的OnTouch,但对于自定义的Typeface Edittext,颜色为黑色。但正常的编辑文本颜色是白色。我想要自定义字体edittext也是白色的。 – 2014-11-08 09:01:53