2015-06-09 3 views
8

Я пытаюсь использовать последнюю функцию android.support.design.widget.TextInputLayout, чтобы получить floating labels в Android.«Элемент EditText не разрешен здесь» внутри TextInputLayout

Глядя на documentation, кажется, что вы должны положить ваши EditText с android:hint="myFloatingLabel" внутри android.support.design.widget.TextInputLayout элемента извлечь из этого пользу.

Функционально это работает, когда я проверить это, но в Android Studio я получаю предупреждение о EditText: «Элемент EditText не допускается здесь» Последствия (кроме того, что у меня есть раздражающие предупреждения) является то, что она нарушает все завершение кода (для строковых ресурсов, для ресурсов id и т. д.).

Это ошибка Android Studio, или я что-то пропустил?

Мой пример кода для информации:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <android.support.design.widget.TextInputLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/email" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:ems="10" 
      android:hint="@string/email" 
      android:inputType="textEmailAddress" /> 
    </android.support.design.widget.TextInputLayout> 

</LinearLayout> 
+0

Это действительный XML и аналогичный «работает» отлично для меня, в том числе. autocompletion –

+1

У меня была такая же проблема пару дней назад. Я не помню точной процедуры ее решения. Я обновил студию Android и использовал последнюю версию 'buildToolsVersion'. В конце я аннулировал кэширование Android Studio – GVillani82

+0

@ Joseph82 Я уже обновил Android Studio, использовал последние версии Build Tools (я даже тестировал с 23.0.0 rc2), и попытался отключить/перезапустить Android Studio, но проблема не устранена :( – jdebon

ответ

4

Попробуйте изменить эти версии. Это сработало для меня.

compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

и

targetSdkVersion 22 
+0

Я думаю когда SDK 22 вышел, я снова попытался, и это не сработало. Однако я просто попробовал снова прямо сейчас (с SDK 23), и все работает отлично. – jdebon

8

Попробуйте использовать android.support.v7.widget.AppCompatEditText вместо EditText:

<android.support.design.widget.TextInputLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.AppCompatEditText 
     android:id="@+id/email" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:ems="10" 
     android:hint="@string/email" 
     android:inputType="textEmailAddress" /> 
</android.support.design.widget.TextInputLayout> 

Я была такая же проблема, и это сделало работу для меня.

+0

Спасибо. Однако официальная документация на Android, что элемент 'android.support.design.widget.TextInputLayout' должен обернуть' android.widget.EditText'. Таким образом, ваше решение более обходное. – jdebon

+1

@jdebon это неверно. в документе roid указано, что TextInputLayout обертывает EditText OR потомком. –

+0

Это помогает мне сделать то же самое для 'AutoCompleteTextView' – CrandellWS

1

добавьте следующую строку в файл build.gradle:

compile 'com.android.support:design:25.3.1' 

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

+0

Кажется, что эта библиотека сообщает Android Studio понять, где можно использовать EditText? Но EditText довольно стандартный, поэтому вопрос: зачем это работает? +1 – Mzn

0

У меня была эта проблема не только на EditText, но и на CheckBox и Button. Наконец, исправлено это, запустив Invalidate Caches/Restart ... Возможно, некоторые из предыдущих решений также работали, потому что они приводили к очистке кэшей.

+0

Это Intellij специфический, вы должны упомянуть об этом :) – jdebon

0

Прошел через этот старый вопрос, пытаясь выяснить, как получить TextInputEditText внутри TextInputLayout, который разрешен и показан в предварительном просмотре макета Android Studio.

Ошибка «Не разрешено здесь» исчез после того, как «работает Invalidate кэширует/Restart ...» как упомянуто Фрэнки D

Однако, предварительный просмотр еще не появлялся, пока я не изменил вид правильно связать с поддержкой Lib дизайна как:

<android.support.design.widget.TextInputEditText 
... /> 

новый TextInputEditText имеет несколько исправлений и интересные функции, как описано на https://www.journaldev.com/14748/android-textinputlayout-example

Смежные вопросы