您的位置:首页 > 移动开发 > Android开发

Android中一些小的知识点

2017-10-23 22:34 337 查看

这篇博文是专门用来记录Android中哪些不常使用到的小知识

1.设置ListView的EmptyView,ListView设置EmptyView,当ListView没有数据时就会显示这个布局

2.SystemClock.sleep(2000) 睡眠一秒,这个方法是不会抛出异常的

3.实时监听EditText的字符输入 editText.addTextChangeListener()

4.ListView中设置分割线

<ListView
android:layout_width="match_parent"
android:layout_height="200dp"
<!-- 在这里面如果你设置divider而不设置dividerHeight的话,是无法显示分割线的 -->
android:divider="@android:color/darker_gray"
android:dividerHeight="2dp">

</ListView>


5.compile ‘com.jakewharton:butterknife:6.1.0’

6.如果使Activity单独占用一个任务栈,设置Activity的启动模式为SingleTask

7.设置某个Activity的excludeFromRecents:是否从最新列表中移除Activity所在的应用, 只有设置这个属性的Activity执行了,这个属性才会生效

8.内容观察者

//当数据库发生变化时通知
//注册内容观察者观察更新通知消息、
Uri uri = Uri.parse("content://com.itheima.mobliesafe95.UPDATESQLITE");
//notifyForDescendents : 匹配模式,true:精确匹配,false:模糊匹配
getContentResolver().registerContentObserver(uri, true, new ContentObserver(null) {
//当数据库中的数据更新的时候调用的方法
public void onChange(boolean selfChange) {
list.clear();
list = appLockDao.queryAll();
};
});

//当数据删除成功的时候,发送一个数据更新的消息,告诉内存观察者,这样内容观察者就可以观察到数据的变化,实现更新数据库操作
ContentResolver contentResolver = mContext.getContentResolver();
Uri uri = Uri.parse("content://com.itheima.mobliesafe95.UPDATESQLITE");
//uri : uri地址
//observer : 通知哪个内容观察者,如果是null,表示通知所有通过uri地址注册内容观察者
contentResolver.notifyChange(uri, null);//通知内容观察者数据发生变化了


9.图片截取

如果想要将图片的右半部分截取出来可以使用matrix.postTranslate(-width,0)  向左平移图片的一半,也就是将画布移动,而不是移动图片


10.两个集合对象指向一个集合,一个集合在遍历时,可以使用另一个集合删除其中的数据,间接的实现了边遍历边删除,但是不能使用增强for循环,那样会报错

11.Android系统中控件绘制显示流程一般为三个步骤:1:测量宽高, 2:设置显示位置,3:绘制显示操作 只有经过了这三个步骤控件才会显示在界面上。

12.关于设置边距的问题

4000

public class PullToRefreshListView extends ListView {
private TextView tvState;
private ProgressBar progressBar;
private ImageView ivImage;
int i = 0;
private View mHeaderView;

public PullToRefreshListView(Context context) {
this(context, null);
}

public PullToRefreshListView(Context context, AttributeSet attrs) {
this(context, attrs, -1);
}

public PullToRefreshListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setHeaderView();
}

private void setHeaderView() {
mHeaderView = View.inflate(getContext(), R.layout.header_view, null);
//        this.addHeaderView(mHeaderView);
tvState = (TextView) mHeaderView.findViewById(R.id.textView);
progressBar = (ProgressBar) mHeaderView.findViewById(R.id.progressBar);
ivImage = (ImageView) mHeaderView.findViewById(R.id.imageView);
mHeaderView.measure(0, 0);
mHeaderView.setPadding(0, -mHeaderView.getMeasuredHeight(), 0, 0);// 1
this.setPadding(0, 100, 0, 0); //  2
}
}


上面代码中有两个setpadding,但其意义却不相同

1:代表的是该HeaderView在ListView中的相对于ListView来说的间距。

2:代表的是ListView中内容相对于ListView的间距。

13 . 如果ListView设置了头布局和脚布局都算是一个内容项会算进 count数

14 : requestDisallowInterceptTouchEvent(true) 请求父类不拦截本View触摸事件,后期通过视频得知, down事件是无法被拦截的,只能被消费。后通过实践得知确实可行,这个特性解决了SlidingMenu与ViewPager首页的滑动冲突。

15.服务器端在返回List集合时,最好先使用Json工具转换为json字符串之后再返回 String s = JsonUtils.objectToJson(notificationList);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android