Остановите EditText от получения фокуса при запуске Activity

2423

У меня есть Activity в Android, с двумя элементами:

  1. EditText
  2. ListView

Когда начинается моя Activity, EditText сразу же имеет фокус ввода (мигающий курсор). Я не хочу, чтобы какой-либо элемент управления имел фокус ввода при запуске. Я старался:

EditText.setSelected(false);

Неудачно. Как я могу убедить EditText не выбирать себя, когда Activity начинается?

  • 112
    Прежде чем использовать какой-либо из приведенных ниже хаков, проверьте, нет ли в вашем макете XML строки <requestFocus /> (подробнее см. В ответе @ floydaddict ). WYSIWYG редактор Eclipse добавляет его автоматически. После удаления этой строки проблема исчезла для меня.
  • 0
    удаление только <requestFocus /> не работает на Asus Nexus 7 с KitKat 4.4.4, но ответ @ Joe работает
Показать ещё 6 комментариев
Теги:
android-edittext
listview
android-listview

49 ответов

2101
Лучший ответ

Отличные ответы от Люка и Марка, однако хороший пример кода отсутствует. Добавление тега android:focusableInTouchMode="true" в <LinearLayout> как <LinearLayout> в следующем примере, решит проблему.

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext" 
    android:nextFocusLeft="@id/autotext"/>
  • 649
    Как насчет установки родительского макета на android:focusableInTouchMode="true" !
  • 2
    @ Мухаммед Бабар: я использовал для установки foucusable = "true" и android: focusableInTouchMode = "true" родительского макета.
Показать ещё 16 комментариев
1601

Является ли фактическая проблема, что вы просто не хотите, чтобы она была сосредоточена? Или вы не хотите, чтобы он отображал виртуальную клавиатуру в результате фокусировки EditText? Я действительно не вижу проблемы с тем, что EditText фокусируется на запуске, но определенно проблема заключается в том, что окно softInput открывается, когда пользователь явно не запрашивает фокусировку на EditText (и откройте клавиатуру как результат).

Если это проблема виртуальной клавиатуры, см. AndroidManifest.xml <activity> элемент.

android:windowSoftInputMode="stateHidden" - всегда скрывать его при вводе активности.

или android:windowSoftInputMode="stateUnchanged" - не меняйте его (например, не показывайте его, если он еще не показан, но если он был открыт при вводе активности, оставьте его открытым).

  • 22
    Тем не менее, курсор находится в первом EditText в макете - даже если клавиатура не отображается
  • 36
    @ Андерсон: Ничто в ответе не подразумевает, что это помешает EditText получить фокус. На самом деле ясно сказано, что именно так вы предотвращаете автоматическое открытие IME программной клавиатуры в фокусе; потому что более вероятно, что большее беспокойство вызывает неожиданно всплывающая программная клавиатура, а не сам фокус. Если ваша проблема EditText с тем, что EditText вообще имеет фокус, используйте ответ другого человека.
Показать ещё 6 комментариев
999

Существует более простое решение. Установите эти атрибуты в родительском макете:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true" >

И теперь, когда действие начнется, этот основной макет по умолчанию получит фокус.

Кроме того, мы можем удалить фокус из дочерних представлений во время выполнения (например, после завершения редактирования дочерних элементов), снова нажав на основной макет, например:

findViewById(R.id.mainLayout).requestFocus();

Хороший комментарий из Guillaume Perrot:

android:descendantFocusability="beforeDescendants" представляется default (целочисленное значение равно 0). Он работает только путем добавления android:focusableInTouchMode="true".

Действительно, мы видим, что beforeDescendants установлен по умолчанию в методе ViewGroup.initViewGroup() (Android 2.2.2). Но не равен 0. ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

Спасибо Гийому.

  • 1
    Важно установить эти атрибуты в качестве прямого родителя представления, которое фокусируется на создании действий, иначе это не будет работать.
  • 29
    Обратите внимание, что это не работает, если родитель ScrollView
Показать ещё 4 комментария
380

Единственное решение, которое я нашел, это:

  • Создайте LinearLayout (я не знаю, будут ли работать другие типы макетов)
  • Задайте атрибуты android:focusable="true" и android:focusableInTouchMode="true"

И EditText не будет получать фокус после начала действия

  • 0
    Просто!! Сначала я добавил эти свойства в родительское представление, которое не удалось, затем я установил их в другой макет и работал нормально. Спасибо!!
  • 1
    Он также работает с RelativeLayout.
72

Проблема возникает из свойства, которое я могу видеть только в XML form макета.

Обязательно удалите эту строку в конце объявления в тегах EditText XML:

<requestFocus />

Это должно дать что-то вроде этого:

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //<requestFocus /> /* <-- without this line */
</EditText>
65

Следующее остановит редактирование edittext при создании, но захватите его, когда вы касаетесь их.

<EditText
    android:id="@+id/et_bonus_custom"
    android:focusable="false" />

Итак, вы устанавливаете focusable в false в xml, но ключ находится в java, в который вы добавляете следующий прослушиватель:

etBonus.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        return false;
    }
});

Поскольку вы возвращаете false, то есть не потребляете событие, поведение фокусировки будет продолжаться как обычно.

  • 5
    Но это никогда не получит фокус в будущем, как просто остановить фокус только для начальной (начало деятельности) ??
  • 1
    OnTouchListener вызывается перед другими действиями касания. Таким образом, при включении фокусировки при прикосновении стандартная фокусировка происходит при первом касании. Клавиатура подойдет и все.
Показать ещё 3 комментария
64

используя информацию, предоставленную другими плакатами, я использовал следующее решение:

в макете XML

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

в onCreate()

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

и, наконец, in onResume()

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}
63

Попробуйте clearFocus() вместо setSelected(false). Каждое представление в Android имеет как фокусируемость, так и возможность выбора, и я думаю, что вы хотите просто очистить фокус.

  • 0
    Это звучит многообещающе, но в какой момент в жизненном цикле деятельности его следует назвать? Если я вызываю его в onCreate (), EditText по-прежнему имеет фокус. Должен ли он вызываться в onResume () или в другом месте? Спасибо!
  • 8
    Я совместил принятый ответ с этим ответом. Я вызвал myEditText.clearFocus(); myDummyLinearLayout.requestFocus(); в onResume деятельности. Это гарантировало, что EditText не удерживал фокус при повороте телефона.
51

Я попробовал несколько ответов по отдельности, но фокус все еще на EditText. Мне удалось решить это, используя два из нижеприведенного решения вместе.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mainLayout"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true" >

(Ссылка от Silver https://stackoverflow.com/questions/1555109/stop-edittext-from-gaining-focus-at-activity-startup)

и удалить

 <requestFocus />

на EditText

(Ссылка от floydaddict https://stackoverflow.com/questions/1555109/stop-edittext-from-gaining-focus-at-activity-startup)

  • 1
    Я должен был добавить edittext.clearFocus () в дополнение к вышеупомянутому, чтобы заставить его работать :)
40

Ни один из этих решений не работал у меня. То, как я исправляю автофокусировку, было:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>
  • 2
    android: windowSoftInputMode = "AdjustPan" для любого действия в манифесте Android
36

Простое решение: В теге AndroidManifest в теге Activity используйте

android:windowSoftInputMode="stateAlwaysHidden"
  • 6
    Строго говоря, это не решает проблему. ОП сказал: «Я не хочу, чтобы какой-либо элемент управления имел фокус ввода при запуске». Ваше решение скрывает только клавиатуру, в этом есть небольшая разница.
  • 0
    @katzenhut Да, это моя проблема с этим ответом точно. Сосредоточение внимания на моем тексте редактирования открывает действие PlaceAutoComplete, поэтому этот ответ неполон
Показать ещё 1 комментарий
31

Вы можете просто установить "фокусируемое" и "фокусируемое в касании" значение true в первом TextView layout. Таким образом, при запуске активности TextView будет сфокусирован, но по своей природе вы не увидите ничего сосредоточенного на экране и, конечно же, будет отображаться клавиатура no...

  • 0
    Не работает вообще!
  • 0
    работает идеально для меня, только я устанавливаю значение на внешний макет в моей деятельности, а не для первого просмотра текста
30

Следующее работало для меня в Manifest. Напишите,

<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>
  • 1
    Это не расфокусирует текстовое поле: оно просто скрывает клавиатуру. Вы по-прежнему будете получать подсказки, которые выталкиваются из поля, и любые селекторы состояния цвета будут отображать состояние «focus = true».
27

Самый простой ответ, просто добавьте это в родительский макет XML.

android:focusable="true" 
android:focusableInTouchMode="true"
  • 0
    работал отлично для меня. еще одна вещь, на которую следует обратить внимание, не добавляйте эти строки в представление прокрутки. Это не будет работать в режиме прокрутки. Но отлично работал с линейной версткой.
27

Мне нужно было очистить фокус от всех полей программно. Я просто добавил следующие два утверждения в мое основное определение макета.

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

Что это. Исправлена ​​ошибка. Спасибо, Серебро, за то, что указал мне в правильном направлении.

23

Добавьте android:windowSoftInputMode="stateAlwaysHidden" в тег активности файла Manifest.xml.

Источник

  • 1
    Это не расфокусирует текстовое поле: оно просто скрывает клавиатуру. Вы по-прежнему будете получать подсказки, которые выталкиваются из поля, и любые селекторы состояния цвета будут отображать состояние «focus = true».
19

Если у вас есть другой вид активности, например ListView, вы также можете:

ListView.requestFocus(); 

в onResume(), чтобы захватить фокус с editText.

Я знаю, что на этот вопрос был дан ответ, но просто предоставил альтернативное решение, которое сработало для меня:)

18

Добавьте следующий метод onCreate:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
  • 1
    Это не расфокусирует текстовое поле: оно просто скрывает клавиатуру. Вы по-прежнему будете получать подсказки, которые выталкиваются из поля, и любые селекторы состояния цвета будут отображать состояние «focus = true».
18

Попробуйте это перед первым редактируемым полем:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();
14

Будучи тем, что я не люблю загрязнять XML чем-то, что связано с функциональностью, я создал этот метод, который "прозрачно" перехватывает фокус с первого настраиваемого вида и затем обязательно удаляет себя, когда это необходимо!

public static View preventInitialFocus(final Activity activity)
{
    final ViewGroup content = (ViewGroup)activity.findViewById(android.R.id.content);
    final View root = content.getChildAt(0);
    if (root == null) return null;
    final View focusDummy = new View(activity);
    final View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            view.setOnFocusChangeListener(null);
            content.removeView(focusDummy);
        }
    };
    focusDummy.setFocusable(true);
    focusDummy.setFocusableInTouchMode(true);
    content.addView(focusDummy, 0, new LinearLayout.LayoutParams(0, 0));
    if (root instanceof ViewGroup)
    {
        final ViewGroup _root = (ViewGroup)root;
        for (int i = 1, children = _root.getChildCount(); i < children; i++)
        {
            final View child = _root.getChildAt(i);
            if (child.isFocusable() || child.isFocusableInTouchMode())
            {
                child.setOnFocusChangeListener(onFocusChangeListener);
                break;
            }
        }
    }
    else if (root.isFocusable() || root.isFocusableInTouchMode())
        root.setOnFocusChangeListener(onFocusChangeListener);

    return focusDummy;
}
13

Поздно, но, возможно, полезно. Создайте фиктивный EditText в верхней части макета, затем вызовите myDummyEditText.requestFocus() в onCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

Это похоже на то, что я ожидаю. Не нужно обрабатывать изменения конфигурации и т.д. Мне это нужно для Activity с длинным TextView (инструкциями).

  • 0
    Почему бы просто не сделать это с самим корневым представлением?
12

Запишите эту строку в родительском макете...

 android:focusableInTouchMode="true"
12

Да, я сделал то же самое - создаю линейный макет 'dummy', который получает первоначальный фокус. Кроме того, я установил "следующие" идентификаторы фокуса, чтобы пользователь не мог больше сконфигурировать его после прокрутки:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

много работы, чтобы избавиться от фокуса на вид.

Спасибо

10

Для меня все, что работает на всех устройствах:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

Просто поставьте это как представление перед проблематичным сфокусированным видом и тем, что оно.

9

Это идеальное и самое простое решение. Я всегда использую это в своем приложении.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
  • 0
    Это не расфокусирует текстовое поле: оно просто скрывает клавиатуру. Вы по-прежнему будете получать подсказки, которые выталкиваются из поля, и любые селекторы состояния цвета будут отображать состояние «focus = true».
8

Самое простое, что я сделал, это сосредоточиться на другом представлении в onCreate:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

Это остановило мягкую клавиатуру, и в EditText не было курсора.

7

Запишите этот код внутри Manifest файла в Activity, где вы не хотите открывать клавиатуру.

android:windowSoftInputMode="stateHidden"

Файл манифеста:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.projectt"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="24" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
         <activity
            android:name=".Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Login"
            **android:windowSoftInputMode="stateHidden"**
            android:label="@string/app_name" >
        </activity>

    </application>

</manifest>
  • 2
    Это не расфокусирует текстовое поле: оно просто скрывает клавиатуру. Вы по-прежнему будете получать подсказки, которые выталкиваются из поля, и любые селекторы состояния цвета будут отображать состояние «focus = true».
7
<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>
6

Самый простой способ скрыть клавиатуру - использовать setSoftInputMode

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

или вы можете использовать InputMethodManager и скрыть клавиатуру следующим образом.

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
6

Когда ваша активность открывается, клавиатура становится видимой автоматически, что вызывает фокусировку EditText. Вы можете отключить клавиатуру, написав следующую строку в своем теге активности в файле manifest.xml.

 android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
6

Это можно сделать, создав манекен EditText с шириной и высотой макета, установленными на 0dp, и запросите фокус на этом представлении. Добавьте следующий фрагмент кода в свой XML-макет:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>
6

Обязательно удалите строку "<requestFocus />" из тега EditText в xml.

<EditText
   android:id="@+id/input"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content">

   <requestFocus /> <!-- remove this line --> 
</EditText>
6

В onCreate вашей деятельности просто добавьте clearFocus() в свой элемент EditText. Например,

edittext = (EditText) findViewById(R.id.edittext);
edittext.clearFocus();

И если вы хотите перенаправить фокус на другой элемент, используйте requestFocus(). Например,

button = (Button) findViewById(R.id.button);
button.requestFocus();
  • 0
    Я попробовал это в oncreate, не работает. API 26.
5

Я использую следующий код, чтобы остановить EditText от кражи фокуса при нажатии кнопки.

addButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        View focused = internalWrapper.getFocusedChild();
        focused.setVisibility(GONE);
        v.requestFocus();
        addPanel();
        focused.setVisibility(VISIBLE);
    }
});

В основном, скройте текст редактирования, а затем снова покажите его. Это работает для меня, поскольку EditText имеет не, поэтому не имеет значения, отображается ли оно.

Вы можете попытаться скрыть и показать его подряд, чтобы увидеть, помогает ли ему потерять фокус.

4
View current = getCurrentFocus();

if (current != null) 
    current.clearFocus();
4
/** 
 * set focus to top level window
 * disposes descendant focus 
 * disposes softInput 
 * */
public static void topLevelFocus(Context context){
    if(Activity.class.isAssignableFrom(context.getClass())){
        ViewGroup tlView = (ViewGroup) ((Activity) context).getWindow().getDecorView();
        if(tlView!=null){
            tlView.setFocusable(true);
            tlView.setFocusableInTouchMode(true);
            tlView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
        }
    }
}
3

Самый простой способ - добавить android:windowSoftInputMode="stateAlwaysHidden" в тег активности файла Manifest.xml

  • 0
    Это не расфокусирует текстовое поле: оно просто скрывает клавиатуру. Вы по-прежнему будете получать подсказки, которые выталкиваются из поля, и любые селекторы состояния цвета будут отображать состояние «focus = true».
3

EditText в пределах ListView работает неправильно. Лучше использовать TableLayout с автоматически сгенерированными строками, когда вы используете EditText.

3

попробовать

edit.setInputType(InputType.TYPE_NULL);

edit.setEnabled(false);
2

Сделайте это и выполните свою работу!

android:focusable="true"
android:focusableInTouchMode="true" 
2
<EditText
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:id="@+id/etComments"
    android:hint="Comments.."
    android:textSize="14dp"

    android:focusable="false"

    android:textStyle="italic"/>
2

удалите <requestFocus /> из вашего текста редактирования в XML файле

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //`<requestFocus />` /* <-- remove this tags */
</EditText>`
  • 0
    Я просто использую android: focusableInTouchMode = "true" на моем родительском макете и работает для меня.
2

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">


<item android:drawable="@drawable/text_field_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/text_field_focused" android:state_focused="true"/>
<item android:drawable="@drawable/text_field_normal"/>

2

Отключите его в onCreate()

final KeyListener edtTxtMessageKeyListener = edtTxtMessage.getKeyListener();
edtTxtMessage.setCursorVisible(false);
edtTxtMessage.setKeyListener(null);

И, наконец, включите его в onClick() EditText

edtTxtMessage.setCursorVisible(true);
edtTxtMessage.setKeyListener(edtTxtMessageKeyListener);

Но проблема в том, что мы должны щелкнуть twise, чтобы в первый раз включить OnScreenKeyboard.

@Workaround

InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

Попробуйте это также в onClick():)

2

Вы можете указать фокус на какой-либо другой виджет, используя фокус запроса и использовать также скрывающий код клавиатуры.

1

У вас есть редактировать текст и список. В OnStart/On Create вы должны установить фокус на представление списка: Listview.requestfocus()

  • 0
    Мне нравится этот, потому что это достаточно просто и чисто
0

Если вы хотите игнорировать Edittext с самого начала действия, вам помогут android:focusable и android:focusableInTouchMode focusableInTouchMode.

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

Это LinearLayout с вашим Edittext.

0

Это может быть достигнуто путем наследования EditText и переопределения onTouchEvent.

class NonFocusableEditText: EditText {

    constructor(context: Context): super(context)
    constructor(context: Context, attrs: AttributeSet?): super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int): super(context, attrs, defStyleAttr)

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        return if (isFocusable) super.onTouchEvent(event) else false
    }
}

Затем вы можете использовать его в макетах, как обычный EditText:

<com.yourpackage.NonFocusableEditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"    
        android:hint="@string/your_hint"
        android:imeOptions="actionDone"
        android:inputType="textNoSuggestions" />
-2

Вы можете использовать этот

<EditText 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00000000"
/>

Я получил это отсюда http://tips.androidhive.info/2013/10/android-remove-edittext-border-on-foucs/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню