android基础笔记——自定义控件和视图:下拉菜单
2014-10-18 10:40
274 查看
实现效果:
一、首先是一个相对布局页面,控件有 EditText 和 ImageView 。
二、完成功能。
1、得到 EditText 和 ImageView 两个控件;
2、定义一个 List 集合,并通过 for 循环,往里面添加数据;
3、定义一个 initListView 方法,并定义一个 ListView ,进行数据的适配;
4、定义一个类 MyAdapter 继承 BaseAdapter ,实现未实现的方法;(主要是 getCount 和 getView ,getView 方法中需要使用 ViewHolder 的方式,进行优化)
5、实现小箭头的点击事件:down_arrow.setOnClickListener 。
具体代码如下:
MainActivity:
activity_main 代码:
list_item 代码:
一、首先是一个相对布局页面,控件有 EditText 和 ImageView 。
二、完成功能。
1、得到 EditText 和 ImageView 两个控件;
2、定义一个 List 集合,并通过 for 循环,往里面添加数据;
3、定义一个 initListView 方法,并定义一个 ListView ,进行数据的适配;
4、定义一个类 MyAdapter 继承 BaseAdapter ,实现未实现的方法;(主要是 getCount 和 getView ,getView 方法中需要使用 ViewHolder 的方式,进行优化)
5、实现小箭头的点击事件:down_arrow.setOnClickListener 。
具体代码如下:
MainActivity:
package com.example.menu; import java.util.ArrayList; import java.util.List; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; import android.os.Build; public class MainActivity extends ActionBarActivity { private EditText et; private ImageView down_arrow; private List<String> msgList; private PopupWindow popup; private ListView listView; private boolean popupShow = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText) findViewById(R.id.et); down_arrow = (ImageView) findViewById(R.id.down_arrow); msgList = new ArrayList<String>(); for (int i = 0; i < 20; i++) { msgList.add("" + i); } initListView(); // 小箭头点击之后的相应事件 down_arrow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 如果popup已经显示了,那么点击down_arrow图片的时候,隐藏popup,否则显示popup。 popup = new PopupWindow(MainActivity.this); if (!popupShow) { popup.setWidth(et.getWidth()); popup.setHeight(200); // 设置内容视图 popup.setContentView(listView); // 点击pouupwindow以外的位置,popupwindow自动关闭 popup.setOutsideTouchable(true); // 设置显示位置 popup.showAsDropDown(et, 0, 0); popupShow = true; } else { popup.dismiss(); popupShow = false; } } }); // 定义PopupWindow } private void initListView() { // TODO Auto-generated method stub listView = new ListView(this); listView.setBackgroundResource(R.drawable.listview_background); // 设置分割线为空 listView.setDivider(null); // 设置垂直滚动条为false listView.setVerticalScrollBarEnabled(false); listView.setAdapter(new MyAdapter()); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub return msgList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(getApplicationContext(), R.layout.list_item, null); holder.delete = (ImageView) convertView.findViewById(R.id.delete); holder.tv_list_item = (TextView) convertView.findViewById(R.id.tv_list_item); // 给convertView设置标签,内容为holder。这样 // findViewById操作只要执行一次,下次直接通过getTag,就可以从holder中得到View convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv_list_item.setText(msgList.get(position)); // delete按钮的点击方法 holder.delete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 删除对应条目 msgList.remove(position); MyAdapter.this.notifyDataSetChanged(); } }); // 当用户点击ListView中的条目后,将ListView中的内容填写到edittext中。 convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 设置输入框内容 et.setText(msgList.get(position)); // 填写之后,popupwindows消失。 popup.dismiss(); } }); return convertView; } } private class ViewHolder { private TextView tv_list_item; private ImageView delete; } }
activity_main 代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.menu.MainActivity" tools:ignore="MergeRootFrame" > <EditText android:id="@+id/et" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <ImageView android:id="@+id/down_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/et" android:layout_marginRight="5dp" android:src="@drawable/down_arrow" /> </RelativeLayout>
list_item 代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" tools:context="com.example.menu.MainActivity" tools:ignore="MergeRootFrame" > <ImageView android:id="@+id/user" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/user" /> <TextView android:id="@+id/tv_list_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <ImageView android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/delete" /> </LinearLayout>
相关文章推荐
- android基础笔记——自定义控件和视图:优酷菜单:RotateAnimation
- android基础笔记——自定义控件和视图:放ios系统开关按钮
- Android基础教程(九)之自定义下拉菜单模式----Spinner与setDropDownViewResource的应用
- Android Map开发基础知识学习笔记
- Android 学习笔记【基础扫盲篇】
- Android必会基础之Android是如何绘制视图的
- android 基础学习笔记
- 笔记:asp.net自定义控件的视图状态管理
- Android基础学习笔记--Mars篇
- 黑马程序员Java培训、Android培训_Java基础加强_笔记
- Android开发学习笔记-9 Service基础
- Android Map开发基础知识学习笔记
- 【Android笔记】如何创建列表视图
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android开发学习笔记:浅谈DDMS视图
- Android基础教程(九)之自定义下拉菜单模式----Spinner与setDropDownViewResource的应用
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记(转)
- Android Map开发基础知识学习笔记