1.某個控制項要放在Linearlayout佈局的底部(底部導航條) ...//嵌套的其他佈局…… ...//嵌套的其他佈局 簡單說明一下,上面的代碼中有一個Linearlayout,裡面嵌套了兩個Linearlayout 這裡的關鍵是嵌套裡面的第一個 佈局,註意這個佈局裡面的這兩行屬性代碼 第二個L ...
1.某個控制項要放在Linearlayout佈局的底部(底部導航條)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
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() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
View view = mNestedsv.getChildAt(0);
if (mNestedsv.getHeight()+mNestedsv.getScrollY() ==view.getHeight()){
//相關提示
//相關操作
//下拉刷新,數據更新操作
//...
}
}
});
4.使用okhttp返回數據相同解決方法
看了資料,好像是respone.body().string()
只能調用一次,還有okhttp是有緩存的
使用的情景:有一個API介面,每次訪問改介面,都會返回不同的json數據,但是使用okhttp,每次訪問該API返回的數據都是相同
我的解決方法:
給API請求時添加參數,有些API是可以帶參數的,可以修改參數,達到是不同網址的效果
5.RecyclerView數據更新
調用Adapter
的notifyDataSetChanged
方法即可
使用需要註意的是,List必須是同一個對象,調用List.addAll方法即可把另外一個同類List裡面的全部數據存放進去