一、效果图
二、自定义AutoCompleteTextView图标居中
package com.daqsoft.android.emergentpro.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.AutoCompleteTextView;
import com.android.daqsoft.emergent.R;
/**
* 注意此类效果是让AutoCompleteTextView的drawableLeft的图标居中显示
* 使用时需要在xml中添加drawableLeft和gravity = “center_vertical”,以免影响效果
*/
public class AutoCompleteTextViewWithCenterDrawable extends
AutoCompleteTextView {
public AutoCompleteTextViewWithCenterDrawable(Context context,
AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public AutoCompleteTextViewWithCenterDrawable(Context context,
AttributeSet attrs) {
super(context, attrs);
}
public AutoCompleteTextViewWithCenterDrawable(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable[] drawables = getCompoundDrawables();
if (drawables != null) {
Drawable drawableLeft = drawables[0];
if (drawableLeft != null) {
float textWidth = getPaint().measureText(getText().toString());
float hintWidth = getPaint().measureText(getHint().toString());
int drawablePadding = getCompoundDrawablePadding();
int drawableWidth = 0;
drawableWidth = drawableLeft.getIntrinsicWidth();
float bodyWidth ;
if (textWidth == 0f) {
bodyWidth = hintWidth + drawableWidth + drawablePadding;
}
else {
bodyWidth = textWidth + drawableWidth + drawablePadding;
}
canvas.translate((getWidth() - bodyWidth) / 2, 0);
}
}
super.onDraw(canvas);
}
@Override
protected void onTextChanged(CharSequence text, int start,
int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
if (!TextUtils.isEmpty(text)) {
// getCompoundDrawables()[0].setVisible(false, true);
this.setCompoundDrawables(null, null, null, null);
setGravity(Gravity.CENTER);//输入的时候设置文字居中显示
}
else {
// getCompoundDrawables()[0].setVisible(true, true);
Drawable drawable= getResources().getDrawable(R.drawable.search);
/// 这一步必须要做,否则不会显示.
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
setCompoundDrawables(drawable,null,null,null);
setGravity(Gravity.CENTER_VERTICAL);//清空时设置图标和hint居中
}
}
}
三、布局
<?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"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:background="@drawable/messages_card_background"
android:gravity="center_vertical"
android:visibility="visible" >
<com.daqsoft.android.emergentpro.view.AutoCompleteTextViewWithCenterDrawable
android:id="@+id/include_actv_search"
style="@style/myAutoCompleteTextView"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@android:color/transparent"
android:gravity="center_vertical"
android:hint="@string/please_input_something"
android:maxLength="10"
android:padding="10dp"
android:drawableLeft="@drawable/search"
android:imeOptions="actionSearch"
android:paddingRight="60dp"
android:singleLine="true"
android:textSize="13sp"
>
</com.daqsoft.android.emergentpro.view.AutoCompleteTextViewWithCenterDrawable>
<ImageButton
android:id="@+id/include_ib_clear"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@null"
android:onClick="onClick"
android:padding="10dp"
android:src="@drawable/search_cancel"
android:visibility="gone" />
</RelativeLayout>
需要的图片资源地址:
style=”@style/myAutoCompleteTextView”:
<!-- 去除AutoCompleteTextView下拉显示时的黑边 -->
<style name="myAutoCompleteTextView">
<item name="android:completionThreshold">2</item>
<item name="android:dropDownSelector">@android:drawable/list_selector_background</item>
<item name="android:popupBackground">@android:color/transparent</item>
<item name="android:dropDownVerticalOffset">0dip</item>
<item name="android:dropDownHorizontalOffset">0dip</item>
<item name="android:dropDownWidth">wrap_content</item>
<item name="android:textColorHint">@color/gray_addr</item>
<item name="android:background">@null</item>
<item name="android:textCursorDrawable">@drawable/color_cursor</item>
</style>
@color/gray_addr:
<color name="gray_addr">#999999</color>
@drawable/color_cursor:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<size android:width="2dp" />
<solid android:color="@color/main" />
</shape>