From de25db063543be5b7f498acc06dec1523f083974 Mon Sep 17 00:00:00 2001 From: mwang <8205347@qq.com> Date: Fri, 26 Apr 2019 00:31:07 +0800 Subject: [PATCH] =?UTF-8?q?fix=20bugs=20=E4=B9=A6=E6=9E=B6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zhuike/src/main/assets/litepal.xml | 2 +- .../com/novelbook/android/BookActivity.java | 2 +- .../android/Fragments/BasicFragment.java | 7 + .../android/Fragments/CatalogFragment.java | 8 +- .../android/Fragments/Fragment_Shelf.java | 93 +++++++++++-- .../android/Fragments/Fragment_booklist.java | 6 +- .../android/Fragments/Fragment_paihang.java | 4 +- .../com/novelbook/android/Main2Activity.java | 11 +- .../com/novelbook/android/ReadActivity.java | 63 ++++----- .../android/adapter/BookListAdapter.java | 15 +++ .../android/adapter/MyViewHolder.java | 7 + .../java/com/novelbook/android/db/Novel.java | 18 +++ .../com/novelbook/android/netapi/HttpApi.java | 2 +- .../com/novelbook/android/utils/BookUtil.java | 11 +- .../novelbook/android/utils/CommonUtil.java | 127 ++++++++++-------- .../novelbook/android/utils/Constants.java | 2 + .../novelbook/android/utils/PageFactory.java | 23 ++-- .../main/res/drawable/ic_book_update_flag.png | Bin 0 -> 780 bytes zhuike/src/main/res/drawable/sc_top_one.png | Bin 0 -> 605 bytes zhuike/src/main/res/drawable/sc_top_three.png | Bin 0 -> 672 bytes zhuike/src/main/res/drawable/sc_top_two.png | Bin 0 -> 677 bytes .../main/res/drawable/selector_slide_view.xml | 6 + zhuike/src/main/res/drawable/slide_block.png | Bin 0 -> 1035 bytes .../main/res/drawable/slide_block_click.png | Bin 0 -> 975 bytes .../res/layout/fragment_fragment__shelf.xml | 9 +- .../res/layout/fragment_fragment_booklist.xml | 5 +- .../src/main/res/layout/recycle_list_item.xml | 21 ++- .../res/layout/recycle_list_item_horizon.xml | 12 +- zhuike/src/main/res/layout/zactivity_read.xml | 16 ++- .../main/res/mipmap-hdpi/bs_lmenu_clear.png | Bin 0 -> 699 bytes zhuike/src/main/res/mipmap-xxhdpi/lm_foot.png | Bin 0 -> 1241 bytes zhuike/src/main/res/values/styles.xml | 13 ++ 32 files changed, 347 insertions(+), 136 deletions(-) create mode 100644 zhuike/src/main/res/drawable/ic_book_update_flag.png create mode 100644 zhuike/src/main/res/drawable/sc_top_one.png create mode 100644 zhuike/src/main/res/drawable/sc_top_three.png create mode 100644 zhuike/src/main/res/drawable/sc_top_two.png create mode 100644 zhuike/src/main/res/drawable/selector_slide_view.xml create mode 100644 zhuike/src/main/res/drawable/slide_block.png create mode 100644 zhuike/src/main/res/drawable/slide_block_click.png create mode 100644 zhuike/src/main/res/mipmap-hdpi/bs_lmenu_clear.png create mode 100644 zhuike/src/main/res/mipmap-xxhdpi/lm_foot.png diff --git a/zhuike/src/main/assets/litepal.xml b/zhuike/src/main/assets/litepal.xml index 134df54..bb94275 100644 --- a/zhuike/src/main/assets/litepal.xml +++ b/zhuike/src/main/assets/litepal.xml @@ -2,7 +2,7 @@ - + diff --git a/zhuike/src/main/java/com/novelbook/android/BookActivity.java b/zhuike/src/main/java/com/novelbook/android/BookActivity.java index afb5626..1fd7624 100644 --- a/zhuike/src/main/java/com/novelbook/android/BookActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/BookActivity.java @@ -521,7 +521,7 @@ public class BookActivity extends Activity_base { boolean isLocalDbExist = LitePal.isExist(Novel.class, "novelId=?", novelId+""); - + showProgressDialog(false,"正在加载..."); BookSubscribe.getNovel(novelId, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { @Override public void onSuccess(String result) { diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java index 69401b7..db6f7f0 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java @@ -49,6 +49,7 @@ import com.novelbook.android.netsubscribe.BookSubscribe; import com.novelbook.android.netutils.NetUtil; import com.novelbook.android.netutils.OnSuccessAndFaultListener; import com.novelbook.android.netutils.OnSuccessAndFaultSub; +import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.ImageUtil; import com.novelbook.android.utils.MyImageLoader; import com.novelbook.android.utils.OnItemClickListener; @@ -244,6 +245,12 @@ public abstract class BasicFragment extends Fragment { } void showProgressDialog(boolean flag,String msg){ + if(!Constants.showDialogOnUi){ + return; + } + if(pageNo >1 && !Constants.showDialogOnUiPage){ + return; + } if(getActivity()==null){ return; } diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java index 812c27a..69e35c8 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java @@ -63,6 +63,7 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc } } boolean isAsc = true; + boolean isFirstLoad = true; @Override protected void fillData() { catalogueList.clear(); @@ -83,8 +84,9 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc catalogueAdapter.notifyDataSetChanged(); int count= lv_catalogue.getCount(); - if(count >=pageFactory.getCurrentChapter() ){ + if(count >=pageFactory.getCurrentChapter()&& isFirstLoad){ lv_catalogue.setSelection(currentChp); + isFirstLoad =false; } /* tvTitle.setText(pageFactory.getBookName()); @@ -150,7 +152,7 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc } int slepttime = 0; - while (NetUtil.isNetworkConnected() &&( slepttime < 1000 && ( pageFactory.isReadingCatalogs() || pageFactory.getChapters().size() == 0))) { + while (NetUtil.isNetworkConnected() &&( slepttime < 100 && ( pageFactory.isReadingCatalogs() || pageFactory.getChapters().size() == 0))) { try { Log.d(TAG, String .format("prepare book: to open book cate to sleep %s" , 50)); sleep(50); @@ -206,7 +208,9 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc @Override protected void initViews() { + lv_catalogue.setFastScrollEnabled(true); + //lv_catalogue.setFastScrollStyle(R.style.FastScrollTheme); //不起作用 } @Override diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java index aec70be..266c670 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java @@ -11,6 +11,7 @@ import android.support.design.widget.BottomSheetDialog; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -26,11 +27,17 @@ import com.novelbook.android.R; import com.novelbook.android.db.Novel; import com.novelbook.android.filechooser.FileChooserActivity; +import com.novelbook.android.netsubscribe.BookSubscribe; import com.novelbook.android.netutils.NetUtil; +import com.novelbook.android.netutils.OnSuccessAndFaultListener; +import com.novelbook.android.netutils.OnSuccessAndFaultSub; +import com.novelbook.android.utils.Constants; +import com.novelbook.android.utils.GsonUtil; import com.novelbook.android.utils.MyImageLoader; import com.novelbook.android.utils.OnItemClickListener; import com.novelbook.android.adapter.BookListAdapter; +import org.json.JSONObject; import org.litepal.LitePal; import java.io.File; @@ -57,7 +64,7 @@ public class Fragment_Shelf extends BasicFragment { RecyclerView mRecyclerView; // private List mDatas; private BookListAdapter mAdapter; - + List lstUpdate = new ArrayList(); private List bookLists; // private ShelfAdapter adapter; @@ -74,7 +81,9 @@ public class Fragment_Shelf extends BasicFragment { return fragment; } - + private void loadNovelsOnShelf(){ + bookLists = Novel.getNovelsOnShelf(); + } @Override @@ -82,6 +91,48 @@ public class Fragment_Shelf extends BasicFragment { return R.layout.fragment_fragment__shelf; } + /** + * to get updated info from server + */ + private void getUpdatedData(){ + List novelIds; + OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() { + @Override + public void onSuccess(String result) { + + // mFirstPage= gson.fromJson(result, FirstPage.class); + try { + + lstUpdate = GsonUtil. parserJsonArray(result, Constants.BLOCK_TITLE_NOVELS); + if(lstUpdate.size()>0) { + for (Novel novel2 : lstUpdate) { + novel2.save();//更新本地信息 + } + + loadNovelsOnShelf(); + + } + + + } catch (Exception e) { + e.printStackTrace(); + } + handler.sendEmptyMessage(1); + + } + + @Override + public void onFault(String errorMsg) { + //失败 + Log.d(TAG, "error on get firstpage: " + errorMsg); + handler.sendEmptyMessage(1); + } + }; + + // BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1, tab3Pos+1, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); + + } + @Override public void initData() { @@ -89,9 +140,15 @@ public class Fragment_Shelf extends BasicFragment { // mDatas = initData(mDatas,'X'); // bookLists = LitePal.where("isOnShelf=? or novelId=? ","1","").find(Novel.class); - bookLists = Novel.getNovelsOnShelf(); + loadNovelsOnShelf(); + getUpdatedData(); flag = new boolean[bookLists.size()]; + if(bookLists.size()>0) { //TODO: to remove + bookLists.get(0).setUpdated(true); + // bookLists.get(bookLists.size()-1).setUpdated(true); + } + mAdapter = new BookListAdapter(activity,bookLists,R.layout.recycle_list_item,new OnItemClickListener() { @@ -134,10 +191,20 @@ public class Fragment_Shelf extends BasicFragment { } @Override protected void fillData() { + + if(bookLists.size()==0){ + // return; + } + + + + + mAdapter.setData(bookLists); + // mAdapter.notifyDataSetChanged(); } public void initReceyleView() { - initData(); + // initData(); // mRecyclerView.setLayoutManager(new LinearLayoutManager(this.activity)); mRecyclerView.setLayoutManager(new GridLayoutManager(activity,3)); mRecyclerView.setAdapter(mAdapter ); @@ -238,13 +305,17 @@ public class Fragment_Shelf extends BasicFragment { Novel nv = bookLists.get(i); if(nv.isLocalBook()) { + nv.delete(); + //TODO: remove cache on a new thread //Fileutil.deleteDir(file) }else{ - nv.setOnShelf(false); - nv.save(); - // nv.update(nv.getId()); //not work,,,If you set a default value to a field, the corresponding column won't be updated. + Log.d(TAG, "shelfZhengliSubmit: to delete novel " + nv.getName()); + nv.setToDefault("isOnShelf"); + //nv.setOnShelf(false); + nv.update(nv.getId()); + // nv.update(nv.getId()); //not work,,,If you set a default value to a field, the corresponding column won't be updated. } // flag = new boolean[bookLists.size()]; @@ -389,12 +460,15 @@ public class Fragment_Shelf extends BasicFragment { // 如果设置了回调,则设置点击事件 if (mOnItemClickListener != null) { + holder.checkBox.setOnCheckedChangeListener(null);//先设置一次CheckBox的选中监听器,传入参数null + holder.checkBox.setChecked(flag[position]);//用数组中的值设置CheckBox的选中状态 + holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + holder.checkBox.setChecked( !holder.checkBox.isChecked()); } }); @@ -407,8 +481,7 @@ public class Fragment_Shelf extends BasicFragment { } }); - holder.checkBox.setOnCheckedChangeListener(null);//先设置一次CheckBox的选中监听器,传入参数null - holder.checkBox.setChecked(flag[position]);//用数组中的值设置CheckBox的选中状态 + //再设置一次CheckBox的选中监听器,当CheckBox的选中状态发生改变时,把改变后的状态储存在数组中 holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java index 5fd903b..7168d2d 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java @@ -200,7 +200,7 @@ public class Fragment_booklist extends BasicFragment { mMoreData = GsonUtil. parserJsonArray(jsonObject,Constants.BLOCK_TITLE_NOVELS); } catch (Exception e) { - e.printStackTrace(); + e.printStackTrace(); Log.e(TAG, "onSuccess: 解析失败",e ); } handler.sendEmptyMessage(1); @@ -214,7 +214,7 @@ public class Fragment_booklist extends BasicFragment { } }; - + showProgressDialog(false,"正在加载..."); Log.d(TAG,String.format("fn is %s",fn) ); @@ -229,9 +229,11 @@ public class Fragment_booklist extends BasicFragment { String resultstr = jsonObject.getString("rank") ; pageCount = jsonObject.getJSONObject("rank").getInt("pageCount"); mMoreData = GsonUtil. parserJsonArray(resultstr,Constants.BLOCK_TITLE_NOVELS); + Log.d(TAG, "排行榜详细 onSuccess: pageCount " + pageCount); } catch (Exception e) { e.printStackTrace(); + Log.e(TAG, "onSuccess: 解析失败",e ); } handler.sendEmptyMessage(1); diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java index 6ed82c6..b34f057 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java @@ -212,7 +212,7 @@ final String TAG = Fragment_paihang.class.getSimpleName(); handler.sendEmptyMessage(1); } }; - + showProgressDialog(false,"正在加载..."); BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1, tab3Pos+1, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); @@ -226,7 +226,7 @@ final String TAG = Fragment_paihang.class.getSimpleName(); else { initTabs(); } - //showProgressDialog(false,"加载。。。。"); + showProgressDialog(false,"正在加载..."); new Thread(){ @Override public void run() { diff --git a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java index 68ab82f..1021ab3 100644 --- a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java +++ b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java @@ -140,6 +140,8 @@ public class Main2Activity extends Activity_base // toolbar= (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); + getSupportActionBar().setHomeButtonEnabled(false); + getSupportActionBar().setDisplayHomeAsUpEnabled(false); // toolbar.setNavigationIcon(R.mipmap.ic_launcher_round);//设置导航栏图标 // toolbar.setLogo(R.mipmap.ic_launcher);//设置app logo // toolbar.setTitle("Title");//设置主标题 @@ -310,8 +312,9 @@ private int bottomSelectedIndex; boolean showTitle = bottomSelectedIndex !=1; String title = bottomSelectedIndex==0?"我的书架":"排行榜"; // txtTitle.setVisibility(View.GONE); - // toggle.setDrawerIndicatorEnabled(showToggle); - // toggle.syncState(); + toggle.setDrawerIndicatorEnabled(showToggle); + toggle.syncState(); + //spinner.setVisibility( showSpinner?View.VISIBLE:View.GONE); rgSex.setVisibility( showSpinner?View.VISIBLE:View.GONE); @@ -486,10 +489,14 @@ private int bottomSelectedIndex; swithToolbarItems(); botoomNavigation.setVisibility(View.VISIBLE); fragment_shelf.initReceyleView(); + toggle.setDrawerIndicatorEnabled(true); + toggle.syncState(); }else { toggle.setDrawerIndicatorEnabled(false); + toggle.syncState(); + supportInvalidateOptionsMenu(); isShelfZhengli = true; botoomNavigation.setVisibility(View.GONE); diff --git a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java index 1d36903..867bc45 100644 --- a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java @@ -662,36 +662,7 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis // return bookpage; // } - /** - * 隐藏菜单。沉浸式阅读 - */ - public void hideSystemUI() { - // Set the IMMERSIVE flag. - // Set the content to appear under the system bars so that the content - // doesn't resize when the system bars hide and show. - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar - | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - ); - getWindow().setNavigationBarColor(getResources().getColor(R.color.read_dialog_bg)); - pageFactory.setBusy(false); - } - - private void showSystemUI() { - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - // | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar - ); - pageFactory.setBusy(true); - } //显示书本进度 public void showProgressBar(float progress){ @@ -751,15 +722,45 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_enter); Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_top_enter); - rl_bottom.startAnimation(topAnim); - appbar.startAnimation(topAnim); + rl_bottom.startAnimation(topAnim); + appbar.startAnimation(topAnim); // ll_top.startAnimation(topAnim);// ll_top.setVisibility(View.VISIBLE); rl_bottom.setVisibility(View.VISIBLE); appbar.setVisibility(View.VISIBLE); } } + /** + * 隐藏菜单。沉浸式阅读 + */ + public void hideSystemUI() { + // Set the IMMERSIVE flag. + // Set the content to appear under the system bars so that the content + // doesn't resize when the system bars hide and show. + getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar + | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + // | View.SYSTEM_UI_FLAG_IMMERSIVE + ); + getWindow().setNavigationBarColor(getResources().getColor(R.color.read_dialog_bg)); + pageFactory.setBusy(false); + } + + private void showSystemUI() { + getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + // | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + // | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar + ); + pageFactory.setBusy(true); + } private void hideReadSetting() { isShow = false; Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_exit); diff --git a/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java b/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java index 6b56f49..12eb1a6 100644 --- a/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java +++ b/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java @@ -36,6 +36,7 @@ public class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol // private MyImageLoader loader = new MyImageLoader(); private Context context; private List mDatas ; + private OnItemClickListener mOnItemClickListener; private int listItemID; //private List mBooks; @@ -193,8 +194,16 @@ public class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol if (holder.tvAuthor != null) holder.tvAuthor.setText(mDatas.get(position).getAuthor()); if (holder.tvCate != null) holder.tvCate.setText(mDatas.get(position).getNovelType()); if (holder.tvDesc != null) holder.tvDesc.setText(mDatas.get(position).getDesc()); + if (holder.tvStatus != null) holder.tvStatus.setText(mDatas.get(position).getProgress()); if (holder.imageView != null && !TextUtils.isEmpty(mDatas.get(position).getCover())) { ImageUtil.loadImage(context, mDatas.get(position).getCover(), holder.imageView); + } if (holder.imageUpdate != null) { + if( mDatas.get(position).isUpdated()){ + holder.imageUpdate.setVisibility(View.VISIBLE); + }else{ + holder.imageUpdate.setVisibility(View.GONE); + } + } if (holder.tvNum != null) holder.tvNum.setText("999"); // 如果设置了回调,则设置点击事件 @@ -234,6 +243,12 @@ public class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol notifyItemRemoved(position); } + //to set booklist updated, used in shelf + public void setUpdate(List lstUpdate) { + + + } + public class FooterViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.pbLoad) ProgressBar mPbLoad; diff --git a/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java b/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java index 0a263e0..7a951dd 100644 --- a/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java +++ b/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java @@ -14,6 +14,9 @@ import butterknife.ButterKnife; public class MyViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.imageView) ImageView imageView; + @BindView(R.id.imageUpdated) + @Nullable + ImageView imageUpdate; @BindView(R.id.title) TextView tvTitle; @Nullable @@ -23,10 +26,14 @@ public class MyViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.category) TextView tvCate; @Nullable + @BindView(R.id.tvNovelStatus) + TextView tvStatus; + @Nullable @BindView(R.id.desc) TextView tvDesc; @Nullable @BindView(R.id.tvCateNums) + TextView tvNum; public MyViewHolder(View view) { super(view); diff --git a/zhuike/src/main/java/com/novelbook/android/db/Novel.java b/zhuike/src/main/java/com/novelbook/android/db/Novel.java index 5330ebf..ac83240 100644 --- a/zhuike/src/main/java/com/novelbook/android/db/Novel.java +++ b/zhuike/src/main/java/com/novelbook/android/db/Novel.java @@ -34,6 +34,24 @@ public class Novel extends LitePalSupport implements Serializable{ private long lastUpdateTime; private boolean isOnShelf; //是否入书架 private boolean isFinished; //是否完本 + private boolean isUpdated; + private boolean isTop;//置顶 + + public boolean isTop() { + return isTop; + } + + public void setTop(boolean top) { + isTop = top; + } + + public boolean isUpdated() { + return isUpdated; + } + + public void setUpdated(boolean updated) { + isUpdated = updated; + } public String getInfoUrl() { return infoUrl; diff --git a/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java b/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java index 9502fe6..bb624cc 100644 --- a/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java +++ b/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java @@ -77,7 +77,7 @@ public interface HttpApi { @GET("page/siteranks") Observable getSiteRanks(@Query("sex") int Sex); //http://xiaoshuofenxiang.com/api/page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3 - @GET("page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3") + @GET("page/siterank") Observable getSiteRankDetail(@Query("fn")String fn,@Query("pn")int pageNo,@Query("sex") int Sex); @GET( "search/{keyword}/{pageno}") Observable getSeachNolvelist(@Path("keyword")String keyWord,@Path("pageno")int pageNo,@Query("sex") int Sex); diff --git a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java index 05644c8..5af2998 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java @@ -545,11 +545,15 @@ public class BookUtil { int muluRetryCount =0; void readChaptersAsync( ) { + if(mSite==null ||mSiteRule ==null){ + Log.d(TAG,String.format("prepare book loadChapts failed---- %s ,mSite is null? %s ,mSiteRule ==null ? %s", mNovel.getName() ,mSite==null,mSiteRule ==null )); + return; + } String url = mSite.getMuluUrl(); Request request = getTagRequest(url); mMuluStatus = MuluStatus.isDownloading; long startTime= new Date().getTime(); - Log.d(TAG,String.format("loadChapts----start download %s 目录 from %s", mNovel.getName() ,url )); + Log.d(TAG,String.format("prepare book loadChapts----start download %s 目录 from %s", mNovel.getName() ,url )); /* if(muluRetryCount<3){ muluRetryCount++; @@ -654,7 +658,10 @@ int muluRetryCount =0; }); } void buildChapters( String content ,String url){ - + if(mSite==null ||mSiteRule ==null){ + Log.d(TAG,String.format("prepare book buildChapters failed---- %s ,mSite is null? %s ,mSiteRule ==null ? %s", mNovel.getName() ,mSite==null,mSiteRule ==null )); + return; + } try { JSONObject siteJson = new JSONObject(); diff --git a/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java b/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java index f5c393f..af26855 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java @@ -33,32 +33,55 @@ public class CommonUtil { private static final String TAG= CommonUtil.class.getSimpleName(); public static int getScreenHeight(Context context){ - int diff = checkDeviceHasNavigationBar(context); + int diff = statusBarDiff(context); + int ret=0; if(diff >0){ - return getDpi(context) -diff; // return height for no navigation bar - + ret = getRealScreenSize(context).y;// -diff; // return height for no navigation bar //有虚拟按键 honor 8 或 没有虚拟按键但顶部有其他占用高度的 mi8 + Log.d(TAG, String.format("getNavigationBarSize:screen height is getRealScreenSize(context).y -diff = %s , diff is %s" ,ret ,diff)); + }else { + ret = getAppUsableScreenSize(context).y; //return for with navigationbar //没有虚拟按键 mate20 + Log.d(TAG, String.format("getNavigationBarSize:screen height is getAppUsableScreenSize(context).y =%s", ret)); } - return getScreenHeightWithOutBottomBar(context); //return for with navigationbar + return ret; } /** * 获取是否存在NavigationBar * @param context * @return */ - public static int checkDeviceHasNavigationBar(Context context) { + public static int statusBarDiff(Context context) { Point appUsableSize = getAppUsableScreenSize(context); Point realScreenSize = getRealScreenSize(context); - Log.d(TAG, String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s" + + Log.d(TAG, String.format("getNavigationBarSize:getDpi %s,getScreenHeightWithOutBottomBar %s, usablesize.y %s,realScreenSize.y %s" + ",realScreenSize.y -usablesize.y =%s, statusbar height %s" - ,appUsableSize.y ,realScreenSize.y, realScreenSize.y-appUsableSize.y ,getStatusBarHeight(context) )); + ,getDpi(context) ,getScreenHeightWithOutBottomBar(context),appUsableSize.y ,realScreenSize.y, realScreenSize.y-appUsableSize.y ,getStatusBarHeight(context) )); Point p = getNavigationBarSize(context); // Toast.makeText(context,String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s,diff %s", // appUsableSize.y ,realScreenSize.y,realScreenSize.y-appUsableSize.y - getStatusBarHeight(context)),Toast.LENGTH_LONG).show(); return realScreenSize.y-appUsableSize.y - getStatusBarHeight(context); } + //状态栏高度 + public static int getStatusBarHeight(Context c) { + int resourceId = c.getResources() + .getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + return c.getResources().getDimensionPixelSize(resourceId); + } + return 0; + } + //返回值就是导航栏的高度,得到的值单位px + public float getNavigationBarHeight(Context c) { + float result = 0; + int resourceId = c.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = c.getResources().getDimension(resourceId); + } + return result; + } + public static Point getNavigationBarSize(Context context) { Point appUsableSize = getAppUsableScreenSize(context); Point realScreenSize = getRealScreenSize(context); @@ -103,54 +126,6 @@ public class CommonUtil { return size; } - public static int getStatusBarHeight(Context c) { - int resourceId = c.getResources() - .getIdentifier("status_bar_height", "dimen", "android"); - if (resourceId > 0) { - return c.getResources().getDimensionPixelSize(resourceId); - } - return 0; - } -/* public static boolean isNavigationBarShow(){ - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - Display display = getActivity().getWindowManager().getDefaultDisplay(); - Point size = new Point(); - Point realSize = new Point(); - display.getSize(size); - display.getRealSize(realSize); - boolean result = realSize.y!=size.y; - return realSize.y!=size.y; - }else { - boolean menu = ViewConfiguration.get(getActivity()).hasPermanentMenuKey(); - boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); - if(menu || back) { - return false; - }else { - return true; - } - } - }*/ - - /** - * 获取是否有虚拟按键 - * 通过判断是否有物理返回键反向判断是否有虚拟按键 - * mate20 不行 - * @param context - * @return - */ - /* public static boolean checkDeviceHasNavigationBar2(Context context) { - - boolean hasMenuKey = ViewConfiguration.get(context) - .hasPermanentMenuKey(); - boolean hasBackKey = KeyCharacterMap - .deviceHasKey(KeyEvent.KEYCODE_BACK); - if (!hasMenuKey & !hasBackKey) { - // 做任何你需要做的,这个设备有一个导航栏 - return true; - } - return false; - } -*/ /** * 获取虚拟功能键高度 @@ -200,7 +175,7 @@ public class CommonUtil { } /** - * 获取 虚拟按键的高度 + * 获取 虚拟按键+ 顶部状态栏 + x 的高度 * @param context * @return */ @@ -451,5 +426,45 @@ public class CommonUtil { return getDateString(time,""); } +/* public static boolean isNavigationBarShow(){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + Display display = getActivity().getWindowManager().getDefaultDisplay(); + Point size = new Point(); + Point realSize = new Point(); + display.getSize(size); + display.getRealSize(realSize); + boolean result = realSize.y!=size.y; + return realSize.y!=size.y; + }else { + boolean menu = ViewConfiguration.get(getActivity()).hasPermanentMenuKey(); + boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); + if(menu || back) { + return false; + }else { + return true; + } + } + }*/ + + /** + * 获取是否有虚拟按键 + * 通过判断是否有物理返回键反向判断是否有虚拟按键 + * mate20 不行 + * @param context + * @return + */ + /* public static boolean checkDeviceHasNavigationBar2(Context context) { + + boolean hasMenuKey = ViewConfiguration.get(context) + .hasPermanentMenuKey(); + boolean hasBackKey = KeyCharacterMap + .deviceHasKey(KeyEvent.KEYCODE_BACK); + if (!hasMenuKey & !hasBackKey) { + // 做任何你需要做的,这个设备有一个导航栏 + return true; + } + return false; + } +*/ } diff --git a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java index 1707921..5fab2ee 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java @@ -17,4 +17,6 @@ public class Constants { public static String[] lstProgress={"连载中","已完本","新书"}; public static int retryCnt =10; // public static List lstProgress=null; + public static boolean showDialogOnUi =true; + public static boolean showDialogOnUiPage =false; } diff --git a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java index 10f15b1..1fba10e 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java @@ -69,6 +69,8 @@ public class PageFactory implements ChangeSource{ private float mBorderWidth; // 上下与边缘的距离 private float marginHeight ; + //满屏 差异 + private float screenHeihtDiff ; // 左右与边缘的距离 private float measureMarginWidth ; // 左右与边缘的距离 @@ -455,22 +457,24 @@ public static boolean busy(){ mWidth = metric.widthPixels; // mHeight = metric.heightPixels; // mHeight = CommonUtil.getDpi(context); - mHeight = CommonUtil.getScreenHeight(context); + mHeight = CommonUtil.getScreenHeight(context) - CommonUtil.statusBarDiff(context); sdf = new SimpleDateFormat("HH:mm");//HH:mm为24小时制,hh:mm为12小时制 date = sdf.format(new java.util.Date()); df = new DecimalFormat("#0.0"); marginWidth = mContext.getResources().getDimension(R.dimen.readingMarginWidth); marginHeight = mContext.getResources().getDimension(R.dimen.readingMarginHeight); - // Log.d(TAG, "PageFactory: marginHeight +" +marginHeight); - // marginHeight = CommonUtil. getStatusBarHeight(mContext); - Log.d(TAG, "PageFactory: marginHeight " +marginHeight); + // Log.d(TAG, "getNavigationBarSize: orignal marginHeight +" +marginHeight); + // marginHeight = CommonUtil. getStatusBarHeight(mContext); + statusMarginBottom = mContext.getResources().getDimension(R.dimen.reading_status_margin_bottom); + screenHeihtDiff =CommonUtil.statusBarDiff(mContext); + Log.d(TAG, "getNavigationBarSize: screenHeihtDiff " +screenHeihtDiff); lineSpace = context.getResources().getDimension(R.dimen.reading_line_spacing); paragraphSpace = context.getResources().getDimension(R.dimen.reading_paragraph_spacing); mVisibleWidth = mWidth - marginWidth * 2; mVisibleHeight = mHeight - marginHeight * 2; - + mHeight +=screenHeihtDiff; typeface = config.getTypeface(); m_fontSize = config.getFontSize(); lineSpace =config.getLineSpace(); @@ -686,8 +690,9 @@ public static boolean busy(){ // String strPercent = df.format(fPercent * 100) + "%";//进度文字 String strPercent = String.format("%s/%s",currentPage.getPageNo(),currentChaptPages.size()) + "页";//进度文字 int nPercentWidth = (int) mBatterryPaint.measureText("10/25页") + 50; //Paint.measureText直接返回參數字串所佔用的寬度 - c.drawText(strPercent, mWidth - nPercentWidth, mHeight - statusMarginBottom, mBatterryPaint);//x y为坐标值 - c.drawText(date, marginWidth ,mHeight - statusMarginBottom, mBatterryPaint); + float botoomY =mHeight - statusMarginBottom;// +screenHeihtDiff; + c.drawText(strPercent, mWidth - nPercentWidth, botoomY, mBatterryPaint);//x y为坐标值 + c.drawText(date, marginWidth ,botoomY, mBatterryPaint); // 画电池 level = batteryInfoIntent.getIntExtra( "level" , 0 ); int scale = batteryInfoIntent.getIntExtra("scale", 100); @@ -696,8 +701,8 @@ public static boolean busy(){ //画电池外框 float width = CommonUtil.convertDpToPixel(mContext,20) - mBorderWidth; float height = CommonUtil.convertDpToPixel(mContext,10); - rect1.set(rect1Left, mHeight - height - statusMarginBottom,rect1Left + width, mHeight - statusMarginBottom); - rect2.set(rect1Left + mBorderWidth, mHeight - height + mBorderWidth - statusMarginBottom, rect1Left + width - mBorderWidth, mHeight - mBorderWidth - statusMarginBottom); + rect1.set(rect1Left, botoomY - height ,rect1Left + width, botoomY); + rect2.set(rect1Left + mBorderWidth, botoomY - height + mBorderWidth , rect1Left + width - mBorderWidth, botoomY - mBorderWidth ); // c.save(Canvas.CLIP_SAVE_FLAG); c.save(); c.clipRect(rect2, Region.Op.DIFFERENCE); diff --git a/zhuike/src/main/res/drawable/ic_book_update_flag.png b/zhuike/src/main/res/drawable/ic_book_update_flag.png new file mode 100644 index 0000000000000000000000000000000000000000..7797896862bb5667c360051f19c9178ae863c063 GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgP`2jv5u0Z<#BEA1J<^Ru+`#(zo zL;}HF&Hu}6{(pJ#|M%Dbm*)OoX!!rZuK#Bz{{Qpq|M_YEuPpk%J^BC1&i{LI|8ETW z|L*4h8!P{Rdi4Lvk^fs_{=d5P|IX(B$J_otKmC7S(f<$k{vT`nzsB?bkN5u%RWcvb zQ3hJcS`y?J%)ou%jX}Wm*?SlmnA|;G977@w-@S6XZ?ORnTf+N;=NL7fhH$a6W!(QS zdA;#miuRT)&)SW%JX}RO{r|mX`SDTs`?~o359ME5XG8^D{-&_P^~?M$`KDVFg*1ED z9^=Z)DUGmP%XfW`t9!{TGm$kvcby9L&i$QsX%3sq^32EY?p-nZRS=by^Z%R3v6_o& zi^NtJthL+qdS%(x%w)@#(ortrXP+EZ-Fs`*ms>5rw_dxE^Dg+R+UaQtz4hXvKWc*` zy~2%LBKP_!{@fDM(6;K$8rxUDeKz~QPBYOGHMne-ntidxt=4Rp&GFx+sa7$j_t!_4 znl*FY%(p$edRx@0YldHc`5a%cZ|1YQ&2A>oPpndX+03>+Q~2q>{>vK9cQQUKGP|+< z`mLmuz3n%jrwiwAcpjDG_Vufy)}7YLK@0h3fCQ$h{hJ`lYTA|+p5rw0c-*yRUkg?{ zACWRWrCJ&`iErcaxT{KhA+F)CHYl)X2X78dNPXj&yW#oo+$CEs=a|l!VtRDi>vX5< zSqIB9T~}U+G*o{Zd+fKt>cqGWwNWZvYxnPOfX_-e1dKNZPgg&ebxsLQ05K&OCIA2c literal 0 HcmV?d00001 diff --git a/zhuike/src/main/res/drawable/sc_top_three.png b/zhuike/src/main/res/drawable/sc_top_three.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1401d512f3e2bee7261c1f45d5a05f3d8ed687 GIT binary patch literal 672 zcmV;R0$=@!P)WST|7EcMWwHNdu>WST|7NrQWw8HcvHxbU|75WLX0ZQdvHxbV|6{KIW3B&auK#7Q z|NsC0+U)_WJ*y%>RA7|Iz0EzTE$m$N!O8xC{UQ z01|XkPE!E)cDrXsI10qB;>(nYUo0OMk@Y|$0005kNklLXZa`Xe9;tQqaZ- z6(=G}v(|MU4N#NPEp_48eLa*Bry0>SSRATL2WT-ss>4YfpsfySZm(BmlhZY^)269V znO@Ix?tjO<NTEB#%{=LEqVZ6ozhlQA?QGh6 zcc>-pJ>VT&pem-Wbr|H&NRLrisXP5CKdh6@zI2DvAI477y|w1f=gLk3#RCqnFqK)%tz z*gA_qTZlkj01;>vK?L%Tkbt}yAOWrSmd1>R^p^nL!Fb2h#W5t}@Y`#rtC|c1SRWjY{h;@dZ_)ez zlX4wp4Lv7cd3kR0=|lg$(`LBLx#!QoAphd}l9+&FtgbNuXIN!tD4b7kx|Y!7WE;}4 zQ1JRCpXV8m7i9)mPT4H!wV>hGP01rW_j>LX zytQ&cn$`I)$%(s{dNB5W-!Ugw{CHi)@TumGOLN2cI@Ybg>^SSqUs| z`@|oOEeo$mt;qiL?Bl~Lr)%gvwm$N^d4Nr8o>qL^l&@Vr0#~bM%+*@X zs@iC)@?zU$`%gEx7A@;F4(`8n=e9%1@;Ui_-+u+l&sk7(!Iqivj6m<26=~0vw%^;{ zuHiKAn(dv1zgGRa|AKGp+^iEZ3V*YA+gUk$H(I@JvjpD-kJM@LeBv)ke(IeM{p~SZ z(JMY!=+uJy?E8 hr;Fdt?&tFw#&cy%$)eX*rU6p{gQu&X%Q~loCIHvHNHhQd literal 0 HcmV?d00001 diff --git a/zhuike/src/main/res/drawable/selector_slide_view.xml b/zhuike/src/main/res/drawable/selector_slide_view.xml new file mode 100644 index 0000000..c30754d --- /dev/null +++ b/zhuike/src/main/res/drawable/selector_slide_view.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/zhuike/src/main/res/drawable/slide_block.png b/zhuike/src/main/res/drawable/slide_block.png new file mode 100644 index 0000000000000000000000000000000000000000..f46a2b92259065f73d43b3703aa688d499b93b6d GIT binary patch literal 1035 zcmeAS@N?(olHy`uVBq!ia0vp^7C=0SgBeJw-~YJ;NG%HR32_C|t;LyiLyM+QTrz7) zb3s~5QO3MU-Lw1JJIZppstVdlv*%Cgo6=U-Q&T*%r)5%ebzgnigvN^LUCjojMVvra zs+0uz1v7kkcXv-ITi8;IKaVfYtCZ$_e&bM2ik^~)KmW6nTV{B;Y--aw@4)WKz`*py z)5S3)goX3lp0BR_bZePN z(Y<5(N8W6oEt~uzBYe)ni<#SgFLTN9zt(o{0pBv|*PgqBsxu>{CS-)Yc70R3PMn8j z!_i;CPxh`eS>X`9_fp(x22Qu`Pxsmi`~_H2i+{M~Ea$dAkh}PAjH6}2?)z*fVy1q( zCgVKwi9{-=!m($6+l)kZe7AWo?Y?RE+PS)nf`x{MlyuU~lZ00|SP9K)y?*&4*W$?% zf~&7ohi~NWX#PIkHer`|zTJ^V#px~+5C43+=Ar1bf01AKk7(&j|L$WBe(&VrvTy$O zwuSLU>lKbGz2^LvDRZwQvFGeH&n*jl!ZJ#hlnTjeJia?I>7u3X#bb-=xfO5O>g6#^ zOy4fUuvziECd+q*+Bj>ir1ow$jf8@Wp@Ok`dLc(x#Z5&6A1_*~bSs8MHEW|-{q!HI zt_sJZISqA>9S=BUsCHE6tLhR<&9-?{CWzQtuFOhu>DpP-%O2#j$-`;d1SOS?Ei4&^ zKPCy-oK;+Zl)d8>yTU}LZqI#_C#Wx}2&i47bd){v?<Pfb>kB!St*jTNwdm+k{+k?z>}S}e)=zTwt~y}F>hkLDgZ74* zMHjD}@GLmUSUv0JgC3W~2_Fwsw>; z$=LC`U7T0o_vRnG5^tlLkjIujbj~v|c z;Y6S6$wfRYf4v;fGc5Yh#hCoX>+Bppdnf(v#m`z6dStn)uP~ZhZaQI6>2F?_`ZcF* zYR}jndSg{KHO<Tuaf*T$jFQr`${C mveX6r6~(s3(*Jeq8U8ig&CQIHpEs}YkpBBD+2@5D^C~4kc@k8Z{D7? z$UuPYK^&uEg3|H=yN-9i?H_;JV60S@ToznyXnnYT<=3nJ0*j}%$xr*)pBVk+rRwR@ zqW*K6y>E%HW&9SN;&tM)ZIH&2>;F{OtTqyKIuQI}>5?_CaxG#^rWFcge@(s76gq8= zYL3gi$!n4ntu!CFwz!-;FyC^`V~Zot>^0xG3nX+jY^-l%-syL|zqUQ@?S{6uF0YmJ zlf0IfvF5*$wEFn4z`~Mc)oo=Rt6zo{9JWl3Wk;EPSPfcpR69x@tU@*5afEp7se7x%W+2FH-rDPkYxPwzJhsom0Q^8SirX&KH|D^=5vA_NQ|}C)NdB z<=ClhtJnHRYqjLGFNxMR%NQpWwawa77jblH!2W|$JrkC>RWMIdtMWN>K>Cn~$DC4$ z8A^L@9N<30qccfSCig){z-@=#fSU(c6mPiPbh`17Z@+j+&&>w+`xBJ;`xidn*CQ?$ zDY28?`A%EwmB5pSnsvXNxsaTg6PJAEkOJ4<>70ujnl+jqpJr+NI{9;^+$Y((Rco1< zoEzF5g{3aBT#MI!t^aBNU8|UAiJ6I8HY)CJ%gH(MU_Q^s?`t1>J0F+W@bBWrzcYUy zvu>#D?fn{Wblbl1H{XWCvUR2_a{5!Zymbu7V=iu)d-h{g`-Uxzs)tUNwA?T#aEiDo z6BWk6u29%p;BZ6jOHjDMGQCVeqwS^@Yrfo={fjO57F)I2RyxnF`oC#<8_ub${PI}2)M$0MfO@gU*@+f&qYr;ObtjVR z>eg6CpNU$TZ-O%&k9Qnh;`{k{jgz}VSyqHb>Vl2^PCl`zNzz?wR+%r~wS8st<|&VM z`pjE6J8%876GykoY-Rds;XZA_mxws-&rf!}DO&sPVrBR~-*xtPC;aXI%>7%{s`~X+ S0|8(*VeoYIb6Mw<&;$U}>BL0< literal 0 HcmV?d00001 diff --git a/zhuike/src/main/res/layout/fragment_fragment__shelf.xml b/zhuike/src/main/res/layout/fragment_fragment__shelf.xml index bab8960..fff41e9 100644 --- a/zhuike/src/main/res/layout/fragment_fragment__shelf.xml +++ b/zhuike/src/main/res/layout/fragment_fragment__shelf.xml @@ -8,9 +8,10 @@ android:orientation="vertical"> -