如何在EditText上时禁用键盘弹出?如何在EditText上时禁用键盘弹出?(How to di

2019-05-14 05:16发布

在我的应用我的所有屏幕的第一个观点是一个EditText,所以我每次去到屏幕时屏幕上的键盘弹出。 我怎么可以禁用此popingup并启用手动点击的时候的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)为其中着重。

Answer 1:

最好的解决办法是在项目清单文件(AndroidManifest.xml中),在添加下列属性activity构造

机器人:windowSoftInputMode = “stateHidden”


例:

    <activity android:name=".MainActivity" 
              android:windowSoftInputMode="stateHidden" />

描述:

  • 软键盘的状态-无论是隐藏或显示-当活动成为用户关注的焦点。
  • 调整到该活动的主窗口中进行-无论是较小的调整,以腾出空间软键盘,还是它的内容平移,使当前的焦点时可见窗口的一部分被软键盘覆盖。

介绍:

  • API等级3。

链接到文档

注: 这里的值设定在主题设置的替代值(不是“stateUnspecified”和“adjustUnspecified”等)。



Answer 2:

你必须创建一个视图时,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



Answer 3:

     edittext.setShowSoftInputOnFocus(false);

现在你可以使用任何你喜欢的自定义键盘。



Answer 4:

添加下面的代码在你的活动类。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

当用户点击键盘的EditText会弹出调升



Answer 5:

人们在这里提出许多解决方案,但我用这个简单的技术与我的EditText(在Java中没有与AnroidManifest.xml是必需的)。 只要您的可聚焦和focusableInTouchMode直接的EditText设置为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"/>

我在这里的目的是使用应用程序锁活动该编辑框,我要求用户输入PIN码,我想表明我的自定义密码键盘。 与minSdk = 8和maxSdk = 23上的Android工作室2.1测试



Answer 6:

您可以使用下面的代码禁用屏幕键盘。

InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(editText.getWindowToken(), 0);


Answer 7:

两个简单的解决方案:

第一溶液中加入以下清单中XML文件的代码行。 在清单文件(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);

我们可以使用以上的任何一种解决方案。 谢谢



Answer 8:

申报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);
    }
});

这将工作。



Answer 9:

使用下面的代码,它在写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);


Answer 10:

试试吧.......我使用代码解决这个问题: -

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);
}

没有U可以在任何预设输入计算器但你可以设置任何字符串。

试试吧



Answer 11:

尝试这样的:

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);  
    }
});


Answer 12:

嗯,我有同样的问题,我只是在XML文件中可聚焦解决。

<EditText
            android:cursorVisible="false"
            android:id="@+id/edit"
            android:focusable="false"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

你可能也在寻求安全。 这将有助于谓也。



Answer 13:

感谢@AB良好的解决方案

    android:focusableInTouchMode="false"

这种情况下,如果你将禁用键盘编辑文本,只需添加机器人:focusableInTouchMode =在EditText上的标语“假”。

工作对我来说Android Studio中3.0.1 minsdk 16,maxsdk26



Answer 14:

使用下面的代码在你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);


Answer 15:

你唯一需要做的事情是,添加android:focusableInTouchMode="false" ,在XML的EditText上和多数民众赞成(如果有人仍然需要知道怎么做,用简单的方法)



Answer 16:

对于Xamarin用户:

[Activity(MainLauncher = true, 
        ScreenOrientation = ScreenOrientation.Portrait, 
        WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop


Answer 17:

如果你正在使用Xamarin您可以添加此

Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]

此后,你可以在OnCreate中加入这一行()方法

youredittext.ShowSoftInputOnFocus = false;

如果目标设备不支持上面的代码,你可以点击的EditText事件使用下面的代码

InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);


Answer 18:

我发现下面的模式在代码中对我很好地工作,我想显示一个对话框来获得输入(例如,在文本字段中显示的字符串是一个复选框列表的对话框中所做的,而不是选择的结果文本通过键盘输入)。

  1. 禁用软输入焦点编辑字段。 我不能禁用整个活动,因为有编辑字段我也想在相同的布局要用于键盘。
  2. 在文本字段初始点击产生焦点变化,重复点击产生一个点击事件。 所以我会覆盖(在这里我不重构代码,以说明这两个处理程序做同样的事情):

     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"); } }); } 


Answer 19:

在Android应用我是建设,我有三个EditText S IN一个LinearLayout水平排列。 我不得不防的软键盘从片段加载时出现。 除了设置focusablefocusableInTouchMode在为true LinearLayout ,我必须设置descendantFocusabilityblocksDescendants 。 在onCreate ,我叫requestFocusLinearLayout 。 这从在创建片段时出现防止了键盘。

布局 -

    <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();



Answer 20:

如果有人还在寻找最简单的方法,设置以下属性为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>


Answer 21:

用这个来启用和禁用的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;
    }


Answer 22:

试试这个答案,

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);

注:只针对API 11+



Answer 23:

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;
}


Answer 24:

       <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"/>


Answer 25:

从XML文件中简单,只需要删除“”标签



Answer 26:

这问题可以通过使用排序,无需EDITTEXT的inputType设置为任意值,只需添加下面一行,editText.setTextIsSelectable(真);



Answer 27:

在您的活动的任何的TextView(或创建与Android假空textfiew:layout_width = “0dp” 机器人:layout_height = “0dp”),并添加这个TextView的未来:机器人:textIsSelectable = “真”



Answer 28:

只需要添加属性android:focusable="false"特别EditText在布局XML。 然后,你可以写点击听者的EditText没有键盘弹出。



文章来源: How to disable keypad popup when on edittext?