android自带的Edittext控件已经满足不了用户的需求的,在这自己写一个Edittext,初学android,望各位指点一二
首先建立一个xml文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dip48"
android:background="#e2e2e4"
android:padding="@dimen/dip5" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/dip5"
android:paddingRight="@dimen/dip5"
android:background="@drawable/edittext_bg" >
<ImageView
android:id="@+id/search_imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/searchicon"
android:contentDescription="@null"
android:visibility="invisible"/>
<EditText
android:id="@+id/search_edittext"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:layout_marginLeft="@dimen/dip3"
android:layout_toRightOf="@+id/search_imageView"
android:padding="@dimen/dip2" />
</RelativeLayout>
<TextView
android:id="@+id/search_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawableLeft="@drawable/searchicon"
android:drawablePadding="@dimen/dip5"
android:text="搜索" />
</FrameLayout>
在建立一个自定义的View
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
public class SearchView extends FrameLayout {
private Context mContext;
private EditText mEdit;
private TextView search;
private ImageView image;
OnEdittextTextChangeListener lis;
public SearchView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
init(context);
}
public SearchView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init(context);
}
public SearchView(Context context) {
super(context);
// TODO Auto-generated constructor stub
init(context);
}
private void init(Context context) {
mContext = context;
View view = LayoutInflater.from(mContext).inflate(R.layout.search_viewlayout, this);
mEdit = (EditText) view.findViewById(R.id.search_edittext);
search = (TextView) view.findViewById(R.id.search_textView);
image = (ImageView) view.findViewById(R.id.search_imageView);
search.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
mEdit.setFocusable(true);
mEdit.setFocusableInTouchMode(true);
mEdit.requestFocus();
KebordUtils.showSoftInput(mContext);
image.setVisibility(View.VISIBLE);
search.setVisibility(View.GONE);
}
});
mEdit.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
if (arg0.toString() == null || arg0.toString().equals("")) {
search.setVisibility(View.VISIBLE);
image.setVisibility(View.INVISIBLE);
lis.onNochange();
} else {
search.setVisibility(View.INVISIBLE);
image.setVisibility(View.VISIBLE);
if(lis!=null){
lis.onTextChange(arg0.toString());
}
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
public void setOnEditTextChangeListener(OnEdittextTextChangeListener listener) {
lis = listener;
}
public interface OnEdittextTextChangeListener {
void onTextChange(String text);
void onNochange();
}
}
<com.views.SearchView
android:id="@+id/search_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</com.views.SearchView>
这样在自己的activity中findview再设置其监听
sView.setOnEditTextChangeListener(new OnEdittextTextChangeListener() {
@Override
public void onTextChange(String text) {
//输入框有变化的情况下
}
@Override
public void onNochange() {
//
}
});
希望大家提出意见,多谢!