diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index f8027b2..0000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 0d64563..de81da2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -25,6 +25,7 @@ + diff --git a/app/build.gradle b/app/build.gradle index 7c53e1b..017cbbf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,8 +97,8 @@ dependencies { implementation "androidx.viewpager2:viewpager2:1.0.0" //引入Rv管理 - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.7' +// implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.8' /*retrofit raJava*/ @@ -140,8 +140,8 @@ dependencies { annotationProcessor "org.greenrobot:eventbus-annotation-processor:$eventbus_version" //抖音 - implementation 'com.bytedance.ies.ugc.aweme:opensdk-china-external:0.1.9.0' - implementation 'com.bytedance.ies.ugc.aweme:opensdk-common:0.1.9.0' + implementation 'com.bytedance.ies.ugc.aweme:opensdk-china-external:0.1.9.4' + implementation 'com.bytedance.ies.ugc.aweme:opensdk-common:0.1.9.4' //WorkManager implementation 'androidx.work:work-runtime:2.5.0' diff --git a/app/src/main/java/com/qxy/potatos/module/Follow/fragment/FollowFragment.java b/app/src/main/java/com/qxy/potatos/module/Follow/fragment/FollowFragment.java index f13f241..c4af58b 100644 --- a/app/src/main/java/com/qxy/potatos/module/Follow/fragment/FollowFragment.java +++ b/app/src/main/java/com/qxy/potatos/module/Follow/fragment/FollowFragment.java @@ -60,6 +60,7 @@ public class FollowFragment extends BaseFragment { + switch (mType) { + case FollowFragment.FOLLOWINGS: { + //每次刷新重新加载 + recyclerView.setAdapter(null); + followingCursor = 0; + presenter.getFollowingsList(followingCursor, 12); + break; + } + case FollowFragment.Fans: { + recyclerView.setAdapter(null); + fanCursor = 0; + presenter.getFansList(fanCursor, 12); + break; + } + default: + break; + } + }); + + if (recyclerView.getAdapter() == null) { + switch (mType){ + case FollowFragment.FOLLOWINGS: + followAdapter = new FollowingsRecycleViewAdapter(null); + recyclerView.setAdapter(followAdapter); + followAdapter.setEmptyView(emptyView); + break; + case FollowFragment.Fans: + fansAdapter = new FansRecycleViewAdapter(null); + recyclerView.setAdapter(fansAdapter); + fansAdapter.setEmptyView(emptyView); + break; + default: + break; + } + }else { + switch (mType) { + case FollowFragment.FOLLOWINGS: + followAdapter = (FollowingsRecycleViewAdapter) recyclerView.getAdapter(); + followAdapter.setList(null); + followAdapter.setEmptyView(emptyView); + break; + case FollowFragment.Fans: + fansAdapter = (FansRecycleViewAdapter) recyclerView.getAdapter(); + fansAdapter.setList(null); + fansAdapter.setEmptyView(emptyView); + break; + default: + break; + + } + } + } } diff --git a/app/src/main/java/com/qxy/potatos/module/Follow/presenter/FollowPresenter.java b/app/src/main/java/com/qxy/potatos/module/Follow/presenter/FollowPresenter.java index 1b80dbe..6a29583 100644 --- a/app/src/main/java/com/qxy/potatos/module/Follow/presenter/FollowPresenter.java +++ b/app/src/main/java/com/qxy/potatos/module/Follow/presenter/FollowPresenter.java @@ -23,9 +23,9 @@ */ public class FollowPresenter extends BasePresenter { - private MMKV mmkv = MMKV.defaultMMKV(); - private String token = mmkv.decodeString(GlobalConstant.ACCESS_TOKEN); - private String openId = mmkv.decodeString(GlobalConstant.OPEN_ID); + private final MMKV mmkv = MMKV.defaultMMKV(); + private final String token = mmkv.decodeString(GlobalConstant.ACCESS_TOKEN); + private final String openId = mmkv.decodeString(GlobalConstant.OPEN_ID); public FollowPresenter(IFollowView baseView) { super(baseView); @@ -41,6 +41,7 @@ public void getFollowingsList(int cursor, int count) { @Override public void onError(String msg) { LogUtil.e("获取关注列表失败:", msg); + baseView.setFailView(); baseView.loadFail(msg); } @@ -62,6 +63,7 @@ public void getFansList(int cursor, int count) { @Override public void onError(String msg) { LogUtil.e("获取粉丝列表失败:", msg); + baseView.setFailView(); baseView.loadFail(msg); } diff --git a/app/src/main/java/com/qxy/potatos/module/Follow/view/IFollowView.java b/app/src/main/java/com/qxy/potatos/module/Follow/view/IFollowView.java index d1efcdc..2aa6cb1 100644 --- a/app/src/main/java/com/qxy/potatos/module/Follow/view/IFollowView.java +++ b/app/src/main/java/com/qxy/potatos/module/Follow/view/IFollowView.java @@ -18,4 +18,6 @@ public interface IFollowView extends BaseView { void showFansList(Fans followers); void loadFail(String msg); + + void setFailView(); } diff --git a/app/src/main/java/com/qxy/potatos/module/home/activity/HomeActivity.java b/app/src/main/java/com/qxy/potatos/module/home/activity/HomeActivity.java index 854fb12..7e7264b 100644 --- a/app/src/main/java/com/qxy/potatos/module/home/activity/HomeActivity.java +++ b/app/src/main/java/com/qxy/potatos/module/home/activity/HomeActivity.java @@ -77,6 +77,7 @@ public class HomeActivity extends BaseActivity list = new ArrayList<>(); + private HomeAdapter adapter; /** * 保存用户按返回键的时间 */ @@ -184,18 +185,14 @@ public void onClick(View view) { //下拉加载更多 getBinding().homeRefreshlayout.setEnableRefresh(false); getBinding().homeRefreshlayout.setEnableLoadMore(true); - getBinding().homeRefreshlayout.setRefreshFooter(new ClassicsFooter(this)); getBinding().homeRefreshlayout.setOnLoadMoreListener(new OnLoadMoreListener() { @Override public void onLoadMore(@NonNull RefreshLayout refreshLayout) { if (isHasMore && checkList.size() != 0) { presenter.getPersonalVideoList(cursor); - refreshLayout.finishLoadMore(true); } else { - refreshLayout.finishLoadMore(true); - refreshLayout.setEnableLoadMore(false); - getBinding().homeRecyclerviewFooter.setVisibility(View.VISIBLE); + refreshLayout.finishLoadMoreWithNoMoreData(); } } }); @@ -297,16 +294,20 @@ public void showPersonalInfo(UserInfo userInfo) { public void showPersonalVideo(List videos, boolean isHasMore, long cursor) { this.isHasMore = isHasMore; this.cursor = cursor; - HomeAdapter adapter = new HomeAdapter(R.layout.reycylerview_item_home, list); - adapter.addChildClickViewIds(R.id.home_item_imageView); - adapter.setAnimationEnable(true); - adapter.setAnimationFirstOnly(true); - adapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInBottom); - - //recyclerview初始化 - getBinding().recyclerViewHome.addItemDecoration(new HomeItemDecoration(120, 5, 5, 5)); - getBinding().recyclerViewHome.setLayoutManager(new GridLayoutManager(this, 3)); - getBinding().recyclerViewHome.setAdapter(adapter); + // TODO: 2022/11/21 改为不得重复创建 + if (adapter == null){ + adapter = new HomeAdapter(R.layout.reycylerview_item_home, list); + adapter.addChildClickViewIds(R.id.home_item_imageView); + adapter.setAnimationEnable(true); + adapter.setAnimationFirstOnly(true); + adapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInBottom); + + //recyclerview初始化 + getBinding().recyclerViewHome.addItemDecoration(new HomeItemDecoration(120, 5, 5, 5)); + getBinding().recyclerViewHome.setLayoutManager(new GridLayoutManager(this, 3)); + getBinding().recyclerViewHome.setAdapter(adapter); + } + adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) { @@ -316,6 +317,7 @@ public void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View v startActivity(intent); } }); + if (videos != null) { for (int i = 0; i < videos.size(); i++) { checkList.clear(); @@ -332,7 +334,7 @@ public void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View v getBinding().homeTextViewLike.setText(like+getString(R.string.likes)); } - + getBinding().homeRefreshlayout.finishLoadMore(true); } diff --git a/app/src/main/java/com/qxy/potatos/module/home/presenter/HomePresenter.java b/app/src/main/java/com/qxy/potatos/module/home/presenter/HomePresenter.java index 8e5e385..19bdd11 100644 --- a/app/src/main/java/com/qxy/potatos/module/home/presenter/HomePresenter.java +++ b/app/src/main/java/com/qxy/potatos/module/home/presenter/HomePresenter.java @@ -74,7 +74,7 @@ public void getPersonalVideoList(long cursor) { HashMap map = new HashMap<>(); map.put(MyUtil.getString(R.string.cursor), cursor); map.put(MyUtil.getString(R.string.count), (long) 12); - addDisposable(apiServer.GetMyVideos(access_token, openId, map), new BaseObserver>(baseView, true) { + addDisposable(apiServer.GetMyVideos(access_token, openId, map), new BaseObserver>(baseView, false) { @Override public void onError(String msg) { diff --git a/app/src/main/java/com/qxy/potatos/module/mine/activity/LoginActivity.java b/app/src/main/java/com/qxy/potatos/module/mine/activity/LoginActivity.java index a3eaee6..e38c898 100644 --- a/app/src/main/java/com/qxy/potatos/module/mine/activity/LoginActivity.java +++ b/app/src/main/java/com/qxy/potatos/module/mine/activity/LoginActivity.java @@ -139,11 +139,12 @@ public void onBackPressed() { @Override public void onReq(BaseReq baseReq) { - + LogUtil.d("onReq"); } @Override public void onResp(BaseResp baseResp) { + LogUtil.d("onResp"); if (baseResp.getType() == CommonConstants.ModeType.SEND_AUTH_RESPONSE) { Authorization.Response response = (Authorization.Response) baseResp; if (baseResp.isSuccess()) { @@ -157,6 +158,6 @@ public void onResp(BaseResp baseResp) { @Override public void onErrorIntent(Intent intent) { - + LogUtil.d("onErrorIntent"); } } \ No newline at end of file diff --git a/app/src/main/java/com/qxy/potatos/module/videorank/activity/RankActivity.java b/app/src/main/java/com/qxy/potatos/module/videorank/activity/RankActivity.java index 1e98a93..46c969d 100644 --- a/app/src/main/java/com/qxy/potatos/module/videorank/activity/RankActivity.java +++ b/app/src/main/java/com/qxy/potatos/module/videorank/activity/RankActivity.java @@ -1,5 +1,13 @@ package com.qxy.potatos.module.videorank.activity; +import android.app.Activity; +import android.content.res.Resources; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.ColorRes; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; @@ -7,6 +15,7 @@ import com.bumptech.glide.Glide; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; +import com.qxy.potatos.R; import com.qxy.potatos.annotation.InitAIHand; import com.qxy.potatos.base.BaseActivity; import com.qxy.potatos.databinding.ActivityVideoRankBinding; @@ -14,6 +23,10 @@ import com.qxy.potatos.module.videorank.fragment.VideoRankFragment; import com.qxy.potatos.module.videorank.presenter.RankPresenter; import com.qxy.potatos.module.videorank.view.IRankView; +import com.qxy.potatos.util.ActivityUtil; +import com.qxy.potatos.util.ColorUtil; +import com.qxy.potatos.util.LogUtil; +import com.qxy.potatos.util.MyUtil; import java.util.ArrayList; import java.util.List; @@ -21,7 +34,7 @@ @InitAIHand public class RankActivity extends BaseActivity implements IRankView { private final String[] tabText = {"电影榜", "电视剧榜", "综艺榜"}; - + private final Activity activity = ActivityUtil.getCurrentActivity(); /** * 初始化presenter,也是与Activity的绑定 @@ -71,9 +84,58 @@ private void showView() { new TabLayoutMediator(getBinding().tabLayout, getBinding().viewPager2, new TabLayoutMediator.TabConfigurationStrategy() { @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { - tab.setText(tabText[position]); + TextView textView = new TextView(activity); + textView.setGravity(Gravity.CENTER_HORIZONTAL); + textView.setText(tabText[position]); + tab.setCustomView(textView); } }).attach(); + getBinding().viewPager2.registerOnPageChangeCallback(changeCallback); + getBinding().tabLayout.addOnTabSelectedListener(selectedListener); + } + + + //根据标签选中与否更改文本效果 + private TabLayout.OnTabSelectedListener selectedListener = new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + if (tab.getCustomView() != null) { + TextView textView = (TextView) tab.getCustomView(); + textView.setTextAppearance(activity, R.style.selected_tab_text); + } + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + if (tab.getCustomView() != null) { + TextView textView = (TextView) tab.getCustomView(); + textView.setTextAppearance(activity, R.style.unselected_tab_text); + } + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + + } + }; + //根据页面切换与否更改文本效果 + private ViewPager2.OnPageChangeCallback changeCallback = new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + int tabCount = getBinding().tabLayout.getTabCount(); + for (int i = 0; i < tabCount; i++) { + TabLayout.Tab tab = getBinding().tabLayout.getTabAt(i); + TextView textView = (TextView) tab.getCustomView(); + if (textView != null) { + if (tab.getPosition() == position) { + textView.setTextAppearance(activity, R.style.selected_tab_text); + } else { + textView.setTextAppearance(activity, R.style.unselected_tab_text); + } + } + } + } + }; } \ No newline at end of file diff --git a/app/src/main/java/com/qxy/potatos/module/videorank/adapter/MyItemDecoration.java b/app/src/main/java/com/qxy/potatos/module/videorank/adapter/MyItemDecoration.java index 3cdafa8..798c46d 100644 --- a/app/src/main/java/com/qxy/potatos/module/videorank/adapter/MyItemDecoration.java +++ b/app/src/main/java/com/qxy/potatos/module/videorank/adapter/MyItemDecoration.java @@ -12,6 +12,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.qxy.potatos.R; /** * @author yinxiaolong @@ -37,12 +38,9 @@ public MyItemDecoration(Context context) { textPaint.setColor(Color.parseColor("#a64936")); //paint.setColor(Color.parseColor("#ffff00")); - Shader shader = new LinearGradient(0, 0, 100, 1000, Color.parseColor("#fff9e6"), Color.parseColor("#fec002"), Shader.TileMode.CLAMP); - paint.setShader(shader); - paint.setAntiAlias(true); + linePaint.setColor(Color.BLACK); linePaint.setAntiAlias(true); - paint.setAntiAlias(true); textPaint.setAntiAlias(true); textPaint.setTextSize(50); } @@ -79,7 +77,14 @@ public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull final View child = parent.getChildAt(i); int position = parent.getChildAdapterPosition(child); parent.getDecoratedBoundsWithMargins(child, mBounds); - c.drawRoundRect(mBounds.left + 48, mBounds.top + 10, mBounds.left + 170, mBounds.top + 70, 10, 10, paint); + int left = mBounds.left + 48; + int top = mBounds.top + 10; + int right = mBounds.left + 170; + int bottom = mBounds.top + 70; + LinearGradient shader = new LinearGradient(left, top, right, bottom, Color.parseColor("#fff9e6"), Color.parseColor("#fec002"), Shader.TileMode.CLAMP); + paint.setShader(shader); + paint.setAntiAlias(true); + c.drawRoundRect(left, top, right, bottom, 10, 10, paint); if (position < 3) { c.drawText("TOP" + (position + 1) + "", mBounds.left + 48, mBounds.top + 60, textPaint); } else { diff --git a/app/src/main/java/com/qxy/potatos/module/videorank/fragment/VideoRankFragment.java b/app/src/main/java/com/qxy/potatos/module/videorank/fragment/VideoRankFragment.java index b25a197..fb16220 100644 --- a/app/src/main/java/com/qxy/potatos/module/videorank/fragment/VideoRankFragment.java +++ b/app/src/main/java/com/qxy/potatos/module/videorank/fragment/VideoRankFragment.java @@ -3,6 +3,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.chad.library.adapter.base.BaseQuickAdapter; import com.qxy.potatos.R; import com.qxy.potatos.annotation.BindEventBus; import com.qxy.potatos.base.BaseEvent; @@ -91,6 +92,9 @@ public void showRankSuccess(VideoList videoList, int version) { itemDialog.show(getActivity().getSupportFragmentManager(), "MyFullDialog"); } }); + //由于此处父布局是NSV,所以无法获得真正的高度,那么加载动画也只在第一次有效 + rvAdapter.setAnimationFirstOnly(true); + rvAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.ScaleIn); getBinding().recyclerview.setLayoutManager(new LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)); getBinding().recyclerview.addItemDecoration(new MyItemDecoration(getContext())); @@ -119,7 +123,7 @@ public void showRankFailed(String errorMsg) { @Subscribe(threadMode = ThreadMode.MAIN) public void onMainActivityEvent(BaseEvent event) { - if (event.getEventCode() == EventCode.SELECT_VERSION) { + if (event.getEventCode() == EventCode.SELECT_VERSION && event.getData().getType() == type) { presenter.getLastVersionRank(type, event.getData().getVersion()); } } diff --git a/app/src/main/java/com/qxy/potatos/module/videorank/myview/NestedScrollViewVP.java b/app/src/main/java/com/qxy/potatos/module/videorank/myview/NestedScrollViewVP.java index ab033c1..219ed4e 100644 --- a/app/src/main/java/com/qxy/potatos/module/videorank/myview/NestedScrollViewVP.java +++ b/app/src/main/java/com/qxy/potatos/module/videorank/myview/NestedScrollViewVP.java @@ -51,8 +51,8 @@ public boolean dispatchTouchEvent(MotionEvent ev) { int disY = endY - startY; //角度正确,则让上层view别拦截我的事件 float r = (float)Math.abs(disY)/Math.abs(disX); - getParent().requestDisallowInterceptTouchEvent(r > 0.6f || isDisallowIntercept); if (r > 0.6f) isDisallowIntercept = true; + getParent().requestDisallowInterceptTouchEvent(isDisallowIntercept); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: diff --git a/app/src/main/java/com/qxy/potatos/module/videorank/myview/RecycleViewVp.java b/app/src/main/java/com/qxy/potatos/module/videorank/myview/RecycleViewVp.java index 4ed34c3..4771da7 100644 --- a/app/src/main/java/com/qxy/potatos/module/videorank/myview/RecycleViewVp.java +++ b/app/src/main/java/com/qxy/potatos/module/videorank/myview/RecycleViewVp.java @@ -53,8 +53,8 @@ public boolean dispatchTouchEvent(MotionEvent ev) { int disY = endY - startY; //角度正确,则让上层view别拦截我的事件 float r = (float)Math.abs(disY)/Math.abs(disX); - getParent().requestDisallowInterceptTouchEvent(r > 0.6f || isDisallowIntercept); if (r > 0.6f) isDisallowIntercept = true; + getParent().requestDisallowInterceptTouchEvent(isDisallowIntercept); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: diff --git a/app/src/main/java/com/qxy/potatos/module/videorank/presenter/VideoRankPresenter.java b/app/src/main/java/com/qxy/potatos/module/videorank/presenter/VideoRankPresenter.java index 308cf5b..68246e1 100644 --- a/app/src/main/java/com/qxy/potatos/module/videorank/presenter/VideoRankPresenter.java +++ b/app/src/main/java/com/qxy/potatos/module/videorank/presenter/VideoRankPresenter.java @@ -42,7 +42,7 @@ public void getNowRank(int type) { if (MMKV.defaultMMKV().decodeBool(GlobalConstant.IS_CLIENT, true)) { String token = MMKV.defaultMMKV().decodeString(GlobalConstant.CLIENT_TOKEN); LogUtil.i(token); - addDisposable(apiServer.GetVideoListNow(type, token), new BaseObserver>(baseView, true) { + addDisposable(apiServer.GetVideoListNow(type, token), new BaseObserver>(baseView, false) { @Override public void onError(String msg) { LogUtil.d("获取最近榜单错误信息:" + msg); diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 20166b0..513c884 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -107,6 +107,7 @@ + + + android:orientation="horizontal"> + - - - + - + + - + diff --git a/app/src/main/res/layout/activity_video_rank.xml b/app/src/main/res/layout/activity_video_rank.xml index ab38547..7a474bb 100644 --- a/app/src/main/res/layout/activity_video_rank.xml +++ b/app/src/main/res/layout/activity_video_rank.xml @@ -47,6 +47,8 @@ app:tabGravity="fill" app:tabIndicatorFullWidth="false" app:tabMode="fixed" + app:tabRippleColor="@android:color/transparent" + app:tabTextAppearance="@style/unselected_tab_text" android:layout_width="match_parent" android:layout_height="wrap_content"/> diff --git a/app/src/main/res/layout/relativelayout_mine_follow.xml b/app/src/main/res/layout/relativelayout_mine_follow.xml index a03faaa..4d0edc1 100644 --- a/app/src/main/res/layout/relativelayout_mine_follow.xml +++ b/app/src/main/res/layout/relativelayout_mine_follow.xml @@ -1,52 +1,52 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/fragment_mine_follow_followers" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".module.Follow.activity.FollowActivity"> + android:id="@+id/imagebutton_mine_back" + android:layout_width="27dp" + android:layout_height="27dp" + android:layout_marginStart="19dp" + android:layout_marginTop="20dp" + android:background="#00000000" + android:scaleType="fitXY" + android:src="@mipmap/back" /> + android:id="@+id/tablelayout_mine" + android:layout_width="229dp" + android:layout_height="41dp" + android:layout_centerHorizontal="true" + android:layout_marginTop="17dp" + app:tabIndicator="@drawable/tablayout_follow_indicator" + app:tabIndicatorAnimationDuration="1000" + app:tabIndicatorColor="#1A1A1A" + app:tabIndicatorHeight="0dp" + app:tabRippleColor="@android:color/transparent" + app:tabSelectedTextColor="#1A1A1A" + app:tabTextAppearance="@style/unselected_tab_text"> + android:layout_width="wrap_content" + android:layout_height="match_parent" /> + android:layout_width="wrap_content" + android:layout_height="match_parent" /> + android:id="@+id/view_mine_line" + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_below="@id/tablelayout_mine" + android:background="#E4E4E4" /> - aw72owx7fdi4mhgp - db04c6989b2777b21a8bfd999e95aa4c + awtunk00suxwv3qd + 47b6a359c11554b3d377010f9f1cbbb5 8b4b6b21efed31323e2dc4bf07268d7f kvq0nvszkwmqqqbh N0V3S20vM0lCd1dzZkZJWFpaalRkdz09