51

我想在 EditText 中放置一个图像按钮,但我没有 Idea 请告诉我如何操作,如图所示。谢谢

在此处输入图像描述

4

12 回答 12

58

如果您不想单击该图像,则可以使用drawableRightEditText 的属性..

android:drawableRight="@drawable/icon"

如果你想点击然后使用下面的代码。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter search key" />

    <ImageButton
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:src="@drawable/search"
        android:layout_centerVertical="true"
        android:layout_margin="5dp"
        android:text="Button"/>

</RelativeLayout>
于 2012-10-31T04:43:25.237 回答
37

如果你想要这样的布局并且图像也是可点击的,那么你可以做这样的事情

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true" >

    </EditText>
     <ImageView
        android:id="@+id/imageView1"
        android:padding="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/editText1"
        android:layout_alignBottom="@+id/editText1"
        android:layout_alignRight="@+id/editText1"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

输出:

在此处输入图像描述

于 2012-10-31T04:49:19.873 回答
20

在 Material 中,EditText 下有下划线。在大多数应用程序中,图标出现该下划线内。

在此处输入图像描述

为此,只需使用填充

android:paddingEnd = "@dimen/my_button_size"

不要忘记子 4.2 版本的 paddingRight。

<RelativeLayout ....>
   ...
   <EditText
   ...
   android:id="@+id/my_text_edit"
   android:textAlignment = "viewStart"
   android:paddingEnd = "@dimen/my_button_size"
   android:paddingRight = "@dimen/my_button_size"
   .../>

   <ImageButton 
   ....
   android:layout_width="@dimen/my_button_size" 
   android:layout_height="@dimen/my_button_size"
   android:layout_alignEnd="@id/my_text_edit"
   android:layout_alignRight="@id/my_text_edit"/>
   ...
</RelativeLayout>

它将文本限制为图像,并且图像不会与文本重叠,无论文本有多长。

于 2016-06-02T12:12:33.933 回答
7

我的解决方案将适合所有屏幕尺寸,而不会editText“落后” imageButton. 这也使用了android资源,因此您不需要提供自己的图标或字符串资源。将此代码段复制并粘贴到您想要搜索栏的任何位置:

   <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal">
  
   <EditText
        android:layout_margin="8dp"
        android:id="@+id/etSearch"
        android:hint="@android:string/search_go"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"/>

    <ImageView
        android:id="@+id/ivSearch"
        android:background="@color/transparent_black"
        android:padding="2dp"
        android:layout_width="wrap_content"
        android:layout_margin="8dp"
        android:src="@android:drawable/ic_menu_search"
        android:layout_height="wrap_content"
        tools:ignore="contentDescription" />

</LinearLayout>

结果:

在此处输入图像描述

于 2015-01-01T21:04:28.290 回答
5

您可以使用以下代码:

android:drawableRight="@android:drawable/ic_menu_search"

于 2012-10-31T04:43:03.950 回答
4

将它放在这样的 RelativeLayout 中怎么样?:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <!-- EditText for Search -->
    <EditText android:id="@+id/inputSearch"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="Search whatever..."
            android:textSize="14dp"
            android:textStyle="italic"
            android:drawableLeft="@drawable/magnifyingglass"
            android:inputType="textVisiblePassword"
            android:theme="@style/EditTextColorCustom"/>

         <Button
            android:id="@+id/btn_clear"
            android:layout_width="14dp"
            android:layout_height="14dp"
            android:layout_marginTop="10dp"
            android:layout_alignRight="@+id/inputSearch"
            android:layout_marginRight="5dp"
            android:background="@drawable/xbutton"
            android:visibility="gone"/>
    </RelativeLayout>

同样通过这种方式,您将能够在代码中处理 Button (GONE / VISIBLE) 的可见性。

希望能帮助到你。

于 2016-08-31T15:56:55.410 回答
1

将您的 EditText 放置在线性布局(水平)内,并在其旁边添加一个图像按钮(0 填充)。设置 EditText 和 ImageButton 的背景颜色将融入其中。

于 2012-10-31T04:45:29.237 回答
1

有可点击复合可绘制的解决方案。它工作得很好 - 我已经测试过了

解决方案

于 2013-08-22T11:10:33.950 回答
1

我觉得这很简单。使用相对布局作为父布局。将editText放在左边,ImageButton放在右边,使用任一,

  • ImageButton 的 alignRight 属性
  • 通过指定每个字段的布局权重
于 2013-12-09T11:59:25.107 回答
0

在接受的答案中,涟漪效应不起作用,它停留在后面的按钮后面。

此示例在文本框中有 2 个按钮。涟漪效应有效,因为父布局有

   android:background="@android:color/transparent"

为确保波纹起作用并且不会留在背面,请将 imagebutton 的父背景设置为透明。

 <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:focusableInTouchMode="true"
            android:layout_margin="4dp">

            <EditText
                android:id="@+id/editText"
                style="@android:style/TextAppearance.Medium"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="2dp"
                android:layout_marginTop="2dp"
                android:layout_marginRight="2dp"
                android:background="@drawable/shape_textbox"
                android:hint="text"
                android:imeOptions="actionDone"
                android:importantForAutofill="no"
                android:inputType="text" />

            <ImageButton
                android:id="@+id/btn1"
                android:layout_width="44dp"
                android:layout_height="44dp"
                android:layout_centerVertical="true"
                android:layout_margin="5dp"
                android:layout_toStartOf="@+id/btn2"
                android:background="?android:selectableItemBackgroundBorderless"
                android:src="@drawable/ic_btn1" />

            <ImageButton
                android:id="@+id/btn2"
                android:layout_width="44dp"
                android:layout_height="44dp"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:layout_margin="5dp"
                android:background="?android:selectableItemBackgroundBorderless"
                android:contentDescription="@string/clear"
                android:src="@drawable/ic_btn2" />

        </RelativeLayout>

或者您也可以将按钮包装在框架布局中:

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:layout_alignParentEnd="true"
    android:layout_centerVertical="true"
    >
<ImageButton ... />
</FrameLayout>
于 2021-03-15T15:13:26.387 回答
-1

我不知道你为什么要放置ImageButton来实现,这可以通过简单的属性来完成EditText

android:drawableRight="你的drawable"

它不能为你工作吗?

于 2013-04-16T12:48:59.947 回答
-2

使用 EditText 上的 android:drawableLeft 属性。

<EditText
    ...     
    android:drawableLeft="@drawable/my_icon" />
于 2012-10-31T04:42:50.853 回答