W mojej aplikacji pierwszym widokiem wszystkich moich ekranów jest EditText, więc za każdym razem, gdy przechodzę do ekranu, pojawia się klawiatura ekranowa. jak mogę wyłączyć to wyskakujące okienko i włączyć je po ręcznym kliknięciu na 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);
}
}
});
kod 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>
w trzecim widoku (EditText) jest fokus.
android
android-edittext
Mucha
źródło
źródło
Odpowiedzi:
Najlepsze rozwiązanie znajduje się w pliku manifestu projektu (AndroidManifest.xml) , dodaj następujący atrybut w
activity
konstrukcjiPrzykład:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
Opis:
Wprowadzono w:
Link do dokumentów
Uwaga: wartości ustawione w tym miejscu (inne niż „stateUnspecified” i „adjustUnspecified”) zastępują wartości ustawione w kompozycji.
źródło
Musisz utworzyć widok nad tekstem edycji, który ma `` fałszywy '' fokus:
Coś jak :
<!-- 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" />
W tym przypadku użyłem LinearLayout, aby zażądać fokusu. Mam nadzieję że to pomoże.
To działało idealnie ... dzięki Zaggo0
źródło
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
edittext.setShowSoftInputOnFocus(false);
Teraz możesz używać dowolnej niestandardowej klawiatury.
źródło
Ludzie sugerowali tutaj wiele świetnych rozwiązań, ale użyłem tej prostej techniki z moim EditTextem (nic nie jest wymagane w Javie i AnroidManifest.xml). Po prostu ustaw focusable i focusableInTouchMode na false bezpośrednio w 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"/>
Moim zamiarem jest tutaj użycie tego pola edycji w działaniu blokady aplikacji, w którym proszę użytkownika o wprowadzenie kodu PIN i chcę pokazać mój niestandardowy PIN pad. Testowane z minSdk = 8 i maxSdk = 23 w Android Studio 2.1
źródło
Dodaj poniższy kod do swojej klasy aktywności.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Klawiatura pojawi się, gdy użytkownik kliknie EditText
źródło
Możesz użyć następującego kodu, aby wyłączyć Klawiaturę ekranową.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
źródło
Dwa proste rozwiązania:
Pierwsze rozwiązanie jest dodawane poniżej linii kodu w pliku manifestu xml. W pliku manifestu (AndroidManifest.xml) dodaj następujący atrybut w konstrukcji działania
android: windowSoftInputMode = "stateHidden"
Przykład:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
Drugie rozwiązanie polega na dodaniu poniższego wiersza kodu w aktywności
//Block auto opening keyboard this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Możemy użyć jednego z powyższych rozwiązań. Dzięki
źródło
Zadeklaruj zmienną globalną dla InputMethodManager:
private InputMethodManager im ;
W onCreate () zdefiniuj to:
im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(youredittext.getWindowToken(), 0);
Ustaw onClickListener na ten tekst edycji wewnątrz oncreate ():
youredittext.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { im.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT); } });
To zadziała.
źródło
Użyj poniższego kodu, zapisz go pod
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);
źródło
spróbuj ....... rozwiązuję ten problem za pomocą kodu: -
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); }
nic nie możesz wprowadzić domyślnie kalkulatora na cokolwiek, ale możesz ustawić dowolny ciąg.
Spróbuj
źródło
Dzięki @AB za dobre rozwiązanie
android:focusableInTouchMode="false"
w tym przypadku, jeśli wyłączysz klawiaturę w edycji tekstu, po prostu dodaj android: focusableInTouchMode = "false" w sloganie edittext.
działa dla mnie w Android Studio 3.0.1 minsdk 16, maxsdk26
źródło
A.B
odpowiedzi? Czy jest to odpowiedź na pierwotne pytanie? Jeśli jest to komentarz doA.B
odpowiedzi, należy użyć opcji komentarza udostępnionej przez StackOverflow i usunąć tę odpowiedź na pierwotne pytanie.Spróbuj z tym:
Aby zamknąć, możesz użyć:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
Spróbuj tak w swoim kodzie:
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); } });
źródło
Cóż, miałem ten sam problem i właśnie poradziłem sobie z fokusem w pliku XML.
<EditText android:cursorVisible="false" android:id="@+id/edit" android:focusable="false" android:layout_width="match_parent" android:layout_height="wrap_content" />
Prawdopodobnie szukasz również bezpieczeństwa. To również w tym pomoże.
źródło
Użyj następującego kodu w swojej
onCreate()
metodzie-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);
źródło
Jedyne, co musisz zrobić, to dodać
android:focusableInTouchMode="false"
do EditText w XML i to wszystko (jeśli ktoś nadal musi wiedzieć, jak to zrobić w łatwy sposób)źródło
Dla użytkowników platformy Xamarin:
[Activity(MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait, WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop
źródło
<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"/>
źródło
Jeśli korzystasz z platformy Xamarin, możesz to dodać
Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]
następnie możesz dodać tę linię w metodzie OnCreate ()
youredittext.ShowSoftInputOnFocus = false;
Jeśli docelowe urządzenie nie obsługuje powyższego kodu, możesz użyć poniższego kodu w zdarzeniu kliknięcia EditText
InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService); Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);
źródło
Znalazłem następujący wzorzec, który działa dobrze dla mnie w kodzie, w którym chcę pokazać okno dialogowe, aby uzyskać dane wejściowe (np. Ciąg wyświetlany w polu tekstowym jest wynikiem wyborów dokonanych z listy pól wyboru w oknie dialogowym, a nie tekst wprowadzany za pomocą klawiatury).
Pierwsze kliknięcia w polu tekstowym powodują zmianę fokusu, a powtórne kliknięcie - zdarzenie kliknięcia. Więc nadpisuję oba (tutaj nie refaktoryzuję kodu, aby zilustrować, że oba programy obsługujące robią to samo):
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"); } }); }
źródło
W aplikacji na Androida, którą budowałem, miałem trzy
EditText
sekundy wLinearLayout
układzie poziomym. Musiałem zapobiec pojawianiu się miękkiej klawiatury po załadowaniu fragmentu. Oprócz ustawieniafocusable
ifocusableInTouchMode
na true poLinearLayout
musiałem zestawdescendantFocusability
doblocksDescendants
. WonCreate
, zadzwoniłemrequestFocus
doLinearLayout
. Zapobiegało to pojawianiu się klawiatury podczas tworzenia fragmentu.Układ -
<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>
W
onCreate
-mTextSelectorContainer.requestFocus();
źródło
Jeśli ktoś nadal szuka najłatwiejszego rozwiązania, ustaw następujący atrybut na
true
w układzie nadrzędnymandroid:focusableInTouchMode="true"
Przykład:
<android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:focusableInTouchMode="true"> ....... ...... </android.support.constraint.ConstraintLayout>
źródło
Użyj tego, aby włączyć i wyłączyć 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; }
źródło
Wypróbuj tę odpowiedź,
editText.setRawInputType(InputType.TYPE_CLASS_TEXT); editText.setTextIsSelectable(true);
Uwaga: tylko dla API 11+
źródło
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; }
źródło
dla dowolnego widoku tekstu w Twojej działalności (lub utwórz fałszywy pusty widok tekstu za pomocą android: layout_width = "0dp" android: layout_height = "0dp") i dodaj do tego widoku tekstowego next: android: textIsSelectable = "true"
źródło
Proste, po prostu usuń tag „” z pliku xml
źródło
Wystarczy dodać właściwość,
android:focusable="false"
w szczególnościEditText
w formacie XML układu. Następnie możesz napisać lister kliknięćEditText
bez wyskakującego okienka klawiatury.źródło
Problem można posortować za pomocą, Nie ma potrzeby ustawiania editText inputType na żadne wartości, wystarczy dodać poniższą linię, editText.setTextIsSelectable (true);
źródło
inputType
byłby skutek pominięcia tego . Ale wygląda na to, że dobrze byłoby wiedzieć, gdybym poszedł z inną odpowiedzią, więc nawet jeśli nalegasz, aby zachować to jako własną odpowiedź, i tak rozważ pozostawienie tam komentarza.