Android中一些小的知识点

来源:互联网 发布:msp430单片机价格 编辑:程序博客网 时间:2024/06/05 20:37

这篇博文是专门用来记录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.关于设置边距的问题

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首页的滑动冲突。