标签: android-input-method

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

我正在创建一个自定义的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 …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view android-input-method android-edittext

20
推荐指数
1
解决办法
8191
查看次数

如何从 Jetpack Compose TextField 关闭虚拟键盘?

我正在使用 Jetpack Compose TextField,我想在用户按下操作按钮(imeActionPerformed参数)时关闭虚拟键盘。

val text = +state { "" }
TextField(
    value = text.value,
    keyboardType = KeyboardType.Text,
    imeAction = ImeAction.Done,
    onImeActionPerformed = { 
        // TODO Close the virtual keyboard here <<<
    }
    onValueChange = { s -> text.value = s }
)
Run Code Online (Sandbox Code Playgroud)

android android-input-method kotlin android-jetpack-compose android-compose-textfield

19
推荐指数
4
解决办法
5424
查看次数

Android长按自定义键盘弹出键盘

我有自定义Android键盘:

    public class CustomKeyboard extends Keyboard{...}  

    public class CustomKeyboardView extends KeyboardView{...}

    public class CustomKeyboardIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener{...}  
Run Code Online (Sandbox Code Playgroud)

在一些按键,我有popupKeyboardpopupCharacters:

<Key android:codes="144" android:keyLabel="0" android:popupKeyboard="@xml/key_popup" android:popupCharacters=")" android:keyEdgeFlags="right"/>
Run Code Online (Sandbox Code Playgroud)

XML/key_popup.xml:

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
      android:keyWidth="10%p"
      android:horizontalGap="0px"
      android:verticalGap="0px"
      android:keyHeight="@dimen/key_height" >
</Keyboard>
Run Code Online (Sandbox Code Playgroud)

但是当我长按"0"键弹出")"显示时,它会一直保持在那里直到我按下"X"按钮或")"字符.它看起来像这样:
我的键盘

而且我希望它只在我按住手指时打开.像三星或HTC键盘上的东西:
三星键盘

有谁可以帮助我吗?

编辑至少可以改变这个弹出窗口的外观吗?我希望它具有与我制作的整个键盘相同的背景和键

keyboard android keyboard-events android-softkeyboard android-input-method

18
推荐指数
1
解决办法
5001
查看次数

如何在没有"辅助功能"权限的情况下检测输入法选取器可见性

我正在向用户显示输入法选择器,并且弹出选择器:

InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

im.showInputMethodPicker();
Run Code Online (Sandbox Code Playgroud)

现在,如果用户解雇了选择器(例如,通过点击选择器外部)我想知道,发生了这种情况并做了一些动作(比如显示通知).

我知道在一个Activity中我可以用脏方法检查根布局的焦点,我知道使用Accessibility权限我可以检查系统对话框是否有焦点.

问题是我正在运行一项服务,我需要检测IME选择器是否显示,即使我不在我的应用程序(例如第三方应用程序,甚至Android键盘设置)中,我也找到了辅助功能许可有点混淆用户因此我宁愿不诉诸于此并找到另一种方式.

还有另一种方法吗?

service android dialog android-input-method android-activity

16
推荐指数
1
解决办法
661
查看次数

如何确定Android中的当前IME?

我有一个应用程序,我想警告用户,如果他们没有使用默认的Android软键盘.(即他们使用Swype或其他东西).

如何查看当前选择的输入法?

keyboard android ime android-input-method

15
推荐指数
2
解决办法
8082
查看次数

Android:WebView/BaseInputConnection中的Backspace

Android(4.2)中的软键盘退格有问题.

我在WebView(CodeMirror)中有一个自定义编辑器,它在<textarea>内部使用空.似乎退格不是由Android系统发送的,除非它认为有一些文本<textarea>.

WebView onCreateInputConnection试图勉强降低软输入:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    Log.d("CustomWebView", "onCreateInputConnection(...)");
    BaseInputConnection connection = new BaseInputConnection(this, false);
    outAttrs.inputType = InputType.TYPE_NULL;
    outAttrs.imeOptions = EditorInfo.IME_ACTION_NONE;
    outAttrs.initialSelStart = -1;
    outAttrs.initialSelEnd = -1;

    return connection;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,甚至onKeyUp不需要退格.

如何强制软键盘始终发送退格?

android android-input-method android-4.2-jelly-bean

15
推荐指数
1
解决办法
9397
查看次数

如何在输入法的输入区域中使用自定义字体?

我们正在开发一个应用程序,我们需要使用自定义字体(Typeface从应用程序的资产中加载)EditText.所述的Android输入方法文档声明如下:

当输入焦点移入或移出可编辑的文本字段时,Android会根据需要显示或隐藏输入法(例如屏幕键盘).系统还会决定UI和文本字段在输入方法上方的显示方式.例如,当屏幕上的垂直空间受到约束时,文本字段可能会填充输入方法上方的所有空间.

这是大胆的部分让我们绊倒.短语"文本字段可能填充..."似乎具有误导性,因为使用的文本字段不是EditText我们使用自定义字体设置的字段.(注意:到目前为止的答案都解释了如何设置自定义字体EditText.我们已经在设置自定义字体EditText.请在回答前仔细阅读问题.)这是隐藏输入法的屏幕截图:

对话框

这是软键盘显示和垂直空间受限时会发生的情况:

约束垂直空间

如您所见,输入法上方文本字段中的字体不是我们的自定义字体(我猜它是系统的默认Roboto字体).对于我们尝试作为输入法的每个软键盘都会发生这种情况.

我想强调的是,当空间受限制时,键盘上方的这个视图是由系统内部生成的,而不是由我们的任何代码生成的.

主要问题是:是否有一种方法(如果是这样,它是什么?)来控制这种方式的外观(缺乏更好的术语)代理视图 - 至少让它使用我们的自定义字体?

如果我们还可以控制键盘上方整个代理区域的布局和外观(包括"完成"按钮),这将是一个额外的好处.我们使用此线程中描述的技术的变体来使我们的活动使用与系统中设置的区域不同的区域设置,但是活动的区域设置显然未在此处应用.(如果是的话,按钮会在左边,并且会显示"בוצע",如果我将设备的区域设置更改为希伯来语,就会发生这种情况.[编辑:我可以通过使用该android:imeActionLabel属性获得正确的按钮标签EditText.但是,我不知道如何控制布局方向性.])

编辑每个请求,这是我如何构建我的对话框(相关部分摘自a DialogFragment):

public Dialog onCreateDialog(Bundle savedInstanceState) {
    final Dialog dlg = new Dialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar);
    dlg.setContentView(R.layout.edit_note_dialog);
    mAnimator = (ViewAnimator) dlg.findViewById(R.id.animator);
    final Typeface hebrew = SystemData.getHebrewFont();
    mNoteEditor = (EditText) dlg.findViewById(R.id.note_field);
    mNoteEditor.setTypeface(hebrew);

    // etc. (setting fonts for other elements, adding listeners, etc.)
}
Run Code Online (Sandbox Code Playgroud)

这是布局:

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

android android-softkeyboard android-input-method android-edittext

15
推荐指数
1
解决办法
1393
查看次数

使用customview获取输入文本而不使用edittext android

我创建了customview.每当用户双击视图时,它应显示键盘,用户可以绘制新文本.

Holder是一个扩展视图的自定义视图.但它正在显示键盘.如何获取文字?

 public Holder(Context context, AttributeSet attrs) {
    super(context, attrs);
    Log.e(TAG,"EXE");
    imm = (InputMethodManager)
           context. getSystemService(Context.INPUT_METHOD_SERVICE);



 public boolean onDoubleTap(MotionEvent e) {        

        View view = Holder.this.getRootView();
        imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
     // imm.showSoftInput(Holder.this, InputMethodManager.SHOW_FORCED);  not working
Run Code Online (Sandbox Code Playgroud)

android canvas android-input-method

15
推荐指数
2
解决办法
3998
查看次数

Android中的InputMethodManager SHOW_FORCED和SHOW_IMPLICIT之间的区别

我想知道常数SHOW_FORCED和行为的差异SHOW_IMPLICIT.我试过了两个,看不出第一眼看上去有什么不同.

android android-input-method

14
推荐指数
1
解决办法
4649
查看次数

InputMethodService 与 Jetpack Compose - ComposeView 原因:组合到不传播 ViewTreeLifecycleOwner 的视图中

您可以在Github上找到一个示例项目来重现该问题

我一直在尝试使用 Jetpack Compose 作为键盘 UI。最终,当我尝试通过 InputMethodService 膨胀键盘时

class IMEService : InputMethodService() {

    override fun onCreateInputView(): View = KeyboardView(this)
}
Run Code Online (Sandbox Code Playgroud)

通过使用这个视图

class KeyboardView(context: Context) : FrameLayout(context)  {

    init {
        val view = ComposeView(context).apply {
            setContent {
                Keyboard() //<- This is the actual compose UI function
            }
        }
        addView(view)
    }

}
Run Code Online (Sandbox Code Playgroud)

或者

class KeyboardView2 constructor(
    context: Context,

    ) : AbstractComposeView(context) {

  
    @Composable
    override fun Content() {
        Keyboard()
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用键盘时,出现以下错误

class KeyboardView2 constructor(
    context: Context,

    ) : AbstractComposeView(context) {

  
    @Composable …
Run Code Online (Sandbox Code Playgroud)

android android-input-method android-view android-jetpack-compose

13
推荐指数
2
解决办法
5116
查看次数