Android中搜索圖標和文字居中的EditText實例
更新時間:2017年06月08日 15:45:05 作者:蒽香之氣
本篇文章主要介紹了Android中搜索圖標和文字居中的EditText實例,具有一定的參考價值,有興趣的可以了解一下
效果圖:

需要自定義view,具體實現(xiàn)如下:
import android.widget.EditText;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import com.example.administrator.mahu.R;
public class SearchView extends EditText {
private float searchSize = 0;
private float textSize = 0;
private int textColor = 0xFF000000;
private Drawable mDrawable;
private Paint paint;
public SearchView(Context context, AttributeSet attrs) {
super(context, attrs);
InitResource(context, attrs);
InitPaint();
}
private void InitResource(Context context, AttributeSet attrs) {
TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.searchedit);
float density = context.getResources().getDisplayMetrics().density;
searchSize = mTypedArray.getDimension(R.styleable.searchedit_imagewidth, 18 * density + 0.5F);
textColor = mTypedArray.getColor(R.styleable.searchedit_textColor, 0xFF848484);
textSize = mTypedArray.getDimension(R.styleable.searchedit_textSize, 14 * density + 0.5F);
mTypedArray.recycle();
}
private void InitPaint() {
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(textColor);
paint.setTextSize(textSize);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
DrawSearchIcon(canvas);
}
private void DrawSearchIcon(Canvas canvas) {
if (this.getText().toString().length() == 0) {
float textWidth = paint.measureText("搜索");
float textHeight = getFontLeading(paint);
float dx = (getWidth() - searchSize - textWidth - 8) / 2;
float dy = (getHeight() - searchSize) / 2;
canvas.save();
canvas.translate(getScrollX() + dx, getScrollY() + dy);
if (mDrawable != null) {
mDrawable.draw(canvas);
}
canvas.drawText("搜索", getScrollX() + searchSize + 8, getScrollY() + (getHeight() - (getHeight() - textHeight) / 2) - paint.getFontMetrics().bottom - dy, paint);
canvas.restore();
}
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mDrawable == null) {
try {
mDrawable = getContext().getResources().getDrawable(R.mipmap.search);
mDrawable.setBounds(0, 0, (int) searchSize, (int) searchSize);
} catch (Exception e) {
}
}
}
@Override
protected void onDetachedFromWindow() {
if (mDrawable != null) {
mDrawable.setCallback(null);
mDrawable = null;
}
super.onDetachedFromWindow();
}
public float getFontLeading(Paint paint) {
Paint.FontMetrics fm = paint.getFontMetrics();
return fm.bottom - fm.top;
}
}
在values---attrs下添加
<declare-styleable name="searchedit">
<attr name="imagewidth" format="dimension" />
<attr name="textSize" format="dimension" />
<attr name="textColor" format="color" />
</declare-styleable>
搜索圖片

在布局文件中調(diào)用如下
<com.example.administrator.mahu.view.SearchView
android:id="@+id/search"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_below="@+id/layout"
android:background="@drawable/search_kuang"
android:textSize="17sp"
android:paddingLeft="5dp"
android:singleLine="true"
android:imeOptions="actionSearch"
/>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實現(xiàn)連續(xù)點擊多次事件的代碼詳解
小編經(jīng)常遇到這樣的需求類似進入開發(fā)者模式,即多次點擊后執(zhí)行操作。下面小編通過實例代碼給大家講解Android實現(xiàn)連續(xù)點擊多次事件的相關(guān)知識,感興趣的朋友跟隨小編一起學(xué)習(xí)吧2018-10-10
Android利用Badge組件實現(xiàn)未讀消息小紅點
在?App?的運營中,活躍度是一個重要的指標,日活/月活……為了提高活躍度,就發(fā)明了小紅點。這一篇,來介紹一個徽標(Badge)組件,能夠快速搞定應(yīng)用內(nèi)的小紅點,希望對大家有所幫助2023-01-01
Android 自定義imageview實現(xiàn)圖片縮放實例詳解
這篇文章主要介紹了Android 自定義imageview實現(xiàn)圖片縮放實例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
RxJava和Retrofit2的統(tǒng)一處理單個請求示例詳解
這篇文章主要給大家介紹了關(guān)于RxJava和Retrofit2的統(tǒng)一處理單個請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11

