1.autoCompleteTextview
[1]在布局中声明
<?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="match_parent"> <AutoCompleteTextView android:id="@+id/actv" android:layout_width="match_parent" android:layout_height="wrap_content" android:completionThreshold="1" android:singleLine="true" /> </RelativeLayout>
[2]这个控件展示数据原理和listview一样 需要一个适配器 代码如下:
package ngyb.combobox; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; /** * 作者:南宫燚滨 * 描述: * 邮箱:nangongyibin@gmail.com * 时间: 2018/4/16 16:18 */ public class ComboBox1Activity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_combox1); String [] list = {"张三","李四","王五","马六"}; AutoCompleteTextView actv = findViewById(R.id.actv); actv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,list)); } }
2.下拉列表
需求分析 通过edittext button popupwindow listview组合达到自定义需求
代码实现步骤
[1]画UI
<?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="match_parent" android:orientation="vertical"> <EditText android:id="@+id/et_number" android:layout_width="250dp" android:layout_height="wrap_content" /> <ImageButton android:id="@+id/ib" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignEnd="@id/et_number" android:layout_alignRight="@id/et_number" android:background="@drawable/down_arrow" android:src="@null" /> </RelativeLayout>
[2]初始化popupwindow
private void showPopupWindow() { ListView lv = initView(); final PopupWindow pw = new PopupWindow(lv, etnumber.getWidth(), 1080, true); pw.showAsDropDown(etnumber, 0, -20); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String str = lists.get(position); etnumber.setText(str); pw.dismiss(); } }); }
[3]准备popupwindow要展示的内容—>listview 先画listview条目的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants" android:orientation="horizontal"> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/user" /> <TextView android:id="@+id/tv" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:text="1008611" android:textColor="@android:color/black" /> <ImageButton android:id="@+id/ib_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/delete" /> </LinearLayout>
[4]展示listviet的数据
private ListView initView() { ListView listview = (ListView) View.inflate(getApplicationContext(), R.layout.listviewbg, null); listview.setDivider(new ColorDrawable(Color.GRAY)); listview.setDividerHeight(1); myAdapter = new MyAdapter(); listview.setAdapter(myAdapter); return listview; } class MyAdapter extends BaseAdapter { @Override public int getCount() { return lists.size(); } @Override public String getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(getApplicationContext(), R.layout.item, null); } ImageView iv = convertView.findViewById(R.id.iv); TextView tv = convertView.findViewById(R.id.tv); ImageButton ibdelete = convertView.findViewById(R.id.ib_delete); ibdelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { lists.remove(getItem(position)); notifyDataSetChanged(); } }); tv.setText(getItem(position)); return convertView; } }
[5]点击listview的条目 把点击条目的数据取出来展示到edittext上
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String str = lists.get(position); etnumber.setText(str); pw.dismiss(); } });
注意:当listview 的条目上有button checkbox这些控件 会抢占条目的事件 —->解决方案在条目的根布局上面加如下属性
android:descendantFocusability="blocksDescendants"
[6]点击删除按钮逻辑
ibdelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lists.remove(getItem(position));
notifyDataSetChanged();
}
});