Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom EditText is not showing keyboard on focus

I am creating a custom EditText class because i need to set some custom fonts; However now when i click on the editText the android keyboard does not pop up anymore...

here is my class:

    package ro.gebs.captoom.utils.fonts;  import android.content.Context; import android.content.res.TypedArray; import android.graphics.Rect; import android.graphics.Typeface; import android.util.AttributeSet; import android.view.inputmethod.InputMethodManager; import android.widget.EditText;  import ro.gebs.captoom.R;  public class CustomFontEditText extends EditText {      private Context context;      public CustomFontEditText(Context context, AttributeSet attrs, int defStyle) {         super(context, attrs, defStyle);         if (!isInEditMode()) {             TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontEditText,                     defStyle, 0);              assert a != null;             int fontId = a.getInteger(R.styleable.CustomFontEditText_fontNameEdit, -1);             if (fontId == -1) {                 throw new IllegalArgumentException("The font_name attribute is required and must refer "                         + "to a valid child.");             }             a.recycle();             initialize(fontId);         }         this.context = context;     }      public CustomFontEditText(Context context, AttributeSet attrs) {         this(context, attrs, 0);         this.context = context;     }      public CustomFontEditText(Context context) {         super(context);         this.context = context;     }      @SuppressWarnings("ConstantConditions")     public void initialize(int fontId) {          Typeface tf = null;         switch (fontId) {             case 0:                 tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-Regular.ttf");                 break;             case 1:                 tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-Bold.ttf");                 break;             case 2:                 tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-Semibold.ttf");                 break;             case 3:                 tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-ExtraBold.ttf");                 break;         }          setTypeface(tf);     } } 

and how i use it in XML:

<ro.gebs.captoom.utils.fonts.CustomFontEditText                         android:id="@+id/add_details_txt_edit"                         android:layout_width="fill_parent"                         android:layout_height="wrap_content"                         android:layout_marginLeft="10dip"                         android:hint="@string/type_here"                         android:inputType="textPersonName"                         custom:fontNameEdit="Regular" /> 

I thought the focusing events were handled by the fact that i extend the EditText class...

Any hints?

like image 763
Adrian Olar Avatar asked Sep 17 '13 11:09

Adrian Olar


People also ask

How do I turn off soft keyboard on Android?

Hiding the Soft Keyboard Programmatically You can force Android to hide the virtual keyboard using the InputMethodManager, calling hideSoftInputFromWindow, passing in the token of the window containing your edit field. This will force the keyboard to be hidden in all situations.


1 Answers

It's an old question but if someone cares, the problem is on the implementation of the constructor:

public CustomFontEditText(Context context, AttributeSet attrs) {     this(context, attrs, 0);     this.context = context; } 

The last argument ("defStyle") which you set as 0, should be the default style for an EditText. If you take a look at the same constructor on the EditText class:

public EditText(Context context, AttributeSet attrs) {     this(context, attrs, com.android.internal.R.attr.editTextStyle); } 

As you can see, the default style for an EditText should be used, so your constructor should look like this:

public CustomFontEditText(Context context, AttributeSet attrs) {     this(context, attrs, android.R.attr.editTextStyle);     this.context = context; } 
like image 155
lluismontero Avatar answered Oct 03 '22 00:10

lluismontero