如何禁用edittext上的键盘popup?
在我的应用程序中,我的所有屏幕的第一个视图是一个EditText,所以每当我进入一个屏幕时,屏幕上的键盘popup。 我怎样才能禁用此popup窗口,并启用它时,手动点击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)是重点所在。
最好的解决scheme在于Project Manifest文件(AndroidManifest.xml)中 ,在activity
结构中添加以下属性
机器人:windowSoftInputMode = “stateHidden”
例:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
描述:
- 软键盘的状态 – 无论是隐藏还是可见 – 当活动成为用户关注的焦点时。
- 对活动的主窗口进行的调整 – 软键盘是否缩小尺寸,为软键盘腾出空间,或者当软键盘覆盖部分窗口时,内容是否平移以使当前焦点可见。
介绍:
- API级别3。
链接到文档
注意: 此处设置的值(“stateUnspecified”和“adjustUnspecified”除外)覆盖主题中设置的值。
你必须在EditText上面创build一个视图,它需要一个“假”焦点:
就像是 :
<!-- 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
在你的活动课上添加下面的代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
当用户点击EditText时,键盘将popup
edittext.setShowSoftInputOnFocus(false);
现在你可以使用你喜欢的任何自定义键盘。
您可以使用以下代码来禁用屏幕键盘。
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
两个简单的scheme:
第一个解决scheme被添加到清单xml文件中的代码行下面。 在Manifest文件(AndroidManifest.xml)中,在activity结构中添加以下属性
机器人:windowSoftInputMode = “stateHidden”
例:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
第二个解决scheme是在activity的下面添加代码
//Block auto opening keyboard this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
我们可以使用上面的任何一个解决scheme。 谢谢
人们在这里提出了很多很棒的解决scheme,但是我使用了这个简单的技术和我的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"/>
我的意图是在应用locking活动中使用这个编辑框,我要求用户inputPIN码,我想显示我的自定义密码键盘。 在Android Studio 2.1上testingminSdk = 8和maxSdk = 23
声明InputMethodManager的全局variables:
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); } });
这将工作。
使用下面的代码,写在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);
试试看…….我使用代码解决了这个问题:
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); }
没有什么可以input默认计算器上的任何东西,但你可以设置任何string。
尝试一下
试试这个:
EditText yourEditText= (EditText) findViewById(R.id.yourEditText); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
closures,你可以使用:
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); } });
在你的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);
唯一需要做的是在xml中为EditText添加android:focusableInTouchMode="false"
(如果有人仍然需要知道如何用简单的方法做到这一点)
在我正在构build的一个Android应用程序中,我在一个LinearLayout
水平排列了三个EditText
。 我不得不防止在加载碎片时出现软键盘。 除了在LinearLayout
blocksDescendants
设置为true之外,还必须将descendantFocusability
设置为blocksDescendants
。 在onCreate
,我在LinearLayout
上调用了requestFocus
。 这可以防止在创build片段时出现键盘。
布局 –
<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();
使用此来启用和禁用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; }
对于Xamarin用户:
[Activity(MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait, WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop
试试这个答案,
editText.setRawInputType(InputType.TYPE_CLASS_TEXT); editText.setTextIsSelectable(true);
注意:仅适用于API 11+
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; }
那么,我有同样的问题,我只是在XML文件焦点处理。
<EditText android:cursorVisible="false" android:id="@+id/edit" android:focusable="false" android:layout_width="match_parent" android:layout_height="wrap_content" />
你可能也在寻找安全。 这也将有助于。
<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"/>
如果你正在使用Xamarin,你可以添加这个
Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]
此后可以在OnCreate()方法中添加此行
youredittext.ShowSoftInputOnFocus = false;
如果目标设备不支持上述代码,则可以在EditText单击事件中使用以下代码
InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService); Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);
对于你的活动的任何textview(或创build与android:layout_width =“0dp”android:layout_height =“0dp”)假的空textfiew,并为此textview添加下一个:android:textIsSelectable =“true”
如果有人仍在寻找最简单的解决scheme,请在您的父级布局上将以下属性设置为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>