В моем приложении первый вид всех моих экранов - это 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) - это то место, где находится фокус.
android
android-edittext
Комнатная муха
источник
источник
Ответы:
Самое лучшее решение лежит в файле проекта манифеста (AndroidManifest.xml) , добавьте следующий атрибут в
activity
конструкцииПример:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
Описание:
Представлено в:
Ссылка на документы
Примечание. Установленные здесь значения (кроме «stateUnspecified» и «adjustUnspecified») переопределяют значения, установленные в теме.
источник
Вы должны создать представление над 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
источник
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
edittext.setShowSoftInputOnFocus(false);
Теперь вы можете использовать любую настраиваемую клавиатуру, которая вам нравится.
источник
Люди предложили здесь много отличных решений, но я использовал эту простую технику с моим EditText (ничего в java и AnroidManifest.xml не требуется). Просто установите для вашего focusable и focusableInTouchMode значение false непосредственно в EditText.
<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"/>
Я намерен использовать это поле редактирования в блокировке приложения, где я прошу пользователя ввести ПИН-код, и я хочу показать свою настраиваемую ПИН-панель. Протестировано с minSdk = 8 и maxSdk = 23 на Android Studio 2.1.
источник
Добавьте ниже код в свой класс активности.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Клавиатура будет всплывать, когда пользователь нажимает на EditText
источник
Вы можете использовать следующий код для отключения экранной клавиатуры.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
источник
Два простых решения:
Первое решение добавлено под строкой кода в XML-файле манифеста. В файле манифеста (AndroidManifest.xml) добавьте следующий атрибут в конструкцию действия
android: windowSoftInputMode = "stateHidden"
Пример:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
Второе решение добавляет строку кода в действие
//Block auto opening keyboard this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Мы можем использовать любое из вышеперечисленных решений. благодаря
источник
Объявите глобальную переменную для 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); } });
Это сработает.
источник
Используйте следующий код, напишите его под
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); }
ничего, что вы можете ввести по умолчанию калькулятором ни на что, кроме вы можете установить любую строку.
попытайся
источник
Спасибо @AB за хорошее решение
android:focusableInTouchMode="false"
В этом случае, если вы отключите клавиатуру в тексте редактирования, просто добавьте android: focusableInTouchMode = "false" в слоган edittext.
работать для меня в Android Studio 3.0.1 minsdk 16, maxsdk26
источник
A.B
ответу? Или это ответ на исходный вопрос? Если это комментарий кA.B
ответу, вам следует использовать параметр комментария, предоставленный StackOverflow, и удалить этот ответ на исходный вопрос.Попробуйте с этим:
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); } });
источник
Единственное, что вам нужно сделать, это добавить
android:focusableInTouchMode="false"
в EditText в xml и все. (Если кому-то еще нужно знать, как это сделать простым способом)источник
Ну, у меня была та же проблема, и я просто занялся фокусировкой в файле XML.
<EditText android:cursorVisible="false" android:id="@+id/edit" android:focusable="false" android:layout_width="match_parent" android:layout_height="wrap_content" />
Вы, вероятно, тоже ищете безопасности. Это поможет и в этом.
источник
Используйте следующий код в своем
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);
источник
Для пользователей Xamarin:
[Activity(MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait, WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop
источник
<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);
источник
Я обнаружил, что следующий шаблон хорошо работает для меня в коде, где я хочу показать диалоговое окно для получения ввода (например, строка, отображаемая в текстовом поле, является результатом выбора, сделанного из списка флажков в диалоговом окне, а не текст, вводимый с клавиатуры).
Первые щелчки в текстовом поле приводят к изменению фокуса, повторный щелчок вызывает событие щелчка. Поэтому я переопределяю оба (здесь я не реорганизую код, чтобы показать, что оба обработчика делают одно и то же):
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"); } }); }
источник
В приложении для Android, которое я создавал, у меня было три
EditText
элемента,LinearLayout
расположенных по горизонтали. Пришлось не допускать появления мягкой клавиатуры при загрузке фрагмента. В дополнение к установкеfocusable
иfocusableInTouchMode
к истине наLinearLayout
, я должен был установить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();
источник
Если кто-то все еще ищет самое простое решение, установите для следующего атрибута в
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>
источник
Используйте это для включения и отключения 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; }
источник
Попробуйте этот ответ,
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; }
источник
для любого текстового представления в вашей деятельности (или создайте поддельный пустой текстовый вид с помощью android: layout_width = "0dp" android: layout_height = "0dp") и добавьте для этого текстового представления следующее: android: textIsSelectable = "true"
источник
Просто удалите тег "" из XML-файла
источник
Просто нужно добавить свойство,
android:focusable="false"
в частности,EditText
в макет xml. Затем вы можете написать список кликовEditText
без всплывающего окна клавиатуры.источник
Эту проблему можно отсортировать с помощью: Нет необходимости устанавливать для editText inputType какие-либо значения, просто добавьте строку ниже, editText.setTextIsSelectable (true);
источник
inputType
. Но похоже, что было бы неплохо узнать, согласился ли я с этим другим ответом, поэтому, даже если вы настаиваете на том, чтобы оставить его как отдельный ответ, все равно оставьте там комментарий.