gpt4 book ai didi

android - 如何处理 TextInputEditText 的复合绘图上的 onclick 事件?

转载 作者:行者123 更新时间:2023-11-29 18:33:55 25 4
gpt4 key购买 nike

如何检测 TextInputEditText 的复合绘图上的点击事件?

最佳答案

使用以下覆盖版本的 TextInputEditText,并调用 setOnDrawableClickedListener

如果将 drawable 设置在编辑文本的末尾而不是在开始处可能会更好,因为当前版本的 TextInputLayout 在 drawable 位于开头时会产生相当难看的结果。

示例布局在下方给出。 (特别注意 android:drawablePadding="10dp" 的使用)。

代码适用于 androidx,但您可以轻松地向后移植到 AppCompat。

package com.twoplay.netplayer.controls;

import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import com.google.android.material.textfield.TextInputEditText;

public class TextInputEditTextEx extends TextInputEditText {
private OnDrawableClickedListener onDrawableClickedListener;

public TextInputEditTextEx(Context context) {
super(context);
init();
}


public TextInputEditTextEx(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public TextInputEditTextEx(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

private void init() {
setOnTouchListener(new OnTouchListener() {
private Rect hitBounds = new Rect();
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();

int hitDrawable = -1;

if (x < getCompoundPaddingLeft())
{
hitDrawable = 0;
hitBounds.set(0,0,getCompoundPaddingLeft(),getHeight());
}
if (x > getWidth()-getCompoundPaddingRight())
{
hitDrawable = 2;
hitBounds.set(getCompoundPaddingRight(),0,getWidth(),getHeight());
}
if (hitDrawable != -1)
{
int action = event.getAction();
if (action == MotionEvent.ACTION_UP)
{
onDrawableClicked(hitDrawable,hitBounds);
}
return true;
}
return false;
}
});
}

private void onDrawableClicked(int i, Rect bounds) {
if (onDrawableClickedListener != null)
{
onDrawableClickedListener.onDrawableClicked(this,i,bounds);
}
}

public interface OnDrawableClickedListener {
void onDrawableClicked(View v, int drawable, Rect bounds);
}

public void setOnDrawableClickedListener(OnDrawableClickedListener listener)
{
this.onDrawableClickedListener = listener;
}

}

示例布局:

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/playlist_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/playlist_name" >

<com.twoplay.netplayer.controls.TextInputEditTextEx
android:id="@+id/playlist_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:drawableEnd="@drawable/ic_more_horiz_black_24dp"
android:drawablePadding="10dp" />
</com.google.android.material.textfield.TextInputLayout>

关于android - 如何处理 TextInputEditText 的复合绘图上的 onclick 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55091690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com