package com.example.a2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; 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 java.util.ArrayList; public class MainActivity extends AppCompatActivity { EditText input; ImageView imgDown; private PopupWindow popW; private ListView listView; private ArrayList<String> aList; private DownAdapterter downAdapterter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgDown= (ImageView) findViewById(R.id.down); input= (EditText) findViewById(R.id.input); imgDown.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(null==popW){ popW=new PopupWindow(MainActivity.this); popW.setWidth(imgDown.getWidth()); int hight=Utils.dip2px(MainActivity.this,200); popW.setHeight(hight); popW.setContentView(listView); popW.setFocusable(true);//记得设置焦点 } popW.showAsDropDown(imgDown,0,0); // popW.showAtLocation(imgDown, Gravity.RIGHT,0,0); } }); listView=new ListView(MainActivity.this); aList=new ArrayList<String>(); for (int i=0;i<100;i++){ aList.add("o"+i); } downAdapterter= new DownAdapterter(); listView.setAdapter(downAdapterter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String msgs=aList.get(position); input.setText(msgs); if(popW!=null&&popW.isShowing()){ popW.dismiss(); popW=null; } } }); } class DownAdapterter extends BaseAdapter{ @Override public int getCount() { return aList.size(); } @Override public Object getItem(int position) { return aList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHold viewHold; if(convertView==null){ viewHold=new ViewHold(); convertView=View.inflate(MainActivity.this,R.layout.downiten,null); viewHold.tv_msg= (TextView) convertView.findViewById(R.id.tv_msg); viewHold.delete= (ImageView) convertView.findViewById(R.id.delete); convertView.setTag(viewHold); }else{ viewHold= (ViewHold) convertView.getTag(); } final String msg=aList.get(position); viewHold.tv_msg.setText(msg); viewHold.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { aList.remove(msg); downAdapterter.notifyDataSetChanged(); } }); return convertView; } } class ViewHold{ TextView tv_msg; ImageView delete; } } activity_main.xml<?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" 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="com.example.a2.MainActivity"> <EditText android:singleLine="true" android:ellipsize="middle" android:paddingRight="40dp" android:id="@+id/input" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入内容。。。" /> <ImageView android:layout_alignRight="@+id/input" android:layout_alignTop="@+id/input" android:id="@+id/down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher"/> </RelativeLayout>
domnitem.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:padding="10dp" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:layout_gravity="center_vertical" android:paddingLeft="3dp" android:src="@drawable/search_big"/> <TextView android:id="@+id/tv_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:paddingLeft="3dp" android:layout_gravity="center_vertical" android:gravity="center" android:textColor="#000000" android:layout_weight="1" android:text="西瓜公司"/> <ImageView android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:layout_gravity="center_vertical" android:paddingLeft="3dp" android:src="@drawable/search_cancel"/> </LinearLayout>public class Utils { /** * 根据手机的分辨率从 dp 的单位 转成为 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); } }关于PopWindow的显示位置
showAsDropDown() 中的坐标是相对于anchor的偏移值,
showAtLocation() 中的坐标是相对于左上角原点的偏移值
showAsDropDown(View anchor, 0, 0) 默认是将PopupWindow 的左上角与 anchor 的左下角对齐的。
当无法对齐时,宽度过大,会顶屏幕
Android PopupWindow窗口
最新推荐文章于 2021-05-28 07:00:37 发布