android autocompletetextview 自定义,AutoCompleteTextView 自定义提示样式

项目中用到AutoCompleteTextView  自动提示功能,如果用自带的ArrayAdapter就一种样式,非常丑,而且每一项提示文字过多的话不会自动换行。

所以自己自定义了一个适配器。

效果图:

7d0df3f199c3b2a0cdb5af7263aa854d.png

1、每一项的布局文件:(可以自己定义)

1 <?xml version="1.0" encoding="utf-8"?>

2

3 android:layout_width="match_parent"

4 android:layout_height="wrap_content"

5 android:orientation="vertical">

6

7

8 android:id="@+id/text1"

9 android:layout_width="wrap_content"

10 android:layout_height="wrap_content"

11 android:gravity="center_vertical"

12 android:layout_marginLeft="@dimen/dimen_10"

13 android:layout_marginRight="@dimen/dimen_10"

14 android:layout_marginTop="@dimen/dimen_5"

15 android:layout_marginBottom="@dimen/dimen_5"

16 android:textSize="@dimen/textsize_14"

17 android:lineSpacingExtra="@dimen/dimen_4"

18 android:singleLine="false" />

19

20

21 android:layout_width="match_parent"

22 android:layout_height="@dimen/dimen_2"

23 android:background="@color/line_bg"

24 android:layout_marginLeft="@dimen/dimen_10"

25 android:layout_marginRight="@dimen/dimen_5"/>

26

27

这里用android:lineSpacingExtra="@dimen/dimen_4"属性指定了一下行间距。

2、适配器代码如下:

1 package nari.app.BianDianYingYong.adapter;

2

3 import android.content.Context;

4 import android.view.View;

5 import android.view.ViewGroup;

6 import android.widget.BaseAdapter;

7 import android.widget.Filter;

8 import android.widget.Filterable;

9 import android.widget.TextView;

10

11 import java.util.ArrayList;

12 import java.util.List;

13

14 import nari.app.BianDianYingYong.R;

15

16 /**

17 * Created by weihao on 2018/5/28.

18 * 继承BaseAdapter,实现Filterable

19 */

20

21 public class AutoEditTextAdapter extends BaseAdapter implements Filterable {

22 private ArrayFilter mFilter;

23 private List mList;

24 private Context context;

25 private ArrayList mUnfilteredData;

26

27 public AutoEditTextAdapter(List mList, Context context) {

28 this.mList = mList;

29 this.context = context;

30 }

31

32 @Override

33 public int getCount() {

34

35 return mList==null ? 0:mList.size();

36 }

37

38 @Override

39 public Object getItem(int position) {

40 return mList.get(position);

41 }

42

43 @Override

44 public long getItemId(int position) {

45

46 return position;

47 }

48

49 @Override

50 public View getView(int position, View convertView, ViewGroup parent) {

51 View view;

52 ViewHolder holder;

53 if(convertView==null){

54 view = View.inflate(context, R.layout.autotext_list_item, null);

55

56 holder = new ViewHolder();

57 holder.text1 = (TextView) view.findViewById(R.id.text1);

58

59

60 view.setTag(holder);

61 }else{

62 view = convertView;

63 holder = (ViewHolder) view.getTag();

64 }

65

66 String pc = mList.get(position);

67

68 holder.text1.setText("-- "+pc);

69

70

71 return view;

72 }

73

74 static class ViewHolder{

75 public TextView text1;

76

77 }

78

79 @Override

80 public Filter getFilter() {

81 if (mFilter == null) {

82 mFilter = new ArrayFilter();

83 }

84 return mFilter;

85 }

86

87 private class ArrayFilter extends Filter {

88

89 @Override

90 protected FilterResults performFiltering(CharSequence prefix) {

91 FilterResults results = new FilterResults();

92

93 if (mUnfilteredData == null) {

94 mUnfilteredData = new ArrayList(mList);

95 }

96

97 if (prefix == null || prefix.length() == 0) {

98 ArrayList list = mUnfilteredData;

99 results.values = list;

100 results.count = list.size();

101 } else {

102 String prefixString = prefix.toString().toLowerCase();

103

104 ArrayList unfilteredValues = mUnfilteredData;

105 int count = unfilteredValues.size();

106

107 ArrayList newValues = new ArrayList(count);

108

109 for (int i = 0; i < count; i++) {

110 String pc = unfilteredValues.get(i);

111 if (pc != null) {

112

113 if(pc!=null && pc.startsWith(prefixString)){

114

115 newValues.add(pc);

116 }else if(pc!=null && pc.startsWith(prefixString)){

117

118 newValues.add(pc);

119 }

120 }

121 }

122

123 results.values = newValues;

124 results.count = newValues.size();

125 }

126

127 return results;

128 }

129

130 @Override

131 protected void publishResults(CharSequence constraint,

132 FilterResults results) {

133

134 mList = (List) results.values;

135 if (results.count > 0) {

136 notifyDataSetChanged();

137 } else {

138 notifyDataSetInvalidated();

139 }

140 }

141

142 }

143 }

3、调用:

1 //获取控件实例

2 AutoCompleteTextView et_wtms = (AutoCompleteTextView) layout.findViewById(R.id.et_wtms);

3 //设置输入一个字就自动提示,默认是两个

4 et_wtms.setThreshold(1);

5

6 AutoEditTextAdapter adapter = new AutoEditTextAdapter(key, context);

7

8 et_wtms.setAdapter(adapter);

9

10 et_wtms.addTextChangedListener(new TextWatcher() {//文字改变事件

11 @Override

12 public void beforeTextChanged(CharSequence s, int start, int count, int after) {

13

14 }

15

16 @Override

17 public void onTextChanged(CharSequence s, int start, int before, int count) {

18

19 }

20

21 @Override

22 public void afterTextChanged(Editable s) {

23

24 }

25 });

26

27 //点击就自动提示

28 et_wtms.setOnClickListener(new View.OnClickListener() {

29 @Override

30 public void onClick(View v) {

31 et_wtms.showDropDown();

32 }

33 });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值