PopupWindow是一种比较好用的控件,通过它来实现一些自定义效果非常简便。如果需要在不同屏幕尺寸的手机上显示时,就有必要在程序中设置dip的长度值。很多人都会在代码中像下面这样转换。

Java代码
  1. //px转换成dip   
  2.    public int dip2px(Context context, float dipValue){      
  3.                    final float scale = context.getResources().getDisplayMetrics().density;      
  4.                    return (int)(dipValue * scale + 0.5f);      
  5.   }   

       但是有很多机器偏差很大,其实android资源文件中还有dimens.xml这种资源文件。也许这个dimens.xml大家不经常用,它和strings.xml一样,只不过strings.xml放置字符串而dimens.xml放置长度值。dimens的引用方法:getResources().getDimension(R.dimen.pop_y)。在代码中引用dip,sp.....类型不会变,也不要转换,很方便。下面上代码。

Java代码
  1. package com.johnson.popwindow;    
  2.   
  3. import java.util.ArrayList;    
  4. import java.util.HashMap;    
  5. import java.util.Map;    
  6.   
  7. import android.app.Activity;    
  8. import android.content.Context;    
  9. import android.os.Bundle;    
  10. import android.view.Gravity;    
  11. import android.view.LayoutInflater;    
  12. import android.view.View;    
  13. import android.view.View.OnClickListener;    
  14. import android.widget.AdapterView;    
  15. import android.widget.AdapterView.OnItemClickListener;    
  16. import android.widget.ImageView;    
  17. import android.widget.LinearLayout;    
  18. import android.widget.ListView;    
  19. import android.widget.PopupWindow;    
  20. import android.widget.PopupWindow.OnDismissListener;    
  21. import android.widget.SimpleAdapter;    
  22. import android.widget.Toast;    
  23.   
  24. public class PopwindowActivity extends Activity {    
  25.   
  26.   private ImageView arrow;    
  27.   private boolean isOpenPop = false;    
  28.   private PopupWindow window;    
  29.   private ListView list;    
  30.   private LinearLayout title_layout;    
  31.   public static final String KEY = "key";    
  32.   ArrayList<Map<String, Object>> items = new ArrayList<Map<String, Object>>();    
  33.   Context mContext;    
  34.   @Override    
  35.   protected void onCreate(Bundle savedInstanceState) {    
  36.     // TODO Auto-generated method stub    
  37.     super.onCreate(savedInstanceState);    
  38.     setContentView(R.layout.main);    
  39.     mContext=this;    
  40.     arrow = (ImageView) findViewById(R.id.arrow);    
  41.     title_layout = (LinearLayout) findViewById(R.id.title_layout);    
  42.     title_layout.setOnClickListener(new OnClickListener() {    
  43.   
  44.       @Override    
  45.       public void onClick(View v) {    
  46.         // TODO Auto-generated method stub    
  47.         
  48.         changPopState(v);    
  49.   
  50.       }    
  51.     });    
  52.   }    
  53.   /**   
  54.     * 更改Pop状态   
  55.     * */    
  56.   
  57.   public void changPopState(View v) {    
  58.   
  59.     isOpenPop = !isOpenPop;    
  60.     if (isOpenPop) {    
  61.       arrow.setBackgroundResource(R.drawable.icon_arrow_up);    
  62.       popAwindow(v);    
  63.   
  64.     } else {    
  65.       arrow.setBackgroundResource(R.drawable.icon_arrow_down);    
  66.       if (window != null) {    
  67.         window.dismiss();    
  68.   
  69.       }    
  70.     }    
  71.   }    
  72.   
  73.   private void popAwindow(View parent) {    
  74.     if (window == null) {    
  75.       LayoutInflater lay = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
  76.       View v = lay.inflate(R.layout.pop, null);    
  77.       list = (ListView) v.findViewById(R.id.pop_list);    
  78.   
  79.       SimpleAdapter adapter = new SimpleAdapter(this, CreateData(),    
  80.           R.layout.pop_list_item, new String[] { KEY },    
  81.           new int[] { R.id.title });    
  82.   
  83.       list.setAdapter(adapter);    
  84.       list.setItemsCanFocus(false);    
  85.       list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);    
  86.       list.setOnItemClickListener(listClickListener);    
  87.       // window = new PopupWindow(v, 260, 300);    
  88.       int x = (int) getResources().getDimension(R.dimen.pop_x);    
  89.       int y = (int) getResources().getDimension(R.dimen.pop_y);    
  90.       window = new PopupWindow(v, x, y);    
  91.     }    
  92.     window.setBackgroundDrawable(getResources().getDrawable(    
  93.         R.drawable.pop_bg));    
  94.     window.setFocusable(true);    
  95.     window.setOutsideTouchable(false);    
  96.     window.setOnDismissListener(new OnDismissListener() {    
  97.   
  98.       @Override    
  99.       public void onDismiss() {    
  100.         // TODO Auto-generated method stub    
  101.         isOpenPop = false;    
  102.         arrow.setBackgroundResource(R.drawable.icon_arrow_down);    
  103.       }    
  104.     });    
  105.     window.update();    
  106.     window.showAtLocation(parent, Gravity.CENTER_HORIZONTAL | Gravity.TOP,    
  107.         0, (int) getResources().getDimension(R.dimen.pop_layout_y));    
  108.   
  109.   }    
  110.   
  111.   OnItemClickListener listClickListener = new OnItemClickListener() {    
  112.     @Override    
  113.     public void onItemClick(AdapterView<?> parent, View view, int position,    
  114.         long id) {    
  115.       Map<String, Object> map=(Map<String, Object>) parent.getItemAtPosition(position);    
  116.       Toast.makeText(mContext,map.get(KEY)+"", Toast.LENGTH_SHORT).show();    
  117.       if (window != null) {    
  118.         window.dismiss();    
  119.       }    
  120.     }    
  121.   };    
  122.   
  123.   public ArrayList<Map<String, Object>> CreateData() {    
  124.     Map<String, Object> map;    
  125.     map = new HashMap<String, Object>();    
  126.     map.put(KEY, "锅包肉");    
  127.     items.add(map);    
  128.     map = new HashMap<String, Object>();    
  129.     map.put(KEY, "一品酱骨");    
  130.     items.add(map);    
  131.     map = new HashMap<String, Object>();    
  132.     map.put(KEY, "香辣小河虾");    
  133.     items.add(map);    
  134.     map = new HashMap<String, Object>();    
  135.     map.put(KEY, "川白肉");    
  136.     items.add(map);    
  137.     map = new HashMap<String, Object>();    
  138.     map.put(KEY, "莼菜汤");    
  139.     items.add(map);    
  140.   
  141.     return items;    
  142.   }    
  143. }   

 

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/example/74.html
2012年6月13日
发布:鸡啄米 分类:Android开发实例 浏览: 评论:2