在我的应用程序中,我所有屏幕的第一个视图是EditText,因此每次进入屏幕时,屏幕键盘都会弹出。如何禁用此弹出窗口并在手动单击EditText ????
时启用它 eT = (EditText) findViewById(R.id.searchAutoCompleteTextView_feed);
eT.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(eT.getWindowToken(), 0);
}
}
});
xml代码:
<ImageView
android:id="@+id/feedPageLogo"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/wic_logo_small" />
<Button
android:id="@+id/goButton_feed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/go" />
<EditText
android:id="@+id/searchAutoCompleteTextView_feed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/goButton_feed"
android:layout_toRightOf="@id/feedPageLogo"
android:hint="@string/search" />
<TextView
android:id="@+id/feedLabel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/feedPageLogo"
android:gravity="center_vertical|center_horizontal"
android:text="@string/feed"
android:textColor="@color/white" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ButtonsLayout_feed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/feedButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/feed"
android:textColor="@color/black" />
<Button
android:id="@+id/iWantButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/iwant"
android:textColor="@color/black" />
<Button
android:id="@+id/shareButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/share"
android:textColor="@color/black" />
<Button
android:id="@+id/profileButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/profile"
android:textColor="@color/black" />
</LinearLayout>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/feedListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/ButtonsLayout_feed"
android:layout_below="@id/feedLabel"
android:textSize="15dp" >
</ListView>
第三个视图(EditText)是焦点所在。
答案 0 :(得分:167)
最佳解决方案在Project Manifest文件(AndroidManifest.xml)中,在activity
构造中添加以下属性
机器人:windowSoftInputMode = “stateHidden”
示例:强>
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateHidden" />
说明:
介绍于:
注意:强> 此处设置的值(“stateUnspecified”和“adjustUnspecified”除外)会覆盖主题中设置的值。
答案 1 :(得分:81)
您必须在EditText上方创建一个视图,该视图采用“虚假”焦点:
类似的东西:
<!-- Stop auto focussing the EditText -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/transparent"
android:focusable="true"
android:focusableInTouchMode="true">
</LinearLayout>
<EditText
android:id="@+id/searchAutoCompleteTextView_feed"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:inputType="text" />
在这种情况下,我使用LinearLayout来请求焦点。希望这会有所帮助。
这非常有效......感谢Zaggo0
答案 2 :(得分:35)
edittext.setShowSoftInputOnFocus(false);
现在您可以使用自己喜欢的任何自定义键盘。
答案 3 :(得分:20)
在您的活动类上添加以下代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
当用户点击EditText
时,会弹出键盘答案 4 :(得分:19)
人们在这里提出了许多很好的解决方案,但我在EditText中使用了这个简单的技术(java中没有任何东西,并且需要AnroidManifest.xml)。只需在EditText上直接将focusable和focusableInTouchMode设置为false。
<EditText
android:id="@+id/text_pin"
android:layout_width="136dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:textAlignment="center"
android:inputType="numberPassword"
android:password="true"
android:textSize="24dp"
android:focusable="false"
android:focusableInTouchMode="false"/>
我的目的是在App锁定活动中使用此编辑框,我要求用户输入PIN码,并且我想显示我的自定义密码键盘。在Android Studio 2.1上使用minSdk = 8和maxSdk = 23进行测试
答案 5 :(得分:9)
您可以使用以下代码禁用OnScreen键盘。
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
答案 6 :(得分:7)
两个简单的解决方案:
第一个解决方案 将添加到清单xml文件中的代码行下方。 在Manifest文件(AndroidManifest.xml)中,在活动构造中添加以下属性
机器人:windowSoftInputMode = “stateHidden”
示例:强>
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateHidden" />
第二个解决方案在活动
中添加以下代码行//Block auto opening keyboard
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
我们可以使用上述任何一种解决方案。感谢
答案 7 :(得分:5)
为InputMethodManager声明全局变量:
private InputMethodManager im ;
在onCreate()下定义它:
im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(youredittext.getWindowToken(), 0);
将onClickListener设置为oncreate()中的编辑文本:
youredittext.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
im.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT);
}
});
这样可行。
答案 8 :(得分:4)
使用以下代码,将其写在onCreate()
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
答案 9 :(得分:4)
试试.......我用代码解决了这个问题: -
EditText inputArea;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputArea = (EditText) findViewById(R.id.inputArea);
//This line is you answer.Its unable your click ability in this Edit Text
//just write
inputArea.setInputType(0);
}
除了你可以设置任何字符串之外,你可以默认输入任何东西。
试试吧
答案 10 :(得分:2)
试试这个:
EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
要关闭,您可以使用:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
在您的代码中尝试这样:
ed = (EditText)findViewById(R.id.editText1);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);
ed.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(ed, InputMethodManager.SHOW_IMPLICIT);
}
});
答案 11 :(得分:2)
好吧,我遇到了同样的问题,我刚刚在XML文件中解决了这个问题。
<EditText
android:cursorVisible="false"
android:id="@+id/edit"
android:focusable="false"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
您可能也在寻找安全性。这也有助于此。
答案 12 :(得分:2)
感谢@ A.B提供了良好的解决方案
android:focusableInTouchMode="false"
这种情况如果您要在编辑文本中禁用键盘,只需在edittext标语中添加 android:focusableInTouchMode =“false”。
在Android Studio 3.0.1 minsdk 16,maxsdk26
中为我工作答案 13 :(得分:1)
如果您使用的是Xamarin 你可以添加这个
Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]
此后你可以在OnCreate()方法
中添加这一行youredittext.ShowSoftInputOnFocus = false;
如果目标设备不支持上述代码,您可以在EditText点击事件中使用以下代码
InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);
答案 14 :(得分:1)
我发现以下模式在我想要显示对话框以获取输入的代码中很适合我(例如,文本字段中显示的字符串是从对话框中的复选框列表中进行选择的结果,而不是通过键盘输入的文字)。
文本字段中的初始点击产生焦点更改,重复点击会产生点击事件。所以我重写两者(这里我不重构代码以说明两个处理程序都做同样的事情):
tx = (TextView) m_activity.findViewById(R.id.allergymeds);
if (tx != null) {
tx.setShowSoftInputOnFocus(false);
tx.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
mld.setPatientId(m_sess.getActivePatientId());
mld.show(getFragmentManager(), "Allergy Medications Dialog");
}
}
});
tx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
mld.setPatientId(m_sess.getActivePatientId());
mld.show(getFragmentManager(), "Allergy Medications Dialog");
}
});
}
答案 15 :(得分:1)
您唯一需要做的就是将android:focusableInTouchMode="false"
添加到xml中的EditText中,这就是全部。(如果有人仍然需要知道如何以简单的方式做到这一点)
答案 16 :(得分:1)
对于Xamarin用户:
[Activity(MainLauncher = true,
ScreenOrientation = ScreenOrientation.Portrait,
WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop
答案 17 :(得分:1)
在onCreate()
方法中使用以下代码 -
editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
editText.postDelayed(new Runnable() {
public void run() {
InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.hideSoftInputFromWindow(
editText.getWindowToken(), 0);
}
}, 200);
答案 18 :(得分:0)
使用此选项启用和禁用EditText ....
InputMethodManager imm;
imm = (InputMethodManager)
getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (isETEnable == true) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
ivWalllet.setImageResource(R.drawable.checkbox_yes);
etWalletAmount.setEnabled(true);
etWalletAmount.requestFocus();
isETEnable = false;
}
else {
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);
ivWalllet.setImageResource(R.drawable.checkbox_unchecked);
etWalletAmount.setEnabled(false);
isETEnable = true;
}
答案 19 :(得分:0)
试试这个答案,
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);
注意:仅适用于API 11 +
答案 20 :(得分:0)
private InputMethodManager imm;
...
editText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.onTouchEvent(event);
hideDefaultKeyboard(v);
return true;
}
});
private void hideDefaultKeyboard(View et) {
getMethodManager().hideSoftInputFromWindow(et.getWindowToken(), 0);
}
private InputMethodManager getMethodManager() {
if (this.imm == null) {
this.imm = (InputMethodManager) getContext().getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
}
return this.imm;
}
答案 21 :(得分:0)
如果有人仍在寻找最简单的解决方案,请在父布局上将以下属性设置为true
android:focusableInTouchMode="true"
示例:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true">
.......
......
</android.support.constraint.ConstraintLayout>
答案 22 :(得分:0)
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true">
<requestFocus/>
</TextView>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content"/>
答案 23 :(得分:0)
在我正在构建的Android应用中,我在水平排列的EditText
中有三个LinearLayout
个。当片段加载时,我不得不阻止软键盘出现。除了在focusable
上将focusableInTouchMode
和LinearLayout
设置为true之外,我还必须将descendantFocusability
设置为blocksDescendants
。在onCreate
,我在requestFocus
上拨打了LinearLayout
。这样就可以防止键盘在创建片段时出现。
布局 -
<LinearLayout
android:id="@+id/text_selector_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3"
android:orientation="horizontal"
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="blocksDescendants"
android:background="@color/black">
<!-- EditText widgets -->
</LinearLayout>
在onCreate
- mTextSelectorContainer.requestFocus();
答案 24 :(得分:0)
简单,只需从xml文件中删除“”标签
答案 25 :(得分:0)
可以通过使用以下方式对问题进行排序: 无需将editText inputType设置为任何值, 只需添加以下行, editText.setTextIsSelectable(true);
答案 26 :(得分:0)
如果您想在任何事件中在屏幕上隐藏键盘,请尝试使用以下代码行。它对我有用。
context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN );
final InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (inputMethodManager.isAcceptingText()) inputMethodManager.hideSoftInputFromWindow(context.getCurrentFocus().getWindowToken(), 0);
答案 27 :(得分:-1)
对于您活动中的任何textview(或使用android创建假空文本视图:layout_width =“0dp” 机器人:layout_height = “0dp” )并为下一个文本视图添加: 机器人:textIsSelectable = “真”
答案 28 :(得分:-1)
只需在布局xml中添加属性android:focusable="false"
,尤其是EditText
。然后,您可以编写EditText
的点击列表,而无需弹出键盘。