如何禁用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> 

onCreatemTextSelectorContainer.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>