Bir EditText
görünümdeki yanıp sönen imleci nasıl devre dışı bırakacağınızı bilen var mı ?
Bir EditText
görünümdeki yanıp sönen imleci nasıl devre dışı bırakacağınızı bilen var mı ?
Yanıtlar:
Xml özniteliğini android:cursorVisible="false"
veya java işlevini kullanabilirsiniz setCursorVisible(false)
.
Hedefe ilerleyen mükemmel çözüm
Hedef: EditText
Odaklanmadığında yanıp sönen imleci devre dışı bırakın ve odaktayken yanıp sönen imleci etkinleştirin EditText
. Aşağıda ayrıca EditText
tıklandığında klavyeyi açar ve klavyede bitirdiğinizde gizler.
1) xml'nizi şunun altında ayarlayın EditText
:
android:cursorVisible="false"
2) ClickListener'ı ayarlayın:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) Daha sonra onCreate
kullanarak basıldığında bitti, olay yakalama OnEditorActionListener
adresinden Müşteri EditText
sonra ve setCursorVisible(false)
.
//onCreate...
iEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
iEditText.setCursorVisible(false);
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
Düzenleme metin imlecini program aracılığıyla etkinleştirmek ve devre dışı bırakmak için aşağıdaki kodu kullanabilirsiniz.
İmleci etkinleştirmek için
editText.requestFocus();
editText.setCursorVisible(true);
İmleci devre dışı bırakmak için
editText.setCursorVisible(false);
XML enable devre dışı bırakma imlecini kullanma
android:cursorVisible="false/true"
android:focusable="false/true"
Edit_text'i Seçilebilir yapmak için (kopyala / kes / yapıştır / seç / tümünü seç)
editText.setTextIsSelectable(true);
Dokunmatik moda odaklanmak için XML'de aşağıdaki satırları yazın
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
programlı
editText.requestFocusFromTouch();
Dokunmatik moda odaklanmayı temizlemek için
editText.clearFocus()
İmlecin görünürlüğünü true ve false olarak ayarlama sorunu bir sorun olabilir çünkü imleci tekrar ayarlayana kadar kaldırır ve aynı zamanda alan düzenlenebilir, bu da iyi bir kullanıcı deneyimi değildir.
yani kullanmak yerine
setCursorVisible(false)
sadece böyle yap
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
Yukarıdaki kod imleci kaldıran odağı kaldırır. Ve tekrar etkinleştirir, böylece ona tekrar dokunabilir ve düzenleyebilirsiniz. Tıpkı normal kullanıcı deneyimi gibi.
Benim durumumda, düzenleme odaklandığında imleci etkinleştirmek / devre dışı bırakmak istedim.
Faaliyetinizde:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
EditText edit = ((EditText) v);
Rect outR = new Rect();
edit.getGlobalVisibleRect(outR);
Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY());
System.out.print("Is Keyboard? " + isKeyboardOpen);
if (isKeyboardOpen) {
System.out.print("Entro al IF");
edit.clearFocus();
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}
edit.setCursorVisible(!isKeyboardOpen);
}
}
return super.dispatchTouchEvent(ev);
}
edit.setCursorVisible(!isKeyboardOpen);
olmasını istediğinizden emin olabilirsiniz edit.setCursorVisible(isKeyboardOpen);
.
basitçe bu satırı ana düzeninize ekleyin
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText
android:inputType="text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Eğer Edittext
faaliyetin başlangıcından itibaren göz ardı etmek istiyorsanız android:focusable
ve android:focusableInTouchMode
size inşallah yardımcı olacaktır.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout7" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true">
Bu
LinearLayout
seninleEdittext
.
Kullanarak odağı başka bir görünüme değiştirin (ör: XML'de herhangi bir metin görünümü veya Doğrusal görünüm)
android:focusableInTouchMode="true"
android:focusable="true"
addTextChangedListener öğesini Etkinlik'teki metni düzenlemeye ayarlayın.
ve sonra Edittext put değiştirildikten sonra edittext.clearFocus()
;
Bu, klavye açıkken imleci etkinleştirir ve klavye kapatıldığında devre dışı bırakılır.
Kotlin'de your_edittext.isCursorVisible = false
. RootLayout.findFocus () clearFocus ();