下拉框
1.创建步骤
1_新建一个工程:03.下拉框
把需要的图片拷贝到工程中,
2_写布局文件
3_实例化控件并准备ListView的数据
4_设置向下箭头点击事件并实例化popupwindow
5_实例化ListView并且设置适配器
6_ListView在低版本2.3的适配并且解决各个问题
写布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:singleLine="true"
android:ellipsize="middle"
android:paddingRight="40dp"
android:id="@+id/et_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入内容..." />
<ImageView
android:id="@+id/iv_down_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@id/et_input"
android:layout_alignTop="@id/et_input"
android:padding="5dp"
android:src="@drawable/down_arrow" />
/RelativeLayout>
EditText单行显示
android:singleLine="true"
EditText省略
android:ellipsize="middle"
实例化控件并准备ListView的数据
private EditText et_input;
private ImageView iv_down_arrow;
private PopupWindow popupWindow;
private ListView listview;
private MyAdapter myAdapter;
private void initView()
{
iv_down_arrow = (ImageView) findViewById(R.id.iv_down_arrow);
et_input = (EditText) findViewById(R.id.et_input);
}
设置点击事件,点击弹出popupWindow
et_input.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(popupWindow==null)//如果为空则创建
{
popupWindow=new PopupWindow(MainActivity.this);
popupWindow.setWidth(et_input.getWidth());//等于输入框的宽
int height=DensityUtil.dip2px(MainActivity.this, 200);
Toast.makeText(MainActivity.this,"height=="+height,Toast.LENGTH_SHORT).show();
popupWindow.setHeight(height);
popupWindow.setContentView(listview);
popupWindow.setFocusable(true);//设置焦点,否则点击事件不起作用
}
popupWindow.showAsDropDown(et_input,0,0);//显示在输入框的下方,距离输入框的边距为0
}
});
设置listView
准备listView数据
listview = new ListView(this);
listview.setBackgroundResource(R.drawable.listview_background);
//准备数据
msgs=new ArrayList();
for(int i=0;i<100;i++)
{
msgs.add(i+"--aaaaaaaaaaaaaa--"+i);
}
设置listView的适配器
myAdapter=new MyAdapter();
listview.setAdapter(myAdapter);//设置ListView的背景
创建MyAdapter
class MyAdapter extends BaseAdapter
{
@Override
public int getCount()
{
return msgs.size();
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder;
if(convertView==null)
{
convertView=View.inflate(MainActivity.this, R.layout.item_main, null);
viewHolder=new ViewHolder();
viewHolder.tv_msg=(TextView) convertView.findViewById(R.id.tv_msg);
viewHolder.iv_delete=(ImageView) convertView.findViewById(R.id.iv_delete);
convertView.setTag(viewHolder);
}
else
{
viewHolder=(ViewHolder) convertView.getTag();
}
//根据位置得到数据
final String msg=msgs.get(position);
viewHolder.tv_msg.setText(msg);
//设置删除
viewHolder.iv_delete.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//1.从集合中删除
msgs.remove(msg);
//2.刷新ui-适配器刷新
myAdapter.notifyDataSetChanged();
}
});
return convertView;
}
}
设置item的布局和viewHolder
item布局
<?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="50dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:padding="3dp"
android:src="@drawable/user" />
<TextView
android:id="@+id/tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:layout_weight="1"
android:gravity="center"
android:padding="2dp"
android:text="三个火枪手"
android:textColor="#000000" />
<ImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:padding="3dp"
android:src="@drawable/delete" />
</LinearLayout>
viewHolder
static class ViewHolder
{
TextView tv_msg;
ImageView iv_delete;
}
设置ListView的点击事件
listview.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
//1.得到数据
String msg=msgs.get(position);
//2.设置输入框
et_input.setText(msg);
if(popupWindow!=null && popupWindow.isShowing())//不为空且显示状态
{
popupWindow.dismiss();//销毁
popupWindow=null;//释放资源
}
}
});
适配
代码中创建的单位为px的,使用DensityUtil工具类转换
public class DensityUtil
{
/**
* 根据手机的分辨率从 dip 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue)
{
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue)
{
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
网友评论