我的布局中有一个EditText和一个Button.
在编辑字段中写入并单击后Button,我想隐藏虚拟键盘.我假设这是一段简单的代码,但我在哪里可以找到它的一个例子?
android soft-keyboard android-layout android-softkeyboard android-input-method
我想在EditText聚焦时自动显示软键盘(如果设备没有物理键盘),我有两个问题:
当我Activity显示时,我EditText的注意力集中但键盘没有显示,我需要再次点击它来显示键盘(显示我的键盘时应Activity显示).
当我在键盘上单击完成时,键盘被解除但是EditText保持聚焦并且不想要(因为我的编辑完成了).
要恢复,我的问题是在iPhone上有更多类似的东西:它使键盘与我的EditText状态同步(聚焦/不聚焦),当然如果有物理键盘,则不会出现软键盘.
keyboard android focus android-softkeyboard android-edittext
我有一个布局,其中包含一些像这样的视图:
<LinearLayout>
<TextView...>
<TextView...>
<ImageView ...>
<EditText...>
<Button...>
</linearLayout>
Run Code Online (Sandbox Code Playgroud)
如何以EditText编程方式设置焦点(显示键盘)?
我已经尝试了这个,只有当我Activity正常启动时它才有效,但是当我在a中启动它时TabHost,它不起作用.
txtSearch.setFocusableInTouchMode(true);
txtSearch.setFocusable(true);
txtSearch.requestFocus();
Run Code Online (Sandbox Code Playgroud) 我使用AlertDialog.Builder来创建一个输入框,使用EditText作为输入方法.
遗憾的是,虽然EditText处于焦点状态,但软键盘不会弹出,除非您再次明确触摸它.
有没有办法强迫它弹出?
我在(AlertDialog.Builder).show()之后尝试了以下内容.但无济于事.
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(input, InputMethodManager.SHOW_FORCED);
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
谢谢!!
所以我有一个似乎常见的问题,就是我的对话框中的EditText在获得焦点时不会显示出来.我已经看过几个解决方法,比如在这个帖子中,这一个和这一个(还有更多),但我从来没有见过一个令人满意的解释,为什么这首先发生.
我更倾向于让Android使用自己的EditTexts默认行为,而不是构建我自己的行为,但似乎每个人(在那些线程中)已经接受了Dialogs中EditTexts的默认行为是只给光标而没有键盘.那为什么会这样?
为了记录,这些解决方法似乎都没有对我有用 - 我最接近的是强制键盘出现在对话框下面(使用InputMethodManager.toggleSoftKeyboard(*)).我的特殊配置是API15,EditText显示在AlertDialog中ListView的页脚中.设置了EditText android:focusable ="true",onFocusChangeListener 正在接收焦点事件.
编辑:
根据要求,这是我正在使用的特定代码段.我不打算整个布局,但在这个特定的应用程序中,EditText响应于按下对话框上的按钮而出现(类似于动作视图).它包含在RelativeLayout中,默认情况下可见性"已消失":
<RelativeLayout
android:id="@+id/relLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:visibility="gone"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
<ImageButton
android:id="@+id/cancelBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@color/transparent"
android:src="@drawable/cancelButton"
android:layout_margin="5dp"/>
<ImageButton
android:id="@+id/okBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/cancelBut"
android:background="@color/transparent"
android:src="@drawable/okButton"
android:layout_margin="5dp" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:focusable="true"
android:layout_toLeftOf="@id/okBut"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
构建它的代码将relativeLayout的可见性设置为"Visible"(并隐藏其他UI元素).根据我使用EditText的经验,这应该足以在EditText聚焦时拉起键盘.但是,出于某种原因,情况并非如此.我可以在onFocusChangeListener上设置以下内容:
edit_text.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// For whatever reason we need to request …Run Code Online (Sandbox Code Playgroud) 在我看来,我有一个搜索EditText,我想以编程方式触发字段上的单击事件的行为,即将焦点放在文本字段上并在必要时显示软键盘(如果没有可用的硬键盘).
我试过了field.requestFocus().该字段实际上获得焦点但不显示软键盘.
我试过了field.performClick().但那只调用该字段的OnClickListener.
任何的想法 ?
我正在显示一个带有edittext视图的对话框.但是,仅当用户按下编辑视图内部时,才会打开软键盘.所以我尝试使用以下代码调用InputMethodManager.
InputMethodManager imm =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);
Run Code Online (Sandbox Code Playgroud)
dialogField是输入字段.但是,我到底应该这样做呢?我在对话框的onStart()方法中尝试了它,但没有任何反应.我之前也尝试过请求对话框的焦点,但这没有任何改变.
我也试过这段代码
dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
public void onFocusChange (View v, boolean hasFocus)
{
if (hasFocus)
{
Main.log("here");
dialogInput.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
/*
InputMethodManager mgr =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(dialogField,0);
*/
}
}
});
Run Code Online (Sandbox Code Playgroud)
在两个版本中.但是没有软键盘会出现.Main.log只是一个日志,它向我显示该函数实际被调用.是的,它被称为.
在对话框打开之前,我可以使用SHOW_FORCED标志获取键盘.但是在退出时它不会关闭.而且我只能在显示对话框之前这样做.在任何回调中它也不起作用.
请解释一下软键盘的问题.例如,我在我的活动或对话片段或片段活动上有一个EditText,无论如何.这里是:
<EditText
android:id="@+id/edPswrd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword" >
<requestFocus />
</EditText>
Run Code Online (Sandbox Code Playgroud)
当它第一次显示我没有看到软键盘并且必须按editText才能获得焦点并且键盘出现.另一个活动是不同的,当它出现在屏幕上时,键盘在没有任何帮助的情况下加载.我以为
<requestFocus />
意味着EditText将被聚焦并且键盘将出现,但我错了.
如何管理哪些组件将获得焦点,键盘将自动显示.
我打开输入对话框的代码如下:
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Dialog Title");
alert.setMessage("Request information");
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.edittextautotextlayout, null);
final EditText inputBox = (EditText) textEntryView.findViewById(R.id.my_et_layout);
alert.setView(inputBox);
Run Code Online (Sandbox Code Playgroud)
这很好用,除了我必须在软键盘出现之前点击文本输入行.
按照这里给出的建议我尝试插入:
inputBox.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
alert.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但Eclipse对象"没有为AlertDialog.Builder类型定义方法getWindow()".
似乎setOnFocusChangeListener代码适用于AlertDialog对象,但不适用于AlertDialog.Builder.我应该如何修改我的代码以使软键盘自动显示.
我需要知道用户何时触摸/点击/点击我的活动中的edittext.
如何在不中断事件的情况下执行此操作,以便键盘仍能正常显示?
(在操作系统显示键盘之前我需要了解它...如果可能的话)
我想检测当前用户手机是否有硬件键盘或只有屏幕键盘.这可能与SDK有关吗?
我的页面只有一个TextInput,并且我已经传入了autoFocus 道具: autoFocus: true。
<TextInput
style={styles.textInput}
placeholder="Quiz Deck Title"
autoFocus={true}
value={this.state.title}
onChangeText={(title) => this.controlledTextInput(title)}
/>
Run Code Online (Sandbox Code Playgroud)
我试图避免的是要求用户TextInput在键盘弹出之前“单击”框中。
但我也想让软键盘也自动打开(如果设备没有硬件键盘)。
有没有办法让本机反应发生这种情况?我正在为 ios 和 android 开发。
如果重要的话,我的页面是通过 TabNavigator 导航到的。
我提到这一点是因为对另一个类似的 SO 问题(见下文)的评论表明他们在使用 StackNavigator 到达他们的页面时遇到了类似的问题。
关于类似问题的注意事项:
如何在 React Native 中自动打开键盘?
: 没有提供解决方案,其他人的评论和我的结果一样:输入有焦点,但键盘没有自动打开。
关闭/隐藏 Android 软键盘
和Android:当焦点位于 EditText 时自动显示软键盘
:使用原生 android 代码 (java),而不是响应原生代码 (javascript)。
注意:我正在使用带有 android 23(推荐)的 android 模拟器 Nexus 6P 和带有 iPhone 6s 的 ios 模拟器进行开发,因为我没有物理设备。
编辑:添加请求的代码
NewDeck.js(我希望键盘自动弹出的视图):
import React from 'react';
import { connect …Run Code Online (Sandbox Code Playgroud) 我已经阅读了这篇文章,它会在显示一个对话框时自动显示虚拟键盘.但是,它不适合我.任何想法为什么?虽然当对话框出现时编辑文本自动聚焦,但事件不会触发.我也读过onpostresume的答案,但我不知道如何应用它.任何帮助表示赞赏.
final Dialog dialog = new Dialog(ThesisI.this);
dialog.setContentView(R.layout.budget_dialog);
final EditText et = (EditText) dialog.findViewById(R.id.textComments);
final Button enter = (Button) dialog.findViewById(R.id.buttonEnter);
final Button cancel = (Button) dialog.findViewById(R.id.buttonCancel);
enter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
/**cancel */
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
dialog.show();
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,我注意到如果我将焦点更改为按钮,则再次聚焦到编辑文本.此事件有效,使用下面的代码.
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean …Run Code Online (Sandbox Code Playgroud)