EditText获取焦点后有描边特效
时间: 2024-10-24 13:16:29 浏览: 20
EditText控件在Android中默认并没有描边特效,但是你可以通过自定义视图或者第三方库来添加这种效果。一种常见的做法是在 EditText 上覆盖一个带边框的透明 `View`,当 EditText 获取焦点时切换这两个视图。
以下是一个简单的示例:
1. 首先,在布局文件中,为 EditText 定义一个包含边框的 `LinearLayout` 或 `FrameLayout` 子布局,例如:
```xml
<LinearLayout
android:id="@+id/editTextWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText
android:id="@+id/editText"
...其他属性...
</LinearLayout>
```
2. 创建一个新的 `View` 类,比如 CustomOutlineView,并重写 onDraw() 方法以绘制边框:
```java
public class CustomOutlineView extends View {
private Paint outlinePaint;
public CustomOutlineView(Context context) {
super(context);
init();
}
// 其他构造函数和初始化方法...
@Override
protected void onDraw(Canvas canvas) {
if (isFocused()) {
outlinePaint.setColor(Color.BLUE); // 设置边框颜色
canvas.drawRect(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom(), outlinePaint);
}
super.onDraw(canvas);
}
private void init() {
outlinePaint = new Paint();
outlinePaint.setStyle(Paint.Style.STROKE);
outlinePaint.setStrokeWidth(2); // 边框宽度
}
}
```
3. 将 EditText 的包装布局替换为你创建的 CustomOutlineView:
```java
// 获取 EditText 对应的 Layout 观察焦点变化
View editTextWrapper = findViewById(R.id.editTextWrapper);
// 给包装视图设置点击事件监听
editTextWrapper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editTextWrapper.setVisibility(v.equals(editTextWrapper)? View.GONE : View.VISIBLE);
editText.requestFocus();
}
});
```
4. 当 EditText 获取到焦点时,隐藏原始的 EditText 并显示 CustomOutlineView;失去焦点时,反之。
阅读全文