1つのアプリケーションの開発中に、EditTextコンポーネントにクリアテキストボタンを追加したかったのです。 解決策は十分に迅速に見つかり、タッチの座標をキャッチすることにあり、右の背景画像(drawableRight)でタッチが発生した場合は、ボタンクリック(クリアテキスト)として処理します。それ以外の場合-このコンポーネントの標準的な方法です。
ソリューションは非常に簡潔で信頼性が高いことが判明しました。 しかし、私はさらに進んで2〜3個のボタンを作りたいと思っていました。たとえば、別のウィンドウで開くリストから選択するか、フィールドを偶発的な変更から保護するために編集モードをオン/オフするなど、ボタンにどのような機能をかけることができるかわかりません。
それでは、始めましょう:
1.空のアクティビティで新しいプロジェクトを作成します(Android Studio 1.5.1開発環境)。
2.新しいクラスを追加して、MyCustomEditTextという完全なリストを呼び出します。
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import android.widget.EditText; public class MyCustomEditText extends EditText { Bitmap drawableRight;
3.コンポーネントに必要なプロパティを持たせるには、次の内容でattrs.xmlを作成します。
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyCustomEditText"> <attr name="drawableRight2" format="reference"/> <attr name="drawableRight3" format="reference"/> </declare-styleable> </resources>
4.次に、マークアップファイルでこれらのプロパティの値を設定できます。
<ru.vlsoft.mycustomedittext.MyCustomEditText android:id="@+id/customEditText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:drawableEnd="@drawable/one" android:drawableRight="@drawable/one" android:textAppearance="?android:attr/textAppearanceLarge" app:drawableRight2="@drawable/two" android:singleLine="true" app:drawableRight3="@drawable/three" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" />
5.最後に、メインアクティビティにonTouchListenerイベントハンドラーを追加します。その完全なリストは以下のとおりです。
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.MotionEvent; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyCustomEditText customEditText = (MyCustomEditText) findViewById(R.id.customEditText); customEditText.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { MyCustomEditText editText = (MyCustomEditText) v;
プロジェクト全体は
こちらからダウンロードでき
ます 。 ご協力ありがとうございます。