EditText内に画像ボタンを配置したいのですが、アイデアがありません。図に示すように、その方法を教えてください。ありがとう
12 に答える
その画像をクリックしたくない場合はdrawableRight
、EditText のプロパティを使用できます。
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>
そのようなレイアウトとクリック可能な画像が必要な場合は、次のようなことができます
<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>
出力:
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>
結果:
以下のコードを使用できます:
android:drawableRight="@android:drawable/ic_menu_search"
このように 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>
また、この方法でボタンの可視性 (GONE / VISIBLE) をコードで処理できます。
それが役に立てば幸い。
これは私が感じる非常に単純です。親レイアウトとして相対レイアウトを使用します。次のいずれかを使用して、editText を左に、ImageButton を右に配置します。
- ImageButton の alignRight プロパティ
- 各フィールドのレイアウトの重みを指定することによって
クリック可能な複合ドローアブルを使用したソリューションがあります。非常にうまく機能しています - 私はそれをテストしました
EditText を線形レイアウト (水平) 内に配置し、その横にイメージ ボタンを追加します (パディング 0)。EditText と ImageButton の背景色を設定すると、ブレンドされます。
受け入れられた回答では、波及効果は機能せず、背面のボタンの後ろにとどまります。
この例では、テキスト ボックスに 2 つのボタンがあります。親レイアウトが持っているため、波及効果が機能します
android:background="@android:color/transparent"
波紋が機能し、背面にとどまらないようにするには、イメージボタンの親背景を透明に設定します。
<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>
達成するために配置したい理由がわかりません。これは、次ImageButton
の単純なプロパティで実行できますEditText
android:drawableRight="あなたのドローアブル"
それはあなたのために働くことはできませんか?
EditText で android:drawableLeft プロパティを使用します。
<EditText
...
android:drawableLeft="@drawable/my_icon" />