android 小方法

小方法

1.获取屏幕分辨率:

 1 public class BaseTools {
 2 
 3     public static int getWindowWidth(Context context) {
 4         // 获取屏幕分辨率
 5         WindowManager wm = (WindowManager) (context
 6                 .getSystemService(Context.WINDOW_SERVICE));
 7         DisplayMetrics dm = new DisplayMetrics();
 8         wm.getDefaultDisplay().getMetrics(dm);
 9         int mScreenWidth = dm.widthPixels;
10         return mScreenWidth;
11     }
12 
13     public static int getWindowHeigh(Context context) {
14         // 获取屏幕分辨率
15         WindowManager wm = (WindowManager) (context
16                 .getSystemService(Context.WINDOW_SERVICE));
17         DisplayMetrics dm = new DisplayMetrics();
18         wm.getDefaultDisplay().getMetrics(dm);
19         int mScreenHeigh = dm.heightPixels;
20         return mScreenHeigh;
21     }
22 }

2.android:用getIdentifier()获取资源Id

项目中一问题,从获取图片名称后,然后调用图片。直接用R.drawable.?无法调用。解决:

主要由两种方法,个人建议第二种。 
1). 不把图片放在res/drawable下,而是存放在src某个package中(如:com.drawable.resource),这种情况下的调用方法为: 

1 String path = "com/drawable/resource/imageName.png"; 
2 InputStream is = getClassLoader().getResourceAsStream(path); 
3 Drawable.createFromStream(is, "src"); 

2). 如果还是希望直接使用res/drawable中的图片,就需要通过下面的方法了: 
假设创建工程的时候,填写的package名字为:com.test.image 

1 int resID = getResources().getIdentifier("imageName", "drawable", "com.test.image"); 
2 Drawable image = getResources().getDrawable(resID);

 3.动态获取id的方法二之反射

Field field = R.drawable.class.getField(type);
int i = field.getint(new R.drawable());  //获取R.drawable换称呼null

例子:

 1 for(int i = 0; i < 107; i++){
 2             try {
 3                 if(i<10){
 4                     Field field = R.drawable.class.getDeclaredField("f00" + i);
 5                     int resourceId = Integer.parseInt(field.get(null).toString());
 6                     imageIds[i] = resourceId;
 7                 }else if(i<100){
 8                     Field field = R.drawable.class.getDeclaredField("f0" + i);
 9                     int resourceId = Integer.parseInt(field.get(null).toString());
10                     imageIds[i] = resourceId;
11                 }else{
12                     Field field = R.drawable.class.getDeclaredField("f" + i);
13                     int resourceId = Integer.parseInt(field.get(null).toString());
14                     imageIds[i] = resourceId;
15                 }
16             } catch (NumberFormatException e) {
17                 e.printStackTrace();
18             } catch (SecurityException e) {
19                 e.printStackTrace();
20             } catch (IllegalArgumentException e) {
21                 e.printStackTrace();
22             } catch (NoSuchFieldException e) {
23                 e.printStackTrace();
24             } catch (IllegalAccessException e) {
25                 e.printStackTrace();
26             }
27             Map<String,Object> listItem = new HashMap<String,Object>();
28             listItem.put("image", imageIds[i]);
29             listItems.add(listItem);
30         }

 4.再按一次退出系统:

 1 long waitTime = 2000;  
 2 long touchTime = 0;  
 3   
 4 @Override  
 5 public boolean onKeyDown(int keyCode, KeyEvent event) {  
 6     if(event.getAction() == KeyEvent.ACTION_DOWN && KeyEvent.KEYCODE_BACK == keyCode) {  
 7         long currentTime = System.currentTimeMillis();  
 8         if((currentTime-touchTime)>=waitTime) {  
 9             Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();  
10             touchTime = currentTime;  
11         }else {  
12             finish();  
13         }  
14         return true;  
15     }  
16     return super.onKeyDown(keyCode, event);  
17 }  

 5.在Action_Move事件中滑动的时候禁止Action_Down事件:

MotionEvent cancelEvent = MotionEvent.obtain(event);
            cancelEvent
                    .setAction(MotionEvent.ACTION_CANCEL
                            | (event.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
            onTouchEvent(cancelEvent);

 6.在listView中tem 内如果有button等控件时,在监听listview的onitemclick事件时,焦点会被item内的button、imagebutton等控 件抢走,从而导致在listview设置了onitemclick事件后不会被触发。

解决方法是在初始化item的时候屏蔽掉其内部button等控件的 焦点获取,具体方法可以在自定义item的根控件中调用:

 

1 setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);   

 7.在ListView中的使用addHeadView(View view)的时候,如果添加的View是ViewPager的话,ViewPager的左右滑动事件会和ListView滑动事件相冲突,这里就涉及到事件分发的原理了,下面给出一点解决这个问题的代码:

  1)自定义一个ListView结合GestureDetector,再在自定义ListView的事件拦截函数onInterceptTouchEvent(MotionEvent ev),的返回值进行拦截

  

 1 public class MyListView extends ListView {
 2 
 3     private GestureDetector mGestureDetector;
 4 
 5     private OnTouchListener mGestureListener;
 6 
 7     private ViewPager viewPager;
 8 
 9     private Context context;
10 
11     public MyListView(Context context) {
12         super(context);
13         this.context = context;
14     }
15 
16     public void setViewPager(ViewPager viewPager) {
17         this.viewPager = viewPager;
18     }
19 
20     public MyListView(Context context, AttributeSet attrs) {
21         super(context, attrs);
22         this.context = context;
23         mGestureDetector = new GestureDetector(new YScrollDetector());
24         setFadingEdgeLength(0);
25 
26     }
27 
28     public MyListView(Context context, AttributeSet attrs, int defStyle) {
29         super(context, attrs, defStyle);
30     }
31 
32     @Override
33     public boolean onInterceptTouchEvent(MotionEvent ev) {
34         super.onInterceptTouchEvent(ev);
35         return mGestureDetector.onTouchEvent(ev);
36     }
37 
38     private class YScrollDetector extends SimpleOnGestureListener {
39         @Override
40         public boolean onScroll(MotionEvent e1, MotionEvent e2,
41                 float distanceX, float distanceY) {
42             if (Math.abs(distanceY) >= Math.abs(distanceX)) {
43                 System.out.println("主要是上下滑动");
44                 return true;
45             }
46             return false;
47         }
48 
49         @Override
50         public boolean onSingleTapUp(MotionEvent e) {
51             Toast.makeText(context, "图" + viewPager.getCurrentItem(), 1).show();
52             return super.onSingleTapUp(e);
53         }
54     }
55 
56 }

 8.查看root后的手机的,所连接的wifi密码

 

 9.my note lianghardstudy@163.com  d*********

 

 

 

posted @ 2014-06-30 16:36  perfect亮  阅读(329)  评论(0编辑  收藏  举报