重点:
//点击事件等需要写在adapter的holder中,如果写在fragment中会最后一页的pisition显示set效果,如果写在holder外会当前页的最后一个元素显示set效果
//1.这是R.layout.recycleview
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/list"></androidx.recyclerview.widget.RecyclerView>
//2.fragment中运用recyclerView
RecyclerView recyclerView;
recyclerView = (RecyclerView) inflater.inflate(R.layout.recycleview, viewPager, false);//recyclerView的xml放在这里
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 6));//一行6个
mAdapter = new ManagerAdapter((List<Manager>) mData, versionMap, mContext, index, HOME_ENTRANCE_PAGE_SIZE);
//3.adapter中
//用来连接adapter_app_list以及放入ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder() called with: parent = [" + parent + "], viewType = [" + viewType + "]");
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_app_list,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
//用来修改UI的
@Override
public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") int position) {
Log.d(TAG, "onBindViewHolder() called with: holder = [" + holder + "], position = [" + position + "]");
this.holder = holder;
this.position = position;
res = mContext.getResources();
recyclerViewData();
if (progressBar!=null) {
//progressBar Listener
progressBar.setOnAnimProgressListener(new CircularProgressView.OnAnimProgressListener() {
@Override
public void valueUpdate(int progress) {
}s
});
}
}
//重点在此方法中,参数可以自定义
/**
*
* @param data 需要放入recyclerView的数据
* @param versionMap 我自己定义的数据,我需要用,一般用不上,app版本
* @param context 上下文,mContext.getResources();用来获取资源的,比如图片
* @param index 页数下标,从0开始(通俗讲第几页) 自己定义的
* @param pageSize 一页最多数据,自己定义
*/
public ManagerAdapter(List<Manager> data, Map<Long, String> versionMap, Context context, int index, int pageSize){
Log.d(TAG, "ManagerAdapter() called with: data = [" + data.toString() + "], context = [" + context + "]");
this.mData = data;
this.mContext = context;
this.mIndex = index;
this.mPageSize = pageSize;
this.versionMap = versionMap;
}
//第二个重点,用来定义UI参数的,呼应public class ManagerAdapter extends RecyclerView.Adapter<ManagerAdapter.ViewHolder> implements Handler.Callback{中的ManagerAdapter.ViewHolder
class ViewHolder extends RecyclerView.ViewHolder{
ImageView imgIcon;
TextView tvName;
TextView tvVersion;
TextView tvState;
CircularProgressView progressBar;
ImageView imgDel ;
ImageView imgBgDelBlue;
ImageView imgBgDelGrey;
TextView btnState;
public ViewHolder(View itemView) {
super(itemView);
Log.d(TAG, "ViewHolder() called with: itemView = [" + itemView + "]");
imgIcon = itemView.findViewById(R.id.img_icon);
tvName = itemView.findViewById(R.id.tv_name);
tvVersion = itemView.findViewById(R.id.tv_version);
tvState = itemView.findViewById(R.id.btn_state);
progressBar = itemView.findViewById(R.id.bar_manager);
imgDel = itemView.findViewById(R.id.img_icon_del);
imgBgDelBlue = itemView.findViewById(R.id.bg_icon);
imgBgDelGrey = itemView.findViewById(R.id.bg_icon1);
btnState = itemView.findViewById(R.id.btn_state);
//点击事件等需要写在adapter的holder中,如果写在fragment中会最后一页的pisition显示set效果,如果写在holder外会当前页的最后一个元素显示set效果
imgIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clickInterface.onIconClick(view,getAdapterPosition());
}
});
btnState.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickInterface != null){
Log.d(TAG, "vvvv"+R.id.bg_icon);
clickInterface.onButtonClick(v,getAdapterPosition());
ManagerAdapter.progressBar = progressBar;
if (btnState.getText().equals(Constant.STATE_UPDATE) ){
imgBgDelGrey.setVisibility(v.VISIBLE);
imgBgDelBlue.setVisibility(v.VISIBLE);
progressBar.setVisibility(View.VISIBLE);
progressBar.setStatus(CustomCircleProgress.Status.Starting);
Message message = Message.obtain();
message.what = PROGRESS_CIRCLE_STARTING;
handler = new Handler(ManagerAdapter.this);
handler.sendMessage(message);
// excuteProgress();
}
}
}
});
}
}
java
fragment(activity)
注意:LinearLayout.LayoutParams layoutParams12 = ...
//首页菜单分页
LinearLayout.LayoutParams entrancelayoutParams = ...
homeEntranceLayout.setLayoutParams(entrancelayoutParams);
viewPager.setLayoutParams(layoutParams12);
1.entrancelayoutParams的类型要是viewpaper父层的类型。
2.layoutParams12要是viewpaper的类型
重点中的重点:其中包含item点击事件(改,点击事件不写在fragment中,因为set点击事件是在for循环中,导致set的adapter永远是最后一页,效果也会在最后一页,在adapter的holder中写点击事件,可以set值给adapter使用)!!!!!!!!!!
private ManagerAdapter mAdapter = null;
private RecyclerView recyclerView;
private LinearLayout homeEntranceLayout;
private ViewPager viewPager;
private void viewPagerPaging() {
LinearLayout.LayoutParams layoutParams12 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) ((float) ScreenUtil.getScreenWidth() / 2.0f));
//首页菜单分页
LinearLayout.LayoutParams entrancelayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) ((float) ScreenUtil.getScreenWidth() / 2.0f + 70));
homeEntranceLayout.setLayoutParams(entrancelayoutParams);
viewPager.setLayoutParams(layoutParams12);
LayoutInflater inflater = LayoutInflater.from(getContext());
//将RecyclerView放至ViewPager中:
int pageSize = HOME_ENTRANCE_PAGE_SIZE;
//一共的页数等于 总数/每页数量,并取整。
int pageCount = (int) Math.ceil(mData.size() * 1.0 / pageSize);
List<View> viewList = new ArrayList<View>();
for (int index = 0; index < pageCount; index++) {
//每个页面都是inflate出一个新实例
recyclerView = (RecyclerView) inflater.inflate(R.layout.recycleview, viewPager, false);
recyclerView.setLayoutParams(layoutParams12);
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 6));
mAdapter = new ManagerAdapter((List<Manager>) mData, versionMap, mContext, index, HOME_ENTRANCE_PAGE_SIZE);
mAdapter.setOnclick(new ManagerAdapter.ClickInterface() {
@Override
public void onButtonClick(View view, int position) {
Log.d(TAG, "onButtonClick() called with: Click Button - position:" + position + "name:" + mData.get(position).getName());
statusBtnClick(view, position);
}
@Override
public void onIconClick(View view, int position) {
Log.d(TAG, "onIconClick() called with: Click Icon - position:" + position + "name:" + mData.get(position).getName());
View itemView = recyclerView.getLayoutManager().findViewByPosition(position);
TextView state = itemView.findViewById(R.id.btn_state);
ImageView imgDel = itemView.findViewById(R.id.img_icon_del);
ImageView imgBgDelBlue = itemView.findViewById(R.id.bg_icon);;
ImageView imgBgDelGrey = itemView.findViewById(R.id.bg_icon1);
if (state.getText().toString().equals(Constant.STATE_INSTALL)) {
imgDel.setVisibility(View.VISIBLE);
imgBgDelBlue.setVisibility(View.VISIBLE);
imgBgDelBlue.setAlpha(0.7f);
imgBgDelGrey.setVisibility(View.VISIBLE);
imgBgDelGrey.setAlpha(0.7f);
getPresenter().showDialogMsg(getString(R.string.DIALOG_BTN_DEL));
} else {
changeToOtherFragment(false, view, position);
}
}
});
mAdapter.setOnLongClick(new ManagerAdapter.LongClickInterface() {
@Override
public void onIconLongClick(View view, int position) {
Log.d(TAG, "onIconLongClick() called with: view = [" + view + "], position = [" + position + "]");
mPosition = position;
getPresenter().showDialogMsg(Constant.DIALOG_BTN_DEL);
}
});
recyclerView.setAdapter(mAdapter);
recyclerView.setNestedScrollingEnabled(false);
viewList.add(recyclerView);
}
ViewPagerAdapter adapter = new ViewPagerAdapter(viewList);
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener((new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Log.d(TAG, "onPageSelected() called with: position = [" + position + "]");
}
}));
}
recyclerView的adapter
package com.fawcar.dlife6.appmarket.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.fawcar.dlife6.appmarket.R;
import com.fawcar.dlife6.appmarket.bean.Manager;
import com.fawcar.dlife6.appmarket.util.Constant;
import com.fawcar.dlife6.appmarket.util.CustomCircleProgress;
import com.fawcar.dlife6.downloadcore.bean.FileInfo;
import com.fawcar.dlife6.downloadcore.manager.DownLoadManager;
import com.fawcar.dlife6.downloadcore.request.DownLoadRequest;
import com.fawcar.dlife6.tspsdk.manager.TspManager;
//import com.fawcar.dlife6.sotacore.manager.CheckManager;
import java.util.List;
import java.util.Map;
public class ManagerAdapter extends RecyclerView.Adapter<ManagerAdapter.ViewHolder> implements Handler.Callback{
private static final String TAG = ManagerAdapter.class.getSimpleName();
public static final int PROGRESS_CIRCLE_STARTING = 0x110;
public static final int PROGRESS_CIRCLE_CANCEL = 0x111;
private static CustomCircleProgress progressBar;
private List<Manager> mData;
private Context mContext;
private Resources res;
private ViewHolder holder;
private int position;
//页数下标,从0开始(通俗讲第几页)
private int mIndex;
//每页显示最大条目个数
private int mPageSize;
private ClickInterface clickInterface;
private Manager manager;
private Handler handler;
private int progress = 0;
private TextView textView;
private Runnable runnable;
private Map<Long,String> versionMap;
/**
*
* @param data
* @param versionMap
* @param context
* @param index
* @param pageSize
*/
public ManagerAdapter(List<Manager> data, Map<Long, String> versionMap, Context context, int index, int pageSize){
Log.d(TAG, "ManagerAdapter() called with: data = [" + data.toString() + "], context = [" + context + "]");
this.mData = data;
this.mContext = context;
this.mIndex = index;
this.mPageSize = pageSize;
this.versionMap = versionMap;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder() called with: parent = [" + parent + "], viewType = [" + viewType + "]");
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_app_list,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") int position) {
Log.d(TAG, "onBindViewHolder() called with: holder = [" + holder + "], position = [" + position + "]");
this.holder = holder;
this.position = position;
res = mContext.getResources();
recyclerViewData();
initProgress();
}
private void initProgress() {
progressBar = holder.progressBar;
}
private void recyclerViewData() {
/**
* 在给View绑定显示的数据时,计算正确的position = position + mInex * mPageSize,
*/
final int pos = position + mIndex * mPageSize;
manager = mData.get(pos);
String version = versionMap.get(manager.getSid());
holder.tvName.setText(manager.getName());
holder.tvVersion.setText("v"+version);
if (manager.getCompare() > 0){
holder.btnState.setText(Constant.STATE_UPDATE);
}else if (manager.getCompare() == 0){
holder.btnState.setText(Constant.STATE_OPEN);
}else if (manager.getCompare() == -1){
holder.btnState.setText(Constant.STATE_INSTALL);
}else {
holder.btnState.setText(Constant.STATE_INSTALLING);
}
//图片叠加
setImgIcon();
}
private void setImgIcon() {
BitmapDrawable bitmapDrawable = (BitmapDrawable) res.getDrawable(Integer.parseInt(manager.getIcon()),mContext.getTheme());
Bitmap managerBitmap = bitmapDrawable.getBitmap();
int width = holder.imgIcon.getBackground().getIntrinsicWidth();
//设置图片透明度
Paint paint = new Paint();
paint.setAlpha(178); //设置透明程度
Bitmap bgBitmapBlue = BitmapFactory.decodeResource(res, R.mipmap.bg_app_insatll_1);
Bitmap bgBitmapGrey = BitmapFactory.decodeResource(res, R.mipmap.bg_app_install_3);
Bitmap barBitmap;
Bitmap newBitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
Canvas cv = new Canvas(newBitmap);
cv.drawBitmap(managerBitmap, 0, 0, null);
cv.drawBitmap(bgBitmapBlue, 0, 0, paint);
cv.drawBitmap(bgBitmapGrey, 0, 0, paint);
String state = holder.btnState.getText().toString();
switch (state){
case Constant.STATE_INSTALLING:
Log.d(TAG, "recyclerViewData() STATE_INSTALLING");
holder.btnState.setAlpha(0.4f);
// barBitmap = BitmapFactory.decodeResource(res, R.mipmap.bg_app_install_2);
// cv.drawBitmap(barBitmap, width/4, width/4, null);
holder.imgIcon.setImageBitmap(newBitmap);
break;
case Constant.STATE_DOWNLOADING:
Log.d(TAG, "recyclerViewData() STATE_DOWNLOADING");
progressBar.setStatus(CustomCircleProgress.Status.Starting);
Message message = Message.obtain();
message.what = PROGRESS_CIRCLE_STARTING;
handler.sendMessage(message);
case Constant.STATE_CONTINUE:
Log.d(TAG, "recyclerViewData() STATE_CONTINUE");
// barBitmap = BitmapFactory.decodeResource(res, R.mipmap.bg_app_downloading_1);
// cv.drawBitmap(barBitmap, width/4, width/4, null);
holder.imgIcon.setImageBitmap(newBitmap);
holder.progressBar.setVisibility(View.VISIBLE);
progressBar = holder.progressBar;
textView = holder.btnState;
// excuteProgress();
break;
case Constant.STATE_INSTALL:
Log.d(TAG, "recyclerViewData() STATE_INSTALL");
holder.imgDel.setVisibility(View.VISIBLE);
holder.imgBgDelBlue.setVisibility(View.VISIBLE);
holder.imgBgDelGrey.setVisibility(View.VISIBLE);
break;
default:
Log.d(TAG, "recyclerViewData() default");
holder.imgIcon.setImageBitmap(managerBitmap);
break;
}
}
// private void excuteProgress() {
// handler = new Handler(this);
// runnable = new Runnable() {
// @Override
// public void run() {
// handler.postDelayed(this, 50);
// handler.sendEmptyMessage(1);
// }
// };
// handler.postDelayed(runnable, 0);
// }
@Override
public boolean handleMessage(Message message) {
Log.d(TAG, "handleMessage() called with: message = [" + message + "]");
switch (message.what){
case PROGRESS_CIRCLE_STARTING:
Log.d(TAG, "PROGRESS_CIRCLE_CANCEL() called with: msg = [" + message + "]");
try {
DownLoadManager.getInstance().init(TspManager.getInstance().getBaseUrl());//根据不同资源传递不同初始化地址
} catch (Exception e) {
e.printStackTrace();
}
FileInfo info = new FileInfo();
info.setName("MusicService.apk");
info.setType(0);
info.setUrl("https://fawivi-static-public-uat-cdn.faw.cn/sota/C10030000047/apk/MusicService_3.00.00.047.apk");
info.setTotalSize(1200000);
info.setSign("1123121213");
new DownLoadRequest(info, new DownLoadRequest.RequestListener() {
@Override
public void onDownloadSuccess(boolean allSuccess) {
}
@Override
public void updateProgress(FileInfo info, int process) {
Log.d(TAG, "updateProgress() called with: info = [" + info + "], process = [" + process + "]");
}
}).startDownLoad();
progress = progressBar.getProgress();
progressBar.setProgress(++progress);
if(progress >= 100){
handler.removeMessages(PROGRESS_CIRCLE_STARTING);
progress = 0;
progressBar.setProgress(0);
progressBar.setStatus(CustomCircleProgress.Status.End);//修改显示状态为完成
}else{
//延迟100ms后继续发消息,实现循环,直到progress=100
handler.sendEmptyMessageDelayed(PROGRESS_CIRCLE_STARTING, 100);
}
break;
case PROGRESS_CIRCLE_CANCEL:
progress = progressBar.getProgress();
progressBar.setProgress(0);
break;
}
return false;
}
@Override
public int getItemCount() {
Log.d(TAG, "getItemCount() called");
return mData.size() > (mIndex + 1) * mPageSize ? mPageSize : (mData.size() - mIndex * mPageSize);
}
@Override
public long getItemId(int position) {
Log.d(TAG, "getItemId() called with: position = [" + position + "]");
return position + mIndex * mPageSize;
}
class ViewHolder extends RecyclerView.ViewHolder{
ImageView imgIcon;
TextView tvName;
TextView tvVersion;
CustomCircleProgress progressBar;
ImageView imgDel ;
ImageView imgBgDelBlue;
ImageView imgBgDelGrey;
TextView btnState;
public ViewHolder(View itemView) {
super(itemView);
Log.d(TAG, "ViewHolder() called with: itemView = [" + itemView + "]");
imgIcon = itemView.findViewById(R.id.img_icon);
tvName = itemView.findViewById(R.id.tv_name);
tvVersion = itemView.findViewById(R.id.tv_version);
progressBar = itemView.findViewById(R.id.bar_manager);
imgDel = itemView.findViewById(R.id.img_icon_del);
imgBgDelBlue = itemView.findViewById(R.id.bg_icon);
imgBgDelGrey = itemView.findViewById(R.id.bg_icon1);
btnState = itemView.findViewById(R.id.btn_state);
imgIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clickInterface.onIconClick(view,getAdapterPosition());
}
});
btnState.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickInterface != null){
Log.d(TAG, "vvvv"+R.id.bg_icon);
clickInterface.onButtonClick(v,getAdapterPosition());
ManagerAdapter.progressBar = progressBar;
if (btnState.getText().equals(Constant.STATE_UPDATE) ){
imgBgDelGrey.setVisibility(v.VISIBLE);
imgBgDelBlue.setVisibility(v.VISIBLE);
progressBar.setVisibility(View.VISIBLE);
progressBar.setStatus(CustomCircleProgress.Status.Starting);
Message message = Message.obtain();
message.what = PROGRESS_CIRCLE_STARTING;
handler = new Handler(ManagerAdapter.this);
handler.sendMessage(message);
// excuteProgress();
}
}
}
});
}
}
public void setOnclick(ClickInterface clickInterface){
Log.d(TAG, "setOnclick() called with: clickInterface = [" + clickInterface + "]");
this.clickInterface = clickInterface;
}
public interface ClickInterface{
int onButtonClick(View view,int position);
void onIconClick(View view ,int position);
}
}
viewpaper的adapter
package com.fawcar.dlife6.appmarket.adapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import java.util.List;
public class ViewPagerAdapter extends PagerAdapter {
private static final String TAG = ViewPagerAdapter.class.getSimpleName();
private List<View> list;
public ViewPagerAdapter(List<View> list){
Log.d(TAG, "ViewPagerAdapter() called with: list = [" + list + "]");
this.list = list;
}
@Override
public void destroyItem(ViewGroup container, int position,@NonNull Object object) {
container.removeView(list.get(position));
Log.d(TAG, "destroyItem() called with: container = [" + container + "], position = [" + position + "], object = [" + object + "]");
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(list.get(position));
Log.d(TAG, "instantiateItem() called with: container = [" + container + "], position = [" + position + "]");
return list.get(position);
}
@Override
public int getCount() {
Log.d(TAG, "getCount() called");
if (list == null)
return 0;
return list.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
Log.d(TAG, "isViewFromObject() called with: view = [" + view + "], object = [" + object + "]");
return view == object;
}
}
xml
recyclerView
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/list"></androidx.recyclerview.widget.RecyclerView>
adapter
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="256px"
android:layout_marginTop="25px">
<ImageView
android:id="@+id/img_icon"
android:layout_width="130px"
android:layout_height="130px"
android:layout_marginLeft="83px"
android:layout_marginTop="2px"
android:background="@drawable/application_desk_selector" />
<ImageView
android:id="@+id/bg_icon"
android:layout_width="130px"
android:layout_height="130px"
android:layout_marginLeft="83px"
android:layout_marginTop="2px"
android:background="@mipmap/bg_app_insatll_1"
android:visibility="gone" />
<ImageView
android:id="@+id/bg_icon1"
android:layout_width="130px"
android:layout_height="130px"
android:layout_marginLeft="83px"
android:layout_marginTop="2px"
android:alpha="20"
android:background="@mipmap/bg_app_install_3"
android:visibility="gone" />
<ImageView
android:id="@+id/img_icon_del"
android:layout_width="64px"
android:layout_height="64px"
android:layout_marginLeft="116px"
android:layout_marginTop="35px"
android:background="@mipmap/ic_app_del"
android:visibility="gone" />
<LinearLayout
android:layout_width="130px"
android:layout_height="130px"
android:layout_marginLeft="83px"
android:layout_marginTop="2px"
android:gravity="center">
<com.fawcar.dlife6.appmarket.util.CustomCircleProgress
android:id="@+id/bar_manager"
android:layout_width="64px"
android:layout_height="64px"
android:visibility="gone" />
</LinearLayout>
<TextView
android:id="@+id/tv_name"
android:layout_width="160px"
android:layout_height="32px"
android:layout_below="@+id/img_icon"
android:layout_marginLeft="68px"
android:layout_marginTop="4px"
android:gravity="center"
android:text="桌面"
android:textColor="#FFFFFF"
android:textSize="26px" />
<TextView
android:id="@+id/tv_version"
android:layout_width="160px"
android:layout_height="23px"
android:layout_below="@+id/tv_name"
android:layout_marginLeft="68px"
android:layout_marginTop="2px"
android:gravity="center"
android:text="V.2.7.8"
android:textColor="#FFFFFF"
android:textSize="20px" />
<TextView
android:id="@+id/btn_state"
android:layout_width="146px"
android:layout_height="64px"
android:layout_below="@+id/tv_version"
android:layout_marginLeft="75px"
android:layout_marginTop="1px"
android:background="@drawable/btn_desk_selector"
android:gravity="center"
android:text="安装"
android:textColor="#FFFFFF"
android:textSize="24px" />
</RelativeLayout>
fragment(activity)
<LinearLayout
android:id="@+id/home_entrance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>