1.某个控件要放在Linearlayout布局的底部(底部导航条)
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
...>
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="0dp"
android:Layout_weight="2">
...//嵌套的其余布局……
</LinearLayout>
...//嵌套的其余布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
</LinearLayout>
简单说明一下,上面的代码中有一个Linearlayout,里面嵌套了两个Linearlayout
这里的关键是嵌套里面的第一个Linearlayout布局,注意这个布局里面的这两行属性代码
`android:layout_height="0dp"`
`android:Layout_weight="2"`
第二个Linearlayout就是能够放在底部的一个Linearlayout(固然你能够写你本身的布局)
2.RecyclerView显示图片卡顿优化
思路:图片太多,显示卡顿的缘由主要是由于在RecyclerView滑动的过程当中同时加载网络的图片,因此卡顿。
咱们实现滑动的时候不加载网络图片,当不滑动的时候再加载网络图片,这样流畅度就能够提升许多
在RecyclerView的Adapter(本身写的)中添加一个判断RecyclerView是否滑动的boolean变量isScrolling
protected boolean isScrolling = false;
public void setScrolling(boolean scrolling) {
isScrolling = scrolling;
}
以后在Adapter里面的onBindViewHolder方法控制加载图片
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String url = mlist.get(position).getImg().getUrl();
if (!isScrolling){
//我使用的是Ion显示图片框架
//若是不在滑动,则加载网络图片
Ion.with(holder.imageView.getContext())
.load(url)
.withBitmap()
.placeholder(R.drawable.grey)
.intoImageView(holder.imageView);
}else {
//若是在滑动,就先加载本地的资源图片
Drawable temp = holder.imageView.getResources().getDrawable(R.drawable.grey, null);
holder.imageView.setImageDrawable(temp);
}
}
在相应的Activity中调用RecyclerView的addOnScrollListener方法,设置一个滑动监听器
mRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 滚动静止时才加载图片资源,极大提高流畅度
adapter.setScrolling(false);
adapter.notifyDataSetChanged(); // notify调用后onBindViewHolder会响应调用
} else{
adapter.setScrolling(true);
}
super.onScrollStateChanged(recyclerView, newState);
}
});
3.ScrollView与RecyclerView滑动冲突
这里使用NestedScrollView便可,而后设置RecyclerView的NestedScrollingEnabled属性为false
两种方法设置RecyclerView的NestedScrollingEnabled属性
- 调用`RecyclerView`的`setNestedScrollingEnabled`方法
- 在xml文件里面,把`RecyclerView`直接设置为`flase`
判断ScrollView是否滑动到底部
给ScrollView添加一个滑动监听器,而后进行相关处理
mNestedsv.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener(www.michenggw.com) {
@Override
public void onScrollChange(www.mingcheng178.com NestedScrollView v, int scrollX,www.trgj888.com int scrollY, int oldScrollX, int oldScrollY) {
View view = mNestedsv.getChildAt(0);
if (mNestedsv.getHeight(www.yongshiyule178.com )+mNestedsv.getScrollY() ==view.getHeight()){
//相关提示
//相关操做
//下拉刷新,数据更新操做
//...
}
}
});
4.使用okhttp返回数据相同解决方法
看了资料,好像是respone.body().string()只能调用一次,还有okhttp是有缓存的
使用的情景:有一个API接口,每次访问改接口,都会返回不一样的json数据,可是使用okhttp,每次访问该API返回的数据都是相同
个人解决方法:
给API请求时添加参数,有些API是能够带参数的,能够修改参数,达到是不一样网址的效果
5.RecyclerView数据更新
调用Adapter的notifyDataSetChanged方法便可android