工作系列 17:Android开发一些小技巧

Published: 28 Jun 2017 Category: 工作

1. 如何扩大一个按钮的可点击范围:

<ImageView
      android:layout_width="50dp"
      android:layout_height="50dp"
      android:src="@drawable/..." 
      android:scaleType="centerInside"/>

看起来很小的一个图标,如何让用户比较容易点选上;注意几个小技巧即可:

    1. 设置scaleType为centerInside;
    1. 设置点击ImageView背景为src;
    1. 设置一个Padding 这样多出来的 Padding就是用户看不到的增量 可点击区域

2. 如何避免Android蛋疼的连续点击事件响应

public abstract class NoDoubleClickListener implements OnClickListener {

		//这里设置不能超过多长时间
		public static final int MIN_CLICK_DELAY_TIME = 1000;
		
		private long lastClickTime = 0;
		
		protected abstract void onNoDoubleClick(View v);
		
		@Override
		public void onClick(View v) {
			long currentTime = Calendar.getInstance().getTimeInMillis();
			if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
				lastClickTime = currentTime;
				onNoDoubleClick(v);
			} 
		}   
	}

以后的Listener就实现这个就可以了

3. Databinding的一个小坑

场景: 我在使用Databinding动态更新绑定控件一个属性时,我们都知道简单的这种用法:

/**
 * 描述:学生对象, @Bindable注解是为了能在BR里面找到这个属性     notifyPropertyChanged();  这个方法是当调用的时候,会通知绑定的控件去改变值
 */
public class Student extends BaseObservable {

    @Bindable
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(com.example.junwen.databinding.BR.name);
    }
}

但是如果稍微有点小改动如下:

/**
 * 描述:学生对象, @Bindable注解是为了能在BR里面找到这个属性     notifyPropertyChanged();  这个方法是当调用的时候,会通知绑定的控件去改变值
 */
public class Student extends BaseObservable {

    private String student_name;

	 @Bindable
    public String getStudentName() {
        return name;
    }

    public void setName(String name) {
        this.student_name = name;
        notifyPropertyChanged(BR.name);
    }
}

Student这个Model如果绑定xml后,我们在调用时,

model.student_name 或 model.studentName

只有后者能达到目的

4. RecycleView网格布局如何设置行间距

这个地址已经写的很仔细了https://my.oschina.net/yaly/blog/515412

5. 点击Back键,系统返回到桌面,然后点击应用程序图标,直接回到之前的Activity界面,这种效果(如Home键的效果)是怎么实现的呢?

通过重写按下Back键的回调函数,转成Home键的效果即可

@Override
public void onBackPressed() {
  Intent home = new Intent(Intent.ACTION_MAIN);
  home.addCategory(Intent.CATEGORY_HOME);
  startActivity(home);
}

6. 常用手机调试应用时,会出现类似错误:”Installation failed with message:INSTALL_CANCELED_BY_USER”

其实是小米手机的一个坑,把截图的USB调试下方的这个箭头标示的开关打开就可以了

7. 关于include的一个疑问

使用include时,需要注意2点:

    1. 如果include标签加了id,一切以这个id为准,复用的Layout的id被覆盖无效
    1. include标签上也可以重新设置宽高,复用Layout的宽高设置同样会被覆盖

8. 如何抓取Android LOG

  • android 抓取log 的方法:
  • unix-like 系统:

      adb shell logcat -v time thread | tee ./log.log
    	
    
  • win 系统:

      adb shell logcat -v time thread > log.log
    	
    

    命令敲上之后,进行复现,复现完成之后,停止命令,然后把对应的 log.log 发过来。

9. 如何提升Android Studio编译速度

http://blog.csdn.net/zivensonice/article/details/51794719#t3

10. 编译出现 app:packageDebug’. > !zip.isFile() 的解决办法

http://blog.csdn.net/a976112643/article/details/76325943

11. 开发过程中的一些坑

http://zzimoo.com/android4/

12.