Как удалить фокус из одного editText

В моем приложении у меня есть один EditText вместе с некоторыми TextViews, кнопка и спиннер. Я считаю, что мой EditText получает фокус, поскольку это единственный фокусируемый вид в этом упражнении. Мой EditText отображается с оранжевой рамкой и курсором на поле.

Теперь я хотел бы убрать фокус из этого поля (я не хочу, чтобы курсор и граница отображались). Есть ли способ сделать это?

Я смог сосредоточиться на кнопке, выполнив button.seFocusableInTouchMode() и button.requestFocus(). Но это выдвигает на первый план кнопку и, очевидно, не то, что я хочу.

Ответ 2

Вы пытались использовать старый добрый View.clearFocus()

Ответ 3

плохо знаком с андроидом.. попробовал

getWindow().getDecorView().clearFocus();

это работает для меня..

просто добавить.. ваш макет должен иметь:

 android:focusable="true"
 android:focusableInTouchMode="true"

Ответ 4

Я попытаюсь объяснить, как удалить фокус (мигающий курсор) из режима EditText с некоторыми подробностями и пониманием. Обычно эта строка кода должна работать

editText.clearFocus()

но это может быть ситуация, когда у editText все еще есть фокус, и это происходит потому, что метод clearFocus() пытается вернуть фокус в первый фокусный вид в макете действий/фрагментов,

Итак, если у вас есть только один вид в активности, который является настраиваемым, и обычно это будет ваше представление EditText, то clearFocus() снова установит фокус для этого вида, и для вас будет выглядеть, что clearFocus() не работает. Помните, что представления EditText являются настраиваемыми (true) по умолчанию, поэтому, если у вас есть только один вид EditText внутри вашего макета, он всегда будет фокусироваться на экране. В этом случае ваше решение будет состоять в том, чтобы найти родительский вид (некоторый макет, ex LinearLayout, Framelayout) внутри вашего файла макета и установить ему этот xml-код

android:focusable="true"
android:focusableInTouchMode="true"

После этого, когда вы выполните editText.clearFocus(), родительский вид внутри вашего макета примет фокус, и ваш editText будет очищен от фокуса.

Надеюсь, это поможет кому-то понять, как работает clearFocus().

Ответ 5

Я знаю, что слишком поздно, но для кого-то есть такая же потребность editText.setFocusable(false) si, что вы ищете.

Ответ 6

Используйте прилагаемый код, чтобы придать фокусу "кому-то еще", это нормально, если у вас есть представление, в котором вы просто хотите убрать клавиатуру и освободить фокус, вам все равно, кто ее получит.

Используйте следующее: FocusHelper.releaseFocus(viewToReleaseFocusFrom)

public class FocusHelper {
    public static void releaseFocus(View view) {
        ViewParent parent = view.getParent();
        ViewGroup group = null;
        View child = null;
        while (parent != null) {
            if (parent instanceof ViewGroup) {
                group = (ViewGroup) parent;
                for (int i = 0; i < group.getChildCount(); i++) {
                    child = group.getChildAt(i);
                    if(child != view && child.isFocusable())
                        child.requestFocus();
                }
            }
            parent = parent.getParent();
        }
    }
}

Doc: Метод перемещается из дочернего представления и вверх по дереву представления и ищет первого ребенка, на который нужно сосредоточиться.

Изменить: Вы также можете использовать API для этого:

View focusableView = v.focusSearch(View.FOCUS_DOWN);
if(focusableView != null) focusableView.requestFocus();

Ответ 7

У меня была аналогичная проблема с editText, которая сфокусировалась с момента запуска этой операции. эту проблему я легко фиксировал следующим образом:

вы добавляете этот фрагмент кода в макет, содержащий editText в xml:

    android:id="@+id/linearlayout" 
    android:focusableInTouchMode="true"

Не забывайте android:id, без него у меня есть ошибка.

Другая проблема, с которой я столкнулся с editText, заключается в том, что, когда он получает первый фокус, фокус никогда не исчезает. это часть моего кода в java, у него есть editText и кнопка, которая захватывает текст в editText:

    editText=(EditText) findViewById(R.id.et1);
    tvhome= (TextView)findViewById(R.id.tv_home);
    etBtn= (Button) findViewById(R.id.btn_homeadd);
    etBtn.setOnClickListener(new View.OnClickListener() 
    {   
        @Override
        public void onClick(View v)
        {
            tvhome.setText( editText.getText().toString() );

            //** this code is for hiding the keyboard after pressing the button
            View view = Settings.this.getCurrentFocus();
            if (view != null) 
            {  
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
            //**

            editText.getText().clear();//clears the text
            editText.setFocusable(false);//disables the focus of the editText 
            Log.i("onCreate().Button.onClickListener()", "et.isfocused= "+editText.isFocused());
        }
    });
    editText.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            if(v.getId() == R.id.et1)
            {
                v.setFocusableInTouchMode(true);// when the editText is clicked it will gain focus again

                //** this code is for enabling the keyboard at the first click on the editText
                if(v.isFocused())//the code is optional, because at the second click the keyboard shows by itself
                {
                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
                }
                //**

                Log.i("onCreate().EditText.onClickListener()", "et.isfocused= "+v.isFocused());
            }
            else
                Log.i("onCreate().EditText.onClickListener()", "the listener did'nt consume the event");
        }
    });

надеюсь, что это поможет некоторым из вас!

Ответ 8

Просто найдите другое представление и сосредоточьте его внимание.

var refresher = FindViewById<MvxSwipeRefreshLayout>(Resource.Id.refresher);

refresher.RequestFocus();

Ответ 9

если родительский макет Edittext является Linear то добавьте

 android:focusable="true" 
 android:focusableInTouchMode="true"

как ниже

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:focusable="true"
            android:focusableInTouchMode="true">

           <EditText/>
          ............

когда родительский макет Edittext является относительным, то

  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true"

лайк

  <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="beforeDescendants"
            android:focusableInTouchMode="true">

           <EditText/>
          ............

Ответ 10

Я очень старался очистить фокус от текста редактирования. clearfocus() и фокусируемая, и другие вещи никогда не работали для меня. Таким образом, я придумал идею о том, чтобы дать фокусному фокусу фокуса:

<LinearLayout
    ...
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        ...
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <!--here comes your stuff-->

    </LinearLayout>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fake"
        android:textSize="1sp"/>

</LinearLayout>

то в вашем java-коде:

View view = Activity.this.getCurrentFocus();
                    if (view != null) {
                        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                        fake.requestFocus();
                    }

он скроет клавиатуру и удалит фокус любого edittext, который имеет его. а также, поскольку вы видите, что фальшивый edittext вышел из экрана и не может быть замечен

Ответ 11

Просто включите эту строку

android:selectAllOnFocus="false"

в сегменте XML, соответствующем макету EditText.

Ответ 12

Если я правильно понимаю ваш вопрос, это должно помочь вам:

TextView tv1 = (TextView) findViewById(R.id.tv1);
tv1 .setFocusable(false);

Ответ 13

Вам просто нужно очистить фокус от представления в виде

EditText.clearFocus()

Ответ 14

Поскольку я был в виджетах, а не в активности, которую я сделал:

`getRootView() clearFocus();.

Ответ 15

<EditText android:layout_height="wrap_content" android:background="@android:color/transparent" android:layout_width="match_parent" 
    android:clickable="false"
     android:focusable="false"
     android:textSize="40dp"
     android:textAlignment="center" 
    android:textStyle="bold"  
    android:textAppearance="@style/Base.Theme.AppCompat.Light.DarkActionBar" 
   android:text="AVIATORS"/>

Ответ 16

Вам нужно только установить ViewGroup с атрибутом:

android:focusableInTouchMode="true"

ViewGroup - это макет, включающий все дочерние представления.