Как добавить значок в представление EditText в Android?

141

Я хочу добавить значок "поиск", чтобы он отображался внутри EditTextслева? например, окно поиска в приложении Facebook для Android?

Адхам
источник

Ответы:

444

Используйте android:drawableLeftсвойство EditText.

<EditText
    ...     
    android:drawableLeft="@drawable/my_icon" />
Marcosbeirigo
источник
3
извините за неясный вопрос, я хочу добавить кнопку, поэтому, когда я нажимаю на нее, она выполняет какое-то действие
Adham
20
Это было именно то решение, которое я ожидал, учитывая заголовок поиска.
Thomas Ahle
34
Кроме того, отрегулируйте отступ с помощью drawablePaddingсвойства.
Ryan R
Итак, каков должен быть размер этого значка для рисования и в какую папку я должен его поместить?
Kalpesh Lakhani
2
@KalpeshLakhani: Обычно edittext и drawables должны быть 32dp в соответствии с руководящими принципами разработки
Lee Yi Hong
30

Вы можете установить drawableLeft в XML, как предлагает marcos , но вы также можете установить его программно - например, в ответ на событие. Для этого используйте метод setCompoundDrawablesWithIntrincisBounds (int, int, int, int) :

EditText editText = findViewById(R.id.myEditText);

// Set drawables for left, top, right, and bottom - send 0 for nothing
editTxt.setCompoundDrawablesWithIntrinsicBounds(R.drawable.myDrawable, 0, 0, 0);
Питер Айтай
источник
Это устанавливает фон для EditText, а не для значка / изображения на «левом краю», который явно упоминается в вопросе.
Пареш Майани
@Paresh - поэтому и удалил ответ. Теперь я отредактировал, чтобы включить программное решение в дополнение к исходному XML-решению.
Peter Ajtai
1
как программно скрыть иконку? при нажатии на поле редактирования?
Hunt
1
@Hunt - просто установите coumound, который можно рисовать nullпри щелчке по виду.
Питер Айтай
28

Если вы хотите использовать Android по умолчанию для рисования, вы можете использовать @android:drawable/ic_menu_searchэто так:

<EditText android:id="@+id/inputSearch"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:drawableLeft="@android:drawable/ic_menu_search"
    android:hint="Search product.."
    android:inputType="textVisiblePassword"/>
Джонатан
источник
3

Использование:

<EditText
    ..     
    android:drawableStart="@drawable/icon" />
Махер Абутраа
источник
0

Используйте относительную компоновку и установите кнопку так, чтобы она была выровнена по левому краю окна редактирования текста, и установите левое заполнение вашего текстового представления на размер вашей кнопки. Я не могу придумать хороший способ сделать это без жесткого кодирования заполнения: /

Вы также можете использовать инструмент apk, чтобы разархивировать apk facebook и посмотреть его файлы макета.

Натан Шверманн
источник
1
Я хотел бы упомянуть, что декомпиляция является нарушением закона во многих странах, например, во всем Европейском союзе, поэтому будьте осторожны :)
Павел Бышевский