自定义EditText不在焦点上显示键盘 [英] Custom EditText is not showing keyboard on focus

查看:113
本文介绍了自定义EditText不在焦点上显示键盘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个自定义EditText类,因为我需要设置一些自定义字体.但是现在当我单击editText时,Android键盘不再弹出...

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

这是我的课程:

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

以及如何在XML中使用它:

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

我认为聚焦事件是因为我扩展了EditText类...

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

有任何提示吗?

推荐答案

这是一个老问题,但如果有人在乎,那么问题就出在构造函数的实现上:

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

您设置为0的最后一个参数("defStyle")应该是EditText的默认样式.如果您在EditText类上查看相同的构造函数:

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

如您所见,应使用EditText的默认样式,因此您的构造函数应如下所示:

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

这篇关于自定义EditText不在焦点上显示键盘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆