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*********