Android PopupWindow初步使用
来源:互联网 发布:ug nx8.0数控编程教程 编辑:程序博客网 时间:2024/06/05 12:41
<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <RelativeLayout android:layout_width="match_parent" android:layout_height="45dp" > <!-- 输入框 --> <EditText android:id="@+id/et_content" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/et_bg" android:paddingLeft="3dp" android:paddingRight="3dp" /> <ImageView android:id="@+id/iv_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:src="@drawable/down_arrow" /> </RelativeLayout></RelativeLayout>
public class MainActivity extends Activity implements OnClickListener, OnItemClickListener { private ImageView mIvArrow; private EditText mEtContent; private PopupWindow mWindow; private List<String> mDatas; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); // 模拟假数据 mDatas = new ArrayList<String>(); for (int i = 0; i < 50; i++) { mDatas.add(1000000 + i + ""); } } private void initView() { mIvArrow = (ImageView) findViewById(R.id.iv_arrow); mEtContent = (EditText) findViewById(R.id.et_content); // 设置点击事件 mIvArrow.setOnClickListener(this); } public void onClick(View v) { if (v == mIvArrow) { clickArrow(); } } private void clickArrow() { // 点击小三角弹出list数据展示 // Toast.makeText(this, "弹出list数据展示", Toast.LENGTH_SHORT).show(); // popupwindow // View contentView = null;// 内容显示的view if (mWindow == null) { // TextView contentView = new TextView(this); // contentView.setText("弹出层的内容view"); // contentView.setBackgroundColor(Color.GRAY); ListView contentView = new ListView(this); contentView.setBackgroundResource(R.drawable.listview_background); contentView.setAdapter(new MyAdapter());// 设置adapter -->List contentView.setOnItemClickListener(this); int width = mEtContent.getWidth();// 弹出层的宽度 int height = 300;// 弹出层的高度 mWindow = new PopupWindow(contentView, width, height); // 设置焦点 mWindow.setFocusable(true); // 设置点击其他部分收起PopupWindow mWindow.setOutsideTouchable(true); mWindow.setBackgroundDrawable(new ColorDrawable()); } mWindow.showAsDropDown(mEtContent);// 在某某view的 正下方显示 } class MyAdapter extends BaseAdapter { public int getCount() { if (mDatas != null) { return mDatas.size(); } return 0; } public Object getItem(int position) { if (mDatas != null) { return mDatas.get(position); } return null; } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { // 没有复用的情况下 convertView = View.inflate(MainActivity.this, R.layout.item, null); holder = new ViewHolder();// 创建holder convertView.setTag(holder);// 打标记 // 初始化view holder.ivDelete = (ImageView) convertView .findViewById(R.id.item_iv_delete); holder.ivIcon = (ImageView) convertView .findViewById(R.id.item_iv_icon); holder.tvContent = (TextView) convertView .findViewById(R.id.item_tv_content); holder.ivDelete.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 删除对应的item mDatas.remove(position); // ui更新 notifyDataSetChanged(); } }); } else { // 有复用 holder = (ViewHolder) convertView.getTag(); } // 给view设置数据 // 获得当前item对应的数据 String data = mDatas.get(position); holder.tvContent.setText(data); // 展示convertView return convertView; } } class ViewHolder { ImageView ivIcon; ImageView ivDelete; TextView tvContent; } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String data = mDatas.get(position); // 文本框显示选中的内容 mEtContent.setText(data); // 光标选中最后 mEtContent.setSelection(data.length()); // 弹出层消失 mWindow.dismiss(); }}
item.xml:
<?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="wrap_content" > <ImageView android:id="@+id/item_iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_margin="10dp" android:src="@drawable/user" /> <TextView android:id="@+id/item_tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_margin="10dp" android:layout_toRightOf="@id/item_iv_icon" android:text="Content" android:textSize="20dp" /> <ImageView android:id="@+id/item_iv_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_margin="10dp" android:src="@drawable/delete" /></RelativeLayout>
封装:
public class SpinnerView extends RelativeLayout implements OnClickListener { private ImageView mIvArrow; private EditText mEtContent; private PopupWindow mWindow; private ListAdapter mAdapter; private OnItemClickListener mListener; public SpinnerView(Context context) { this(context, null); } public SpinnerView(Context context, AttributeSet attrs) { super(context, attrs); // 绑定xml View.inflate(context, R.layout.spinner, this); initView(); } private void initView() { mIvArrow = (ImageView) findViewById(R.id.iv_arrow); mEtContent = (EditText) findViewById(R.id.et_content); // 设置点击事件 mIvArrow.setOnClickListener(this); } public void onClick(View v) { if (v == mIvArrow) { clickArrow(); } } public void setAdapter(ListAdapter adapter) { this.mAdapter = adapter; } public void setOnItemClickListener(OnItemClickListener listener) { this.mListener = listener; } private void clickArrow() { // 点击小三角弹出list数据展示 // Toast.makeText(this, "弹出list数据展示", Toast.LENGTH_SHORT).show(); if (mAdapter == null) { throw new RuntimeException("请调用setAdapter"); } // popupwindow // View contentView = null;// 内容显示的view if (mWindow == null) { // TextView contentView = new TextView(this); // contentView.setText("弹出层的内容view"); // contentView.setBackgroundColor(Color.GRAY); ListView contentView = new ListView(getContext()); contentView.setBackgroundResource(R.drawable.listview_background); contentView.setAdapter(mAdapter);// 设置adapter -->List contentView.setOnItemClickListener(mListener);// 设置的是item点击的事件 int width = mEtContent.getWidth();// 弹出层的宽度 int height = 300;// 弹出层的高度 mWindow = new PopupWindow(contentView, width, height); // 设置焦点 mWindow.setFocusable(true); // 设置点击其他部分收起PopupWindow mWindow.setOutsideTouchable(true); mWindow.setBackgroundDrawable(new ColorDrawable()); } mWindow.showAsDropDown(mEtContent);// 在某某view的 正下方显示 } public void setText(String data) { mEtContent.setText(data); } public void setSelection(int length) { mEtContent.setSelection(length); } public void dismissPop() { if (mWindow != null) { mWindow.dismiss(); } }}
<?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="45dp" > <!-- 输入框 --> <EditText android:id="@+id/et_content" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/et_bg" android:paddingLeft="3dp" android:paddingRight="3dp" /> <ImageView android:id="@+id/iv_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:src="@drawable/down_arrow" /></RelativeLayout>
public class DemoActivity extends Activity implements OnItemClickListener { private SpinnerView mSv; private List<String> mDatas; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo); mSv = (SpinnerView) findViewById(R.id.sv); // 模拟假数据 mDatas = new ArrayList<String>(); for (int i = 0; i < 50; i++) { mDatas.add(1000000 + i + ""); } // 设置点击事件 mSv.setOnItemClickListener(this); mSv.setAdapter(new MyAdapter()); } class MyAdapter extends BaseAdapter { public int getCount() { if (mDatas != null) { return mDatas.size(); } return 0; } public Object getItem(int position) { if (mDatas != null) { return mDatas.get(position); } return null; } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { // 没有复用的情况下 convertView = View.inflate(DemoActivity.this, R.layout.item, null); holder = new ViewHolder();// 创建holder convertView.setTag(holder);// 打标记 // 初始化view holder.ivDelete = (ImageView) convertView .findViewById(R.id.item_iv_delete); holder.ivIcon = (ImageView) convertView .findViewById(R.id.item_iv_icon); holder.tvContent = (TextView) convertView .findViewById(R.id.item_tv_content); holder.ivDelete.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 删除对应的item mDatas.remove(position); // ui更新 notifyDataSetChanged(); } }); } else { // 有复用 holder = (ViewHolder) convertView.getTag(); } // 给view设置数据 // 获得当前item对应的数据 String data = mDatas.get(position); holder.tvContent.setText(data); // 展示convertView return convertView; } } class ViewHolder { ImageView ivIcon; ImageView ivDelete; TextView tvContent; } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String data = mDatas.get(position); // 文本框显示选中的内容 mSv.setText(data); // 光标选中最后 mSv.setSelection(data.length()); // 弹出层消失 mSv.dismissPop(); }}
参考:Android PopupWindow
阅读全文
0 0
- Android PopupWindow初步使用
- PopupWindow的初步使用
- Android PopupWindow的使用
- Android PopupWindow的使用
- Android PopupWindow的使用!!!
- Android PopupWindow使用
- 【Android】 PopupWindow使用小结
- Android PopupWindow的使用!!!
- android PopupWindow 使用
- Android PopupWindow简单使用
- Android PopupWindow 的使用
- Android PopupWindow的使用
- android PopupWindow的使用
- Android PopupWindow使用详解
- Android PopupWindow的使用
- Android PopupWindow 的使用
- Android PopupWindow的使用
- Android PopupWindow简单使用
- JS设置CSS样式的几种方式
- Spring Cloud Feign Client 实现MultipartFile上传文件功能
- PAT甲级 1014
- YII2框架学习 扩展篇(一) 模块化设计
- 并发队列比较
- Android PopupWindow初步使用
- socket编程(二)
- jQuery -- touch事件之滑动判断(左右上下方向)
- 写作建议
- Android (BroadcastReceiver基础)
- python 线程、协程简单使用
- Service使用技巧
- HDU 4798 Skycity【计算机几何】【阅读题】
- MQTT,RabbitMQ初步使用