version:
bugfixes:修复不能下载视频 update:修改下载列表样式,文件位置统一
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
package com.hainaos.vc.activity.category.local;
|
||||
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
@@ -44,7 +43,7 @@ public class LocalCategoryViewModel extends BaseViewModel<ActivityCategoryLocalB
|
||||
public MutableLiveData<ArrayList<LocalVideoInfo>> mLocalVideoInfosData = new MutableLiveData<>();
|
||||
|
||||
public void getViedoList(String dir) {
|
||||
File file = new File(Environment.getExternalStorageDirectory() + File.separator + "haina" + File.separator + dir);
|
||||
File file = new File(FileUtils.getHainaVideoPath(getCtx()) + dir);
|
||||
Observable
|
||||
.fromCallable(new Callable<List<String>>() {
|
||||
@Override
|
||||
|
||||
@@ -3,8 +3,11 @@ package com.hainaos.vc.activity.category.online;
|
||||
import android.content.Intent;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import com.hainaos.vc.R;
|
||||
@@ -20,7 +23,6 @@ import com.hainaos.vc.utils.FileUtils;
|
||||
import com.hainaos.vc.utils.ScreenUtils;
|
||||
import com.hainaos.vc.view.CustomDialog;
|
||||
import com.hainaos.vc.view.EquallyDividedItemDecoration;
|
||||
import com.hainaos.vc.view.RecycleGridLayoutManager;
|
||||
import com.hjq.toast.Toaster;
|
||||
|
||||
import java.io.File;
|
||||
@@ -50,7 +52,9 @@ public class CategoryVideoActivity extends BaseMvvmActivity<CategoryVideoViewMod
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
RecycleGridLayoutManager manager = new RecycleGridLayoutManager(CategoryVideoActivity.this, SPAN_COUNT);
|
||||
// RecycleGridLayoutManager manager = new RecycleGridLayoutManager(CategoryVideoActivity.this, SPAN_COUNT);
|
||||
LinearLayoutManager manager = new LinearLayoutManager(CategoryVideoActivity.this);
|
||||
manager.setOrientation(RecyclerView.VERTICAL);
|
||||
mViewDataBinding.rvVideo.setLayoutManager(manager);
|
||||
|
||||
EquallyDividedItemDecoration equallyDividedItemDecoration = new EquallyDividedItemDecoration(SPAN_COUNT, ScreenUtils.dip2px(CategoryVideoActivity.this, 1));
|
||||
@@ -68,6 +72,16 @@ public class CategoryVideoActivity extends BaseMvvmActivity<CategoryVideoViewMod
|
||||
mViewModel.getVideoList(mCategoryInfo.getUuid(), mPasswd);
|
||||
}
|
||||
});
|
||||
mViewDataBinding.rvVideo.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||
super.onScrolled(recyclerView, dx, dy);
|
||||
|
||||
// canScrollVertically(-1) 检查是否可以往下拉(即是否不在顶部)
|
||||
// 如果返回 true,说明不在顶部,此时禁用 SwipeRefreshLayout 的下拉手势
|
||||
mViewDataBinding.swipeRefreshLayout.setEnabled(!recyclerView.canScrollVertically(-1));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -106,6 +120,7 @@ public class CategoryVideoActivity extends BaseMvvmActivity<CategoryVideoViewMod
|
||||
} else {
|
||||
mViewDataBinding.clNodata.setVisibility(View.GONE);
|
||||
mViewDataBinding.rvVideo.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.tvTotal.setText(String.format(getString(R.string.video_total), categoryVideoInfos.size()));
|
||||
}
|
||||
} else {
|
||||
Toaster.show(baseResponse.msg);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.hainaos.vc.activity.category.online;
|
||||
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
@@ -45,7 +44,7 @@ public class CategoryVideoViewModel extends BaseViewModel<ActivityCategoryVideoB
|
||||
|
||||
@Deprecated
|
||||
public void getViedoList(String dir) {
|
||||
File file = new File(Environment.getExternalStorageDirectory() + File.separator + "haina" + File.separator + dir);
|
||||
File file = new File(FileUtils.getHainaVideoPath(getCtx()) + dir);
|
||||
if (file.exists()) {
|
||||
String[] strings = file.list();
|
||||
Log.e(TAG, "getViedoList: " + Arrays.toString(strings));
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.hainaos.vc.base.BaseFragmentPagerAdapter;
|
||||
import com.hainaos.vc.base.mvvm.BaseMvvmActivity;
|
||||
import com.hainaos.vc.bean.uiuios.AppUpdateInfo;
|
||||
import com.hainaos.vc.config.CommonConfig;
|
||||
import com.hainaos.vc.config.Permissions;
|
||||
import com.hainaos.vc.databinding.ActivityMainBinding;
|
||||
import com.hainaos.vc.dialog.PermissionsDialog;
|
||||
import com.hainaos.vc.dialog.PrivacyPolicyDialog;
|
||||
@@ -61,11 +62,6 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
|
||||
private static final int REQUEST_PERMISSION_CODE = 200;
|
||||
|
||||
String[] permissions = new String[]{
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean setNightMode() {
|
||||
return true;
|
||||
@@ -205,7 +201,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
}
|
||||
|
||||
private void checkSelfPermission() {
|
||||
if (XXPermissions.isGranted(MainActivity.this, permissions)) {
|
||||
if (XXPermissions.isGranted(MainActivity.this, Permissions.STORAGE_PERMISSIONS)) {
|
||||
initDatas();
|
||||
} else {
|
||||
showPermissionsDialog();
|
||||
@@ -226,7 +222,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
public void onGranted() {
|
||||
mPermissionsDialog.dismiss();
|
||||
XXPermissions.with(MainActivity.this)
|
||||
.permission(permissions)
|
||||
.permission(Permissions.STORAGE_PERMISSIONS)
|
||||
.request(new OnPermissionCallback() {
|
||||
@Override
|
||||
public void onGranted(@androidx.annotation.NonNull List<String> permissions, boolean allGranted) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.hainaos.vc.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.media.MediaMetadataRetriever;
|
||||
@@ -11,6 +12,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
@@ -23,9 +25,16 @@ import com.arialyy.aria.core.task.DownloadTask;
|
||||
import com.hainaos.vc.R;
|
||||
import com.hainaos.vc.activity.preview.VideoPreviewActivity;
|
||||
import com.hainaos.vc.bean.CategoryVideoInfo;
|
||||
import com.hainaos.vc.config.Permissions;
|
||||
import com.hainaos.vc.dialog.PermissionsDialog;
|
||||
import com.hainaos.vc.utils.FileUtils;
|
||||
import com.hainaos.vc.utils.GlideLoadUtils;
|
||||
import com.hainaos.vc.utils.TimeUtils;
|
||||
import com.hainaos.vc.utils.ToastUtil;
|
||||
import com.hainaos.vc.view.CustomDialog;
|
||||
import com.hjq.permissions.OnPermissionCallback;
|
||||
import com.hjq.permissions.XXPermissions;
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.shehuan.niv.NiceImageView;
|
||||
|
||||
import java.io.File;
|
||||
@@ -75,15 +84,31 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
||||
String fileName = FileUtils.getFileNamefromURL(url);
|
||||
File file = new File(FileUtils.getHainaVideoPath(mContext) + mDirName + File.separator + fileName);
|
||||
if (file.exists()) {
|
||||
holder.iv_status.setVisibility(View.GONE);
|
||||
holder.tv_download.setText("删除");
|
||||
holder.tv_download.setBackground(mContext.getDrawable(R.drawable.bg_delete_button));
|
||||
} else {
|
||||
holder.iv_status.setVisibility(View.VISIBLE);
|
||||
holder.tv_download.setText("下载");
|
||||
holder.tv_download.setBackground(mContext.getDrawable(R.drawable.bg_download_button));
|
||||
}
|
||||
String cover = categoryVideoInfo.getCover();
|
||||
GlideLoadUtils.getInstance().glideLoad(mContext, cover, holder.video_image);
|
||||
|
||||
holder.duration.setText(TimeUtils.TimeFormat(categoryVideoInfo.getDuration() * 1000));
|
||||
|
||||
holder.tv_download.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (file.exists()) {
|
||||
showDialog(file.getAbsolutePath(), position);
|
||||
} else {
|
||||
if (XXPermissions.isGranted(mContext, Permissions.STORAGE_PERMISSIONS)) {
|
||||
FileUtils.ariaDownload(mContext, mDirName, url, md5);
|
||||
} else {
|
||||
showPermissionsDialog(mContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
holder.video_image.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -93,12 +118,86 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
||||
intent.putExtra("url", file.getAbsolutePath());
|
||||
mContext.startActivity(intent);
|
||||
} else {
|
||||
FileUtils.ariaDownload(mContext, mDirName, url, md5);
|
||||
Toaster.show("请先下载视频");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private PermissionsDialog mPermissionsDialog;
|
||||
|
||||
private void showPermissionsDialog(Context context) {
|
||||
if (mPermissionsDialog != null) {
|
||||
mPermissionsDialog.dismiss();
|
||||
mPermissionsDialog = null;
|
||||
}
|
||||
mPermissionsDialog = new PermissionsDialog(context);
|
||||
mPermissionsDialog.setPermissionsCallback(new PermissionsDialog.PermissionsCallback() {
|
||||
@Override
|
||||
public void onGranted() {
|
||||
mPermissionsDialog.dismiss();
|
||||
XXPermissions.with(context)
|
||||
.permission(Permissions.STORAGE_PERMISSIONS)
|
||||
.request(new OnPermissionCallback() {
|
||||
@Override
|
||||
public void onGranted(@androidx.annotation.NonNull List<String> permissions, boolean allGranted) {
|
||||
Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted);
|
||||
if (!allGranted) {
|
||||
Toast.makeText(context, "存储权限未正常授予", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
Log.e(TAG, "onGranted: 获取存储权限成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDenied(@androidx.annotation.NonNull List<String> permissions, boolean doNotAskAgain) {
|
||||
Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain);
|
||||
if (doNotAskAgain) {
|
||||
Toast.makeText(context, "被永久拒绝授权,请手动授予存储权限", Toast.LENGTH_SHORT).show();
|
||||
// 如果是被永久拒绝就跳转到应用权限系统设置页面
|
||||
XXPermissions.startPermissionActivity(context, permissions);
|
||||
} else {
|
||||
Log.e(TAG, "onGranted: 获取存储权限失败");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDenied() {
|
||||
mPermissionsDialog.dismiss();
|
||||
}
|
||||
});
|
||||
mPermissionsDialog.setContent("本软件需要获取存储权限保存照片和视频,授权之后才可以正常使用");
|
||||
mPermissionsDialog.show();
|
||||
}
|
||||
|
||||
private void showDialog(String path, int position) {
|
||||
CustomDialog dialog = new CustomDialog(mContext);
|
||||
dialog.setTitle("删除文件")
|
||||
.setMessage("确定要删除文件 " + FileUtils.getFileName(path) + "吗")
|
||||
.setPositive("确定")
|
||||
.setNegtive("取消")
|
||||
.setOnClickBottomListener(new CustomDialog.OnClickBottomListener() {
|
||||
@Override
|
||||
public void onPositiveClick() {
|
||||
dialog.dismiss();
|
||||
File file = new File(path);
|
||||
if (file.delete()) {
|
||||
removeItem(position);
|
||||
ToastUtil.show("删除成功");
|
||||
} else {
|
||||
ToastUtil.show("删除失败,检查权限是否开启");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNegtiveClick() {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
public void removeItem(int position) {
|
||||
if (null != mLocalVideoInfos.get(position)) {
|
||||
@@ -123,16 +222,16 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
||||
}
|
||||
|
||||
static class VideoHolder extends RecyclerView.ViewHolder {
|
||||
NiceImageView video_image, iv_status;
|
||||
TextView title, duration;
|
||||
NiceImageView video_image;
|
||||
TextView title, duration, tv_download;
|
||||
ConstraintLayout root;
|
||||
|
||||
public VideoHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
video_image = itemView.findViewById(R.id.video_image);
|
||||
iv_status = itemView.findViewById(R.id.iv_status);
|
||||
title = itemView.findViewById(R.id.title_text);
|
||||
duration = itemView.findViewById(R.id.duration);
|
||||
tv_download = itemView.findViewById(R.id.tv_download);
|
||||
root = itemView.findViewById(R.id.root);
|
||||
}
|
||||
|
||||
@@ -180,7 +279,7 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
||||
try {
|
||||
Log.e(TAG, "taskFail: e " + e.getMessage());
|
||||
} catch (Exception ex) {
|
||||
Log.e(TAG, "taskFail: ex " + e.getMessage());
|
||||
Log.e(TAG, "taskFail: ex " + ex.getMessage());
|
||||
}
|
||||
|
||||
notifyDataSetChanged();
|
||||
|
||||
10
app/src/main/java/com/hainaos/vc/config/Permissions.java
Normal file
10
app/src/main/java/com/hainaos/vc/config/Permissions.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.hainaos.vc.config;
|
||||
|
||||
import android.Manifest;
|
||||
|
||||
public class Permissions {
|
||||
public static final String[] STORAGE_PERMISSIONS = new String[]{
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
};
|
||||
}
|
||||
@@ -6,6 +6,8 @@ import android.os.Environment;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.arialyy.aria.core.Aria;
|
||||
import com.hainaos.vc.bean.AppInfo;
|
||||
import com.hainaos.vc.bean.uiuios.AppUpdateInfo;
|
||||
@@ -76,7 +78,8 @@ public class FileUtils {
|
||||
}
|
||||
|
||||
public static String getHainaVideoPath(Context context) {
|
||||
String path = Environment.getExternalStorageDirectory() + File.separator + "haina";
|
||||
// String path = Environment.getExternalStorageDirectory() + File.separator + "haina";
|
||||
String path = ContextCompat.getExternalFilesDirs(context, Environment.DIRECTORY_DOWNLOADS)[0].getAbsolutePath() + File.separator + "haina";
|
||||
return path + File.separator;
|
||||
}
|
||||
|
||||
@@ -90,7 +93,7 @@ public class FileUtils {
|
||||
String downLoadPath = getHainaVideoPath(context) + dirName + File.separator;
|
||||
File dirFile = new File(downLoadPath);
|
||||
if (!dirFile.exists()) {
|
||||
dirFile.mkdirs();
|
||||
Log.e(TAG, "ariaDownload: mkdirs = " + dirFile.mkdirs());
|
||||
}
|
||||
String fileName = getFileNamefromURL(url);
|
||||
File file = new File(downLoadPath + fileName);
|
||||
|
||||
@@ -79,9 +79,9 @@ public class LenovoCsdkUtil {
|
||||
}
|
||||
|
||||
public String getSerial() {
|
||||
if (BuildConfig.DEBUG) {
|
||||
return "T98005H1024GB32GB";
|
||||
}
|
||||
// if (BuildConfig.DEBUG) {
|
||||
// return "T98005H1024GB32GB";
|
||||
// }
|
||||
|
||||
String sn = mCSDKManager.getDeviceInfo(2);
|
||||
return sn;
|
||||
|
||||
15
app/src/main/res/drawable/bg_delete_button.xml
Normal file
15
app/src/main/res/drawable/bg_delete_button.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid android:color="@color/red" />
|
||||
|
||||
<corners android:radius="16dp" />
|
||||
|
||||
<padding
|
||||
android:bottom="4dp"
|
||||
android:left="12dp"
|
||||
android:right="12dp"
|
||||
android:top="4dp" />
|
||||
|
||||
</shape>
|
||||
15
app/src/main/res/drawable/bg_download_button.xml
Normal file
15
app/src/main/res/drawable/bg_download_button.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid android:color="#0084FF" />
|
||||
|
||||
<corners android:radius="16dp" />
|
||||
|
||||
<padding
|
||||
android:bottom="4dp"
|
||||
android:left="12dp"
|
||||
android:right="12dp"
|
||||
android:top="4dp" />
|
||||
|
||||
</shape>
|
||||
@@ -28,6 +28,7 @@
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/constraintLayout2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:onClick="@{click::exit}"
|
||||
@@ -51,18 +52,34 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:text="@{title}"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_total"
|
||||
app:layout_constraintStart_toEndOf="@+id/constraintLayout2"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="海纳美业学习机" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_total"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:text="视频:0个"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="@string/video_total" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
@@ -87,9 +104,9 @@
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/cl_nodata"
|
||||
android:visibility="gone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -10,41 +10,50 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/constraintLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:layout_height="88dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<com.shehuan.niv.NiceImageView
|
||||
android:id="@+id/video_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:scaleType="centerCrop"
|
||||
app:is_cover_src="true" />
|
||||
app:is_cover_src="true"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.shehuan.niv.NiceImageView
|
||||
android:id="@+id/iv_status"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:src="@drawable/status_download"
|
||||
<TextView
|
||||
android:id="@+id/tv_download"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:background="@drawable/bg_download_button"
|
||||
android:text="下载"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="10sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title_text"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="4dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginHorizontal="8dp"
|
||||
android:maxLines="3"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="12sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:textSize="15sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_download"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/video_image"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.15"
|
||||
tools:text="标题" />
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -11,4 +11,5 @@
|
||||
<string name="privacy_agreement_content">\t\t\t\t请你务必审慎阅读、充分理解“用户协议”,包括但不限于:为了向你提供即时通讯,内容分享等服务,
|
||||
我们需要收集你的设备信息、操作日志等个人信息。
|
||||
\n\t\t\t\t你可阅读《用户协议》了解详细信息。如你同意,请点击“同意”开始接受我们的服务</string>
|
||||
<string name="video_total">视频:%d个</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user