gpt4 book ai didi

android - 自定义 EditText 未在焦点上显示键盘

转载 作者:IT老高 更新时间:2023-10-28 23:16:44 25 4
gpt4 key购买 nike

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

这是我的课:

    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 中使用它:

<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 类来处理的......

有什么提示吗?

最佳答案

这是一个老问题,但如果有人关心,问题在于构造函数的实现:

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

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

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

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

public CustomFontEditText(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.editTextStyle);
this.context = context;
}

关于android - 自定义 EditText 未在焦点上显示键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18848748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com