Commit 9d5f373a0a66e038a8e242174e862d3df5b52016

Authored by zhanghaochen
1 parent b9c422a7c5
Exists in master

家长端APP功能完成

Showing 67 changed files with 3586 additions and 1447 deletions   Show diff stats
... ... @@ -8,6 +8,17 @@ def url = rootProject.ext.url
8 8  
9 9  
10 10 android {
  11 + signingConfigs {
  12 +
  13 + config {
  14 + keyAlias 'alias'
  15 + keyPassword '123456'
  16 + storeFile file('key.jks')
  17 + storePassword '123456'
  18 + }
  19 + debug {
  20 + }
  21 + }
11 22 compileSdk 32
12 23  
13 24 defaultConfig {
... ... @@ -20,12 +31,28 @@ android {
20 31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
21 32 }
22 33  
  34 + android.applicationVariants.all {
  35 + variant ->
  36 + variant.outputs.all {
  37 + //在这里修改apk文件名
  38 + outputFileName = "parent-${variant.name}-v${variant.versionName}.apk"
  39 + }
  40 + }
23 41 buildTypes {
  42 + debug {
  43 + minifyEnabled false
  44 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  45 + }
24 46 release {
25 47 minifyEnabled false
26 48 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  49 + signingConfig signingConfigs.config
27 50 }
28 51 }
  52 + lintOptions {
  53 + checkReleaseBuilds false
  54 + abortOnError false
  55 + }
29 56 compileOptions {
30 57 sourceCompatibility JavaVersion.VERSION_1_8
31 58 targetCompatibility JavaVersion.VERSION_1_8
... ... @@ -38,5 +65,5 @@ dependencies {
38 65 implementation 'androidx.appcompat:appcompat:1.5.1'
39 66 implementation 'com.google.android.material:material:1.6.1'
40 67 implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
41   -
  68 + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.50'
42 69 }
43 70 \ No newline at end of file
... ...
No preview for this file type
app/src/main/AndroidManifest.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:tools="http://schemas.android.com/tools"
3 4 package="com.hjx.parent">
4 5  
5 6  
... ... @@ -22,50 +23,76 @@
22 23 <uses-permission android:name="android.permission.VIBRATE" />
23 24  
24 25 <application
  26 + android:name=".MyApplication"
25 27 android:allowBackup="true"
26 28 android:icon="@mipmap/icon"
27 29 android:label="@string/app_name"
28 30 android:supportsRtl="true"
29   - android:theme="@style/Theme.Parent"
30   - android:name=".MyApplication"
31   - >
  31 + android:theme="@style/Theme.Parent">
32 32 <activity
33 33 android:name=".LoginActivity"
34   - android:theme="@style/ThemeSplash"
35   - android:exported="true">
  34 + android:exported="true"
  35 + android:theme="@style/ThemeSplash">
36 36 <intent-filter>
37 37 <action android:name="android.intent.action.MAIN" />
38 38 <category android:name="android.intent.category.LAUNCHER" />
39 39 </intent-filter>
40 40 </activity>
41   - <activity android:name=".MainActivity"
42   - android:theme="@style/Theme.AppCompat.NoActionBar"
43   - />
44   - <activity android:name=".RegisterActivity"
45   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
46   - <activity android:name=".UserActivity"
47   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
48   - <activity android:name=".YinsiActivity"
49   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
50   - <activity android:name=".QRActivity"
51   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
52   - <activity android:name=".AddStudentActivity"
53   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
54   - <activity android:name=".NickActivity"
55   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
56   - <activity android:name=".SexActivity"
57   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
58   - <activity android:name=".NianActivity"
59   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
60   - <activity android:name=".ShenActivity"
61   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
62   - <activity android:name=".AccountActivity"
63   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
64   -
65   - <activity android:name=".ChangePwdActivity"
66   - android:theme="@style/Theme.AppCompat.NoActionBar"/>
  41 + <activity
  42 + android:name=".MainActivity"
  43 + android:launchMode="singleTask"
  44 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  45 + <activity
  46 + android:name=".RegisterActivity"
  47 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  48 + <activity
  49 + android:name=".UserActivity"
  50 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  51 + <activity
  52 + android:name=".YinsiActivity"
  53 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  54 + <activity
  55 + android:name=".QRActivity"
  56 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  57 + <activity
  58 + android:name=".AddStudentActivity"
  59 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  60 + <activity
  61 + android:name=".NickActivity"
  62 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  63 + <activity
  64 + android:name=".SexActivity"
  65 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  66 + <activity
  67 + android:name=".NianActivity"
  68 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  69 + <activity
  70 + android:name=".ShenActivity"
  71 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  72 + <activity
  73 + android:name=".AccountActivity"
  74 + android:theme="@style/Theme.AppCompat.NoActionBar" />
67 75  
  76 + <activity
  77 + android:name=".ChangePwdActivity"
  78 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  79 + <activity
  80 + android:name=".EditStudentActivity"
  81 + android:theme="@style/Theme.AppCompat.NoActionBar" />
  82 + <activity
  83 + android:name=".ChooseActivity"
  84 + android:theme="@style/Theme.AppCompat.NoActionBar" />
68 85  
  86 + <provider
  87 + android:name="androidx.core.content.FileProvider"
  88 + android:authorities="com.hjx.parent.fileprovider"
  89 + android:exported="false"
  90 + android:grantUriPermissions="true">
  91 + <meta-data
  92 + android:name="android.support.FILE_PROVIDER_PATHS"
  93 + android:resource="@xml/file_provider_paths"
  94 + tools:replace="android:resource" />
  95 + </provider>
69 96 </application>
70 97  
71 98 </manifest>
72 99 \ No newline at end of file
... ...
app/src/main/java/com/hjx/parent/AccountActivity.java
1 1 package com.hjx.parent;
2 2  
  3 +import android.app.AlertDialog;
  4 +import android.content.DialogInterface;
  5 +import android.content.Intent;
  6 +import android.graphics.Bitmap;
  7 +import android.net.NetworkRequest;
  8 +import android.net.Uri;
  9 +import android.os.Build;
  10 +import android.os.Bundle;
  11 +import android.os.Environment;
  12 +import android.provider.MediaStore;
  13 +import android.text.TextUtils;
  14 +import android.util.Log;
  15 +import android.view.LayoutInflater;
  16 +import android.view.View;
  17 +import android.widget.ImageView;
3 18 import android.widget.TextView;
  19 +import android.widget.Toast;
4 20  
  21 +import androidx.core.content.FileProvider;
  22 +
  23 +import com.bumptech.glide.Glide;
  24 +import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
  25 +import com.bumptech.glide.request.RequestOptions;
  26 +import com.google.android.material.bottomsheet.BottomSheetDialog;
5 27 import com.prws.common.base.BaseActivity;
6 28 import com.prws.common.base.BasePresenter;
  29 +import com.prws.common.bean.ResponseResult;
  30 +import com.prws.common.net.NetWorks;
  31 +import com.prws.common.utils.LogUtil;
  32 +import com.prws.common.utils.ScreenUtils;
7 33 import com.prws.common.utils.SharedPreferencesUtil;
8 34  
  35 +import org.json.JSONObject;
  36 +
  37 +import java.io.File;
  38 +import java.io.FileOutputStream;
  39 +import java.io.IOException;
  40 +import java.util.HashMap;
  41 +import java.util.Map;
  42 +
  43 +import butterknife.BindView;
  44 +import butterknife.OnClick;
  45 +import io.reactivex.Observer;
  46 +import io.reactivex.disposables.Disposable;
  47 +import okhttp3.ResponseBody;
  48 +
9 49 public class AccountActivity extends BaseActivity {
10 50  
  51 +
11 52 @Override
12 53 protected int layoutResId() {
13 54 return R.layout.activity_setac;
... ... @@ -23,12 +64,25 @@ public class AccountActivity extends BaseActivity {
23 64 return null;
24 65 }
25 66  
26   -
  67 + private static int CAMERA_REQUEST_CODE = 343;
  68 + private static int ALBUM_REQUEST_CODE = 456;
  69 + private static int CROP_REQUEST_CODE = 234;
  70 + private File tempFile;
  71 + private String path;
27 72 TextView tv_6;
  73 + @BindView(R.id.iv_3)
  74 + ImageView iv_3;
  75 +
28 76 @Override
29 77 protected void initView() {
30 78 tv_6 = findViewById(R.id.tv_6);
31 79 String phone = (String) SharedPreferencesUtil.getData("phone", "");
  80 + String photo = (String) SharedPreferencesUtil.getData("photo", "");
  81 + if(!TextUtils.isEmpty(photo)){
  82 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(AccountActivity.this, 45));
  83 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  84 + Glide.with(AccountActivity.this).load(photo).apply(options).into(iv_3);
  85 + }
32 86 if (phone != null && phone.length() > 0)
33 87 tv_6.setText(phone);
34 88 }
... ... @@ -36,7 +90,6 @@ public class AccountActivity extends BaseActivity {
36 90 @Override
37 91 protected void initListener() {
38 92 findViewById(R.id.iv_back).setOnClickListener(view -> onBackPressed());
39   -
40 93 findViewById(R.id.tv_7).setOnClickListener(view -> startActivity(ChangePwdActivity.class));
41 94 }
42 95  
... ... @@ -49,4 +102,235 @@ public class AccountActivity extends BaseActivity {
49 102 public void onNetChanged(int netWorkState) {
50 103  
51 104 }
  105 +
  106 + private void uploadAvatar(File file) {
  107 +
  108 + NetWorks.uploadAvatar(file, new Observer<ResponseResult<Map<String, String>>>() {
  109 + @Override
  110 + public void onSubscribe(Disposable d) {
  111 +
  112 + }
  113 +
  114 + @Override
  115 + public void onNext(ResponseResult<Map<String, String>> responseBody) {
  116 + if (responseBody.getData() != null && responseBody.getCode() == 200) {
  117 + path = responseBody.getData().get("imageUrl");
  118 + editUser(path);
  119 + }
  120 + }
  121 +
  122 + @Override
  123 + public void onError(Throwable e) {
  124 + e.toString();
  125 + }
  126 +
  127 + @Override
  128 + public void onComplete() {
  129 +
  130 + }
  131 + });
  132 + }
  133 +
  134 + public void editUser(String path) {
  135 + Map map = new HashMap();
  136 + map.put("userId", SharedPreferencesUtil.getData("userId", ""));
  137 + map.put("photo", path);
  138 +
  139 + NetWorks.editUser(NetWorks.getMapRequestBody(map), new Observer<ResponseBody>() {
  140 + @Override
  141 + public void onSubscribe(Disposable d) {
  142 +
  143 + }
  144 +
  145 + @Override
  146 + public void onNext(ResponseBody responseBody) {
  147 + try {
  148 + String str = responseBody.string().toString();
  149 + LogUtil.e(TAG, "----" + str);
  150 + JSONObject jo = new JSONObject(str);
  151 + boolean isSucceed = jo.getBoolean("success");
  152 + if (isSucceed) {
  153 + SharedPreferencesUtil.putData("photo", path);
  154 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(AccountActivity.this, 45));
  155 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  156 + Glide.with(AccountActivity.this).load(path).apply(options).into(iv_3);
  157 + Toast.makeText(AccountActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
  158 + } else {
  159 + Toast.makeText(AccountActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
  160 + }
  161 + } catch (Exception e) {
  162 + e.printStackTrace();
  163 + Toast.makeText(AccountActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show();
  164 + }
  165 + }
  166 +
  167 + @Override
  168 + public void onError(Throwable e) {
  169 +
  170 + }
  171 +
  172 + @Override
  173 + public void onComplete() {
  174 +
  175 + }
  176 + });
  177 + }
  178 +
  179 + public File saveImage(String name, Bitmap bmp) {
  180 + File appDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath());
  181 + if (!appDir.exists()) {
  182 + appDir.mkdir();
  183 + }
  184 + String fileName = name + ".jpg";
  185 + File file = new File(appDir, fileName);
  186 + try {
  187 + FileOutputStream fos = new FileOutputStream(file);
  188 + bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
  189 + fos.flush();
  190 + fos.close();
  191 + return file;
  192 + } catch (IOException e) {
  193 + Log.d("dsadsadsa", e.getLocalizedMessage());
  194 + e.printStackTrace();
  195 + }
  196 + return null;
  197 + }
  198 +
  199 + @Override
  200 + protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  201 + super.onActivityResult(requestCode, resultCode, intent);
  202 + if (requestCode == CAMERA_REQUEST_CODE) {
  203 + if (resultCode == RESULT_OK) {
  204 + //用相机返回的照片去调用剪裁也需要对Uri进行处理
  205 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  206 + Uri contentUri = FileProvider.getUriForFile(this,
  207 + this.getPackageName() + ".fileprovider", tempFile);
  208 + cropPhoto(contentUri);
  209 + } else {
  210 + cropPhoto(Uri.fromFile(tempFile));
  211 + }
  212 + }
  213 + } else if (requestCode == ALBUM_REQUEST_CODE) {
  214 + if (resultCode == RESULT_OK) {
  215 + Uri uri = intent.getData();
  216 + cropPhoto(uri);
  217 + }
  218 + } else if (requestCode == CROP_REQUEST_CODE) {
  219 + if (intent == null) {
  220 + return;
  221 + }
  222 + Bundle bundle = intent.getExtras();
  223 + if (bundle != null) {
  224 + //在这里获得了剪裁后的Bitmap对象,可以用于上传
  225 + Bitmap image = bundle.getParcelable("data");
  226 + //设置到ImageView上
  227 + //也可以进行一些保存、压缩等操作后上传
  228 + File file = saveImage("head_output", image);
  229 + uploadAvatar(file);
  230 + // Log.d("dsadsadsa",path);
  231 + }
  232 + }
  233 + }
  234 +
  235 + private void getPicFromCamera() {
  236 + //用于保存调用相机拍照后所生成的文件
  237 + tempFile = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg");
  238 + //跳转到调用系统相机
  239 + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  240 + //判断版本
  241 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //如果在Android7.0以上,使用FileProvider获取Uri
  242 + intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  243 + Uri contentUri = FileProvider.getUriForFile(this,
  244 + this.getPackageName() + ".fileprovider", tempFile);
  245 + intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
  246 + } else { //否则使用Uri.fromFile(file)方法获取Uri
  247 + intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
  248 + }
  249 + startActivityForResult(intent, CAMERA_REQUEST_CODE);
  250 + }
  251 +
  252 + private void cropPhoto(Uri uri) {
  253 + Uri contentUri = Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg"));
  254 + Intent intent = new Intent("com.android.camera.action.CROP");
  255 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  256 + //Android 7.0需要临时添加读取Url的权限, 添加此属性是为了解决:调用裁剪框时候提示:图片无法加载或者加载图片失败或者无法加载此图片
  257 + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
  258 + }
  259 + intent.setDataAndType(uri, "image/*");
  260 + intent.putExtra("crop", "true");//发送裁剪信号,去掉也能进行裁剪
  261 + intent.putExtra("scale", true);// 设置缩放
  262 + intent.putExtra("scaleUpIfNeeded", true);// 去黑边
  263 + intent.putExtra("aspectX", 1);
  264 + intent.putExtra("aspectY", 1);
  265 + //上述两个属性控制裁剪框的缩放比例。
  266 + //当用户用手拉伸裁剪框时候,裁剪框会按照上述比例缩放。
  267 + intent.putExtra("outputX", 300);//属性控制裁剪完毕,保存的图片的大小格式。
  268 + intent.putExtra("outputY", 300);//你按照1:1的比例来裁剪的,如果最后成像是800*400,那么按照2:1的样式保存,
  269 + intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//输出裁剪文件的格式
  270 + intent.putExtra("return-data", true);//是否返回裁剪后图片的Bitmap
  271 + intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);//设置输出路径
  272 + startActivityForResult(intent, CROP_REQUEST_CODE);
  273 + }
  274 +
  275 + /**
  276 + * 从相册获取图片
  277 + */
  278 + private void getPicFromAlbm() {
  279 + Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
  280 + photoPickerIntent.setType("image/*");
  281 + startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE);
  282 + }
  283 +
  284 + @OnClick(R.id.iv_3)
  285 + public void showButtonDialog(View view) {
  286 + BottomSheetDialog dialog = new BottomSheetDialog(this, R.style.BottomSheetDialog);
  287 + View bottomView = LayoutInflater.from(this).inflate(R.layout.bottom_sheet_layout, null);
  288 + dialog.setContentView(bottomView);
  289 + bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
  290 + @Override
  291 + public void onClick(View view) {
  292 + dialog.dismiss();
  293 + getPicFromCamera();
  294 + }
  295 + });
  296 + bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
  297 + @Override
  298 + public void onClick(View view) {
  299 + dialog.dismiss();
  300 + getPicFromAlbm();
  301 + }
  302 + });
  303 + bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
  304 + @Override
  305 + public void onClick(View view) {
  306 + dialog.dismiss();
  307 + }
  308 + });
  309 + dialog.show();
  310 + }
  311 +
  312 + @OnClick(R.id.logout)
  313 + public void logout(View view) {
  314 + AlertDialog.Builder builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
  315 + builder.setTitle("温馨提示");
  316 + builder.setMessage("是否退出登录?");
  317 + builder.setCancelable(false);
  318 + builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
  319 + @Override
  320 + public void onClick(DialogInterface dialogInterface, int i) {
  321 + dialogInterface.dismiss();
  322 + }
  323 + });
  324 + builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
  325 + @Override
  326 + public void onClick(DialogInterface dialogInterface, int i) {
  327 + SharedPreferencesUtil.clear(AccountActivity.this);
  328 + dialogInterface.dismiss();
  329 + setResult(1001);
  330 + finish();
  331 + }
  332 + });
  333 + builder.show();
  334 + }
  335 +
52 336 }
53 337 \ No newline at end of file
... ...
app/src/main/java/com/hjx/parent/AddStudentActivity.java
1 1 package com.hjx.parent;
2 2  
  3 +import android.content.Intent;
  4 +import android.graphics.Bitmap;
3 5 import android.graphics.Color;
  6 +import android.net.Uri;
  7 +import android.os.Build;
  8 +import android.os.Bundle;
  9 +import android.os.Environment;
  10 +import android.provider.MediaStore;
  11 +import android.util.Log;
  12 +import android.view.LayoutInflater;
4 13 import android.view.View;
5 14 import android.widget.Button;
  15 +import android.widget.ImageView;
6 16 import android.widget.TextView;
7 17 import android.widget.Toast;
8 18  
  19 +import androidx.core.content.FileProvider;
  20 +
  21 +import com.bumptech.glide.Glide;
  22 +import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
  23 +import com.bumptech.glide.request.RequestOptions;
  24 +import com.google.android.material.bottomsheet.BottomSheetDialog;
9 25 import com.prws.common.base.BaseActivity;
10 26 import com.prws.common.base.BasePresenter;
  27 +import com.prws.common.bean.ResponseResult;
11 28 import com.prws.common.net.NetWorks;
12 29 import com.prws.common.utils.LogUtil;
  30 +import com.prws.common.utils.ScreenUtils;
13 31 import com.prws.common.utils.SharedPreferencesUtil;
14 32  
15 33 import org.json.JSONObject;
16 34  
  35 +import java.io.File;
  36 +import java.io.FileOutputStream;
  37 +import java.io.IOException;
17 38 import java.util.HashMap;
18 39 import java.util.Map;
19 40  
  41 +import butterknife.BindView;
  42 +import butterknife.OnClick;
20 43 import io.reactivex.Observer;
21 44 import io.reactivex.disposables.Disposable;
22 45 import okhttp3.ResponseBody;
... ... @@ -43,6 +66,8 @@ public class AddStudentActivity extends BaseActivity {
43 66 View view_5;
44 67 Button btn_next;
45 68 TextView tv_name, tv_sex, tv_nian, tv_shen;
  69 + @BindView(R.id.iv_avatar)
  70 + ImageView iv_avatar;
46 71  
47 72 @Override
48 73 protected void initView() {
... ... @@ -54,8 +79,6 @@ public class AddStudentActivity extends BaseActivity {
54 79 tv_sex = findViewById(R.id.tv_sex);
55 80 tv_nian = findViewById(R.id.tv_nian);
56 81 tv_shen = findViewById(R.id.tv_shen);
57   -
58   -
59 82 btn_next = findViewById(R.id.btn_next);
60 83 }
61 84  
... ... @@ -63,13 +86,18 @@ public class AddStudentActivity extends BaseActivity {
63 86 boolean isSex = false;
64 87 boolean isNian = false;
65 88 boolean isShen = false;
  89 + private static int CAMERA_REQUEST_CODE = 343;
  90 + private static int ALBUM_REQUEST_CODE = 456;
  91 + private static int CROP_REQUEST_CODE = 234;
  92 + private File tempFile;
  93 + private String path;
66 94  
67 95 @Override
68 96 protected void onStart() {
69 97 super.onStart();
70 98 String name = (String) SharedPreferencesUtil.getData("setName", "");
71 99 String sex = (String) SharedPreferencesUtil.getData("setSex", "");
72   - String nian = (String) SharedPreferencesUtil.getData("setNian", "");
  100 + String nian = (String) SharedPreferencesUtil.getData("setNian", "") + SharedPreferencesUtil.getData("setXueq", "");
73 101 String shen = (String) SharedPreferencesUtil.getData("setShen", "");
74 102  
75 103 if (name != null && name.length() > 0) {
... ... @@ -128,8 +156,10 @@ public class AddStudentActivity extends BaseActivity {
128 156 SharedPreferencesUtil.putData("setNian", "");
129 157 SharedPreferencesUtil.putData("setShen", "");
130 158 SharedPreferencesUtil.putData("setXueq", "");
131   -
  159 + SharedPreferencesUtil.putData("grade", 0);
132 160 }
  161 +
  162 +
133 163 public void addStudent() {
134 164 String name = (String) SharedPreferencesUtil.getData("setName", "");
135 165 String sex = (String) SharedPreferencesUtil.getData("setSex", "");
... ... @@ -140,11 +170,13 @@ public class AddStudentActivity extends BaseActivity {
140 170  
141 171 Map map = new HashMap();
142 172 map.put("nickName", name);
143   - map.put("gender", "1");
144   - map.put("gradeId", 1);
  173 + map.put("gender", "男".equals(sex) ? 0 : 1);
  174 + map.put("gradeId", SharedPreferencesUtil.getData("grade", 1));
145 175 map.put("parentIdentity", shen);
146 176 map.put("term", xueq);
147   -
  177 + if (path != null) {
  178 + map.put("photo", path);
  179 + }
148 180  
149 181 NetWorks.registerStudent(NetWorks.getMapRequestBody(map), new Observer<ResponseBody>() {
150 182 @Override
... ... @@ -194,4 +226,167 @@ public class AddStudentActivity extends BaseActivity {
194 226 public void onNetChanged(int netWorkState) {
195 227  
196 228 }
  229 +
  230 + @OnClick(R.id.iv_avatar)
  231 + public void showButtonDialog(View view) {
  232 + BottomSheetDialog dialog = new BottomSheetDialog(this, R.style.BottomSheetDialog);
  233 + View bottomView = LayoutInflater.from(this).inflate(R.layout.bottom_sheet_layout, null);
  234 + dialog.setContentView(bottomView);
  235 + bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
  236 + @Override
  237 + public void onClick(View view) {
  238 + dialog.dismiss();
  239 + getPicFromCamera();
  240 + }
  241 + });
  242 + bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
  243 + @Override
  244 + public void onClick(View view) {
  245 + dialog.dismiss();
  246 + getPicFromAlbm();
  247 + }
  248 + });
  249 + bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
  250 + @Override
  251 + public void onClick(View view) {
  252 + dialog.dismiss();
  253 + }
  254 + });
  255 + dialog.show();
  256 + }
  257 +
  258 + private void cropPhoto(Uri uri) {
  259 + Uri contentUri = Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg"));
  260 + Intent intent = new Intent("com.android.camera.action.CROP");
  261 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  262 + //Android 7.0需要临时添加读取Url的权限, 添加此属性是为了解决:调用裁剪框时候提示:图片无法加载或者加载图片失败或者无法加载此图片
  263 + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
  264 + }
  265 + intent.setDataAndType(uri, "image/*");
  266 + intent.putExtra("crop", "true");//发送裁剪信号,去掉也能进行裁剪
  267 + intent.putExtra("scale", true);// 设置缩放
  268 + intent.putExtra("scaleUpIfNeeded", true);// 去黑边
  269 + intent.putExtra("aspectX", 1);
  270 + intent.putExtra("aspectY", 1);
  271 + //上述两个属性控制裁剪框的缩放比例。
  272 + //当用户用手拉伸裁剪框时候,裁剪框会按照上述比例缩放。
  273 + intent.putExtra("outputX", 300);//属性控制裁剪完毕,保存的图片的大小格式。
  274 + intent.putExtra("outputY", 300);//你按照1:1的比例来裁剪的,如果最后成像是800*400,那么按照2:1的样式保存,
  275 + intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//输出裁剪文件的格式
  276 + intent.putExtra("return-data", true);//是否返回裁剪后图片的Bitmap
  277 + intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);//设置输出路径
  278 + startActivityForResult(intent, CROP_REQUEST_CODE);
  279 + }
  280 +
  281 + @Override
  282 + protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  283 + super.onActivityResult(requestCode, resultCode, intent);
  284 + if (requestCode == CAMERA_REQUEST_CODE) {
  285 + if (resultCode == RESULT_OK) {
  286 + //用相机返回的照片去调用剪裁也需要对Uri进行处理
  287 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  288 + Uri contentUri = FileProvider.getUriForFile(AddStudentActivity.this,
  289 + this.getPackageName() + ".fileprovider", tempFile);
  290 + cropPhoto(contentUri);
  291 + } else {
  292 + cropPhoto(Uri.fromFile(tempFile));
  293 + }
  294 + }
  295 + } else if (requestCode == ALBUM_REQUEST_CODE) {
  296 + if (resultCode == RESULT_OK) {
  297 + Uri uri = intent.getData();
  298 + cropPhoto(uri);
  299 + }
  300 + } else if (requestCode == CROP_REQUEST_CODE) {
  301 + if (intent == null) {
  302 + return;
  303 + }
  304 + Bundle bundle = intent.getExtras();
  305 + if (bundle != null) {
  306 + //在这里获得了剪裁后的Bitmap对象,可以用于上传
  307 + Bitmap image = bundle.getParcelable("data");
  308 + //设置到ImageView上
  309 + //也可以进行一些保存、压缩等操作后上传
  310 + File file = saveImage("head_output", image);
  311 + uploadAvatar(file);
  312 + // Log.d("dsadsadsa",path);
  313 + }
  314 + }
  315 + }
  316 +
  317 + private void uploadAvatar(File file) {
  318 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(this, 45));
  319 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  320 + Glide.with(this).load(file).apply(options).into(iv_avatar);
  321 + NetWorks.uploadAvatar(file, new Observer<ResponseResult<Map<String, String>>>() {
  322 + @Override
  323 + public void onSubscribe(Disposable d) {
  324 +
  325 + }
  326 +
  327 + @Override
  328 + public void onNext(ResponseResult<Map<String, String>> responseBody) {
  329 + if (responseBody.getData() != null && responseBody.getCode() == 200) {
  330 + path = responseBody.getData().get("imageUrl");
  331 + }
  332 + }
  333 +
  334 + @Override
  335 + public void onError(Throwable e) {
  336 + e.toString();
  337 + }
  338 +
  339 + @Override
  340 + public void onComplete() {
  341 +
  342 + }
  343 + });
  344 + }
  345 +
  346 + public File saveImage(String name, Bitmap bmp) {
  347 + File appDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath());
  348 + if (!appDir.exists()) {
  349 + appDir.mkdir();
  350 + }
  351 + String fileName = name + ".jpg";
  352 + File file = new File(appDir, fileName);
  353 + try {
  354 + FileOutputStream fos = new FileOutputStream(file);
  355 + bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
  356 + fos.flush();
  357 + fos.close();
  358 + return file;
  359 + } catch (IOException e) {
  360 + Log.d("dsadsadsa", e.getLocalizedMessage());
  361 + e.printStackTrace();
  362 + }
  363 + return null;
  364 + }
  365 +
  366 + private void getPicFromCamera() {
  367 + //用于保存调用相机拍照后所生成的文件
  368 + tempFile = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg");
  369 + //跳转到调用系统相机
  370 + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  371 + //判断版本
  372 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //如果在Android7.0以上,使用FileProvider获取Uri
  373 + intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  374 + Uri contentUri = FileProvider.getUriForFile(AddStudentActivity.this,
  375 + this.getPackageName() + ".fileprovider", tempFile);
  376 + intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
  377 + } else { //否则使用Uri.fromFile(file)方法获取Uri
  378 + intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
  379 + }
  380 + startActivityForResult(intent, CAMERA_REQUEST_CODE);
  381 + }
  382 +
  383 + /**
  384 + * 从相册获取图片
  385 + */
  386 + private void getPicFromAlbm() {
  387 + Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
  388 + photoPickerIntent.setType("image/*");
  389 + startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE);
  390 + }
  391 +
197 392 }
... ...
app/src/main/java/com/hjx/parent/ChangePwdActivity.java
... ... @@ -15,11 +15,16 @@ import org.json.JSONObject;
15 15 import java.util.HashMap;
16 16 import java.util.Map;
17 17  
  18 +import butterknife.BindView;
18 19 import io.reactivex.Observer;
19 20 import io.reactivex.disposables.Disposable;
20 21 import okhttp3.ResponseBody;
21 22  
22 23 public class ChangePwdActivity extends BaseActivity {
  24 + @BindView(R.id.et_old_password)
  25 + EditText et_old_password;
  26 + @BindView(R.id.et_pwd_2)
  27 + EditText et_pwd_2;
23 28  
24 29 @Override
25 30 protected int layoutResId() {
... ... @@ -37,39 +42,40 @@ public class ChangePwdActivity extends BaseActivity {
37 42 }
38 43  
39 44  
40   -
41 45 EditText et_pwd;
  46 +
42 47 @Override
43 48 protected void initView() {
44   -
45   -
46 49 et_pwd = findViewById(R.id.et_pwd);
47 50 }
48 51  
49 52 @Override
50 53 protected void initListener() {
51 54 findViewById(R.id.iv_back).setOnClickListener(view -> onBackPressed());
52   -
53 55 findViewById(R.id.btn_next).setOnClickListener(view -> {
54 56 String pwd = et_pwd.getText().toString().trim();
55   - if (pwd == null || pwd.length() == 0){
56   - Toast.makeText(this,"密码不能为空",Toast.LENGTH_SHORT).show();
  57 + if (pwd == null || pwd.length() == 0) {
  58 + Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
  59 + return;
  60 + }
  61 + if (pwd.length() < 6 || pwd.length() > 16) {
  62 + Toast.makeText(this, "密码必须为6-16位,数字或字母", Toast.LENGTH_SHORT).show();
  63 + return;
  64 + }
  65 + if (!pwd.equals(et_pwd_2.getText().toString())) {
  66 + Toast.makeText(this, "两次密码输入不一致", Toast.LENGTH_SHORT).show();
57 67 return;
58 68 }
59   -
60 69 changePwd(pwd);
61   -
62 70 });
63   -
64 71 }
65 72  
66   - public void changePwd(String pwd){
  73 + public void changePwd(String pwd) {
67 74 String userId = (String) SharedPreferencesUtil.getData("userId", "");
68 75 Map map = new HashMap();
69   - map.put("userId",userId);
70   - map.put("password",pwd);
71   -
72   -
  76 + map.put("userId", userId);
  77 + map.put("password", pwd);
  78 + map.put("oldPassword", et_old_password.getText().toString());
73 79 NetWorks.changePassword(NetWorks.getMapRequestBody(map), new Observer<ResponseBody>() {
74 80 @Override
75 81 public void onSubscribe(Disposable d) {
... ... @@ -83,19 +89,19 @@ public class ChangePwdActivity extends BaseActivity {
83 89 String str = responseBody.string().toString();
84 90  
85 91  
86   - LogUtil.e(TAG,"----"+str);
  92 + LogUtil.e(TAG, "----" + str);
87 93 JSONObject jo = new JSONObject(str);
88   - boolean isSucceed = jo.getBoolean("success");
89   - if (isSucceed){
  94 + boolean isSucceed = jo.getBoolean("success");
  95 + if (isSucceed) {
90 96 Toast.makeText(ChangePwdActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
91 97 finish();
92 98  
93   - }else {
  99 + } else {
94 100 Toast.makeText(ChangePwdActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
95 101 }
96   - }catch (Exception e){
  102 + } catch (Exception e) {
97 103 e.printStackTrace();
98   - Toast.makeText(ChangePwdActivity.this,"服务繁忙,请重试",Toast.LENGTH_SHORT).show();
  104 + Toast.makeText(ChangePwdActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show();
99 105 }
100 106  
101 107 }
... ...
app/src/main/java/com/hjx/parent/ChooseActivity.java
... ... @@ -0,0 +1,200 @@
  1 +package com.hjx.parent;
  2 +
  3 +import android.content.Intent;
  4 +import android.text.TextUtils;
  5 +import android.view.View;
  6 +import android.widget.ImageView;
  7 +
  8 +import androidx.annotation.NonNull;
  9 +import androidx.recyclerview.widget.LinearLayoutManager;
  10 +import androidx.recyclerview.widget.RecyclerView;
  11 +
  12 +import com.bumptech.glide.Glide;
  13 +import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
  14 +import com.bumptech.glide.request.RequestOptions;
  15 +import com.chad.library.adapter.base.BaseQuickAdapter;
  16 +import com.chad.library.adapter.base.BaseViewHolder;
  17 +import com.google.gson.Gson;
  18 +import com.hjx.parent.bean.StudentBean;
  19 +import com.prws.common.base.BaseActivity;
  20 +import com.prws.common.base.BasePresenter;
  21 +import com.prws.common.net.NetWorks;
  22 +import com.prws.common.utils.LogUtil;
  23 +import com.prws.common.utils.ScreenUtils;
  24 +import com.prws.common.utils.SharedPreferencesUtil;
  25 +
  26 +import org.json.JSONArray;
  27 +import org.json.JSONObject;
  28 +
  29 +import java.util.ArrayList;
  30 +
  31 +import butterknife.BindView;
  32 +import butterknife.OnClick;
  33 +import io.reactivex.Observer;
  34 +import io.reactivex.disposables.Disposable;
  35 +import okhttp3.ResponseBody;
  36 +
  37 +public class ChooseActivity extends BaseActivity {
  38 + @BindView(R.id.recycle)
  39 + RecyclerView recycle;
  40 + private int select = 0;
  41 +
  42 + @Override
  43 + protected int layoutResId() {
  44 + return R.layout.choose_activity;
  45 + }
  46 +
  47 + @Override
  48 + public Object getContract() {
  49 + return null;
  50 + }
  51 +
  52 + @Override
  53 + public BasePresenter getPresenter() {
  54 + return null;
  55 + }
  56 +
  57 + @Override
  58 + protected void initView() {
  59 +
  60 + }
  61 +
  62 + @Override
  63 + protected void initListener() {
  64 +
  65 + }
  66 +
  67 + @Override
  68 + protected void initData() {
  69 +
  70 + }
  71 +
  72 + @Override
  73 + public void onNetChanged(int netWorkState) {
  74 +
  75 + }
  76 +
  77 + @Override
  78 + protected void onResume() {
  79 + super.onResume();
  80 + loadChildList();
  81 + }
  82 +
  83 + ArrayList<StudentBean> alist = new ArrayList<>();
  84 +
  85 + public void loadChildList() {
  86 + NetWorks.listChildren(new Observer<ResponseBody>() {
  87 + @Override
  88 + public void onSubscribe(Disposable d) {
  89 +
  90 + }
  91 +
  92 + @Override
  93 + public void onNext(ResponseBody responseBody) {
  94 + try {
  95 +
  96 + String str = responseBody.string().toString();
  97 +
  98 +
  99 + LogUtil.e("TAG", "----" + str);
  100 + JSONObject jo = new JSONObject(str);
  101 + boolean isSucceed = jo.getBoolean("success");
  102 + if (isSucceed) {
  103 + JSONArray jarr = jo.getJSONArray("data");
  104 + alist.clear();
  105 + for (int i = 0; i < jarr.length(); i++) {
  106 + JSONObject jo2 = jarr.getJSONObject(i);
  107 + Gson gson = new Gson();
  108 + StudentBean sb = gson.fromJson(jo2.toString(), StudentBean.class);
  109 + alist.add(sb);
  110 + }
  111 + if (alist.size() > 0) {
  112 + loadList();
  113 + }
  114 +
  115 + } else {
  116 +
  117 + }
  118 + } catch (Exception e) {
  119 + e.printStackTrace();
  120 + }
  121 + }
  122 +
  123 + @Override
  124 + public void onError(Throwable e) {
  125 +
  126 + }
  127 +
  128 + @Override
  129 + public void onComplete() {
  130 +
  131 + }
  132 + });
  133 + }
  134 +
  135 + public void loadList() {
  136 + StudentBean sb = new StudentBean();
  137 + sb.setNickName("添加学生");
  138 + alist.add(sb);
  139 + String student = (String) SharedPreferencesUtil.getData("student", "");
  140 + try {
  141 + StudentBean studentBean = new Gson().fromJson(student, StudentBean.class);
  142 + for (int i = 0; i < alist.size(); i++) {
  143 + if (studentBean.getStuId().equals(alist.get(i).getStuId())) {
  144 + select = i;
  145 + break;
  146 + }
  147 + }
  148 + } catch (Exception e) {
  149 +
  150 + }
  151 + BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_child_choose, alist) {
  152 + @Override
  153 + protected void convert(@NonNull BaseViewHolder item, Object o) {
  154 + StudentBean studentBean = alist.get(item.getAdapterPosition());
  155 + item.setText(R.id.tv_name, studentBean.getNickName());
  156 + if (TextUtils.isEmpty(studentBean.getStuId())) {
  157 + item.setVisible(R.id.rl_add, true);
  158 + item.getConvertView().setOnClickListener(new View.OnClickListener() {
  159 + @Override
  160 + public void onClick(View view) {
  161 + startActivity(new Intent(ChooseActivity.this, AddStudentActivity.class));
  162 + }
  163 + });
  164 + } else {
  165 + item.setBackgroundRes(R.id.rl_child, select == item.getAdapterPosition() ? R.drawable.bg_solid_white_10_or : R.drawable.bg_solid_white_10);
  166 + item.setImageResource(R.id.iv_select, select == item.getAdapterPosition() ? R.mipmap.gx : R.mipmap.wsyq);
  167 + item.setVisible(R.id.rl_add, false);
  168 + if (TextUtils.isEmpty(studentBean.getPhoto())) {
  169 + item.setImageResource(R.id.iv_avatar, studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female);
  170 + } else {
  171 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(ChooseActivity.this, 45));
  172 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  173 + Glide.with(ChooseActivity.this).load(studentBean.getPhoto()).apply(options).into((ImageView) item.getView(R.id.iv_avatar));
  174 + }
  175 + item.setVisible(R.id.iv_vip, !"虚拟".equals(studentBean.getTeacherIdentity()));
  176 + item.getConvertView().setOnClickListener(new View.OnClickListener() {
  177 + @Override
  178 + public void onClick(View view) {
  179 + select = item.getAdapterPosition();
  180 + notifyDataSetChanged();
  181 + }
  182 + });
  183 + }
  184 + }
  185 + };
  186 + recycle.setLayoutManager(new LinearLayoutManager(ChooseActivity.this, LinearLayoutManager.VERTICAL, false));
  187 + recycle.setAdapter(adapter);
  188 + }
  189 +
  190 + @OnClick(R.id.tv_confirm)
  191 + public void confirm(View view) {
  192 + if (alist.size() > 0 && alist.size() - 1 >= select && alist.get(select) != null) {
  193 + StudentBean studentBean = alist.get(select);
  194 + Intent intent = new Intent(ChooseActivity.this, MainActivity.class);
  195 + SharedPreferencesUtil.putData("student", new Gson().toJson(studentBean));
  196 + startActivity(intent);
  197 + finish();
  198 + }
  199 + }
  200 +}
... ...
app/src/main/java/com/hjx/parent/EditStudentActivity.java
... ... @@ -0,0 +1,384 @@
  1 +package com.hjx.parent;
  2 +
  3 +import android.content.Intent;
  4 +import android.graphics.Bitmap;
  5 +import android.graphics.Color;
  6 +import android.net.Uri;
  7 +import android.os.Build;
  8 +import android.os.Bundle;
  9 +import android.os.Environment;
  10 +import android.provider.MediaStore;
  11 +import android.text.TextUtils;
  12 +import android.util.Log;
  13 +import android.view.LayoutInflater;
  14 +import android.view.View;
  15 +import android.widget.Button;
  16 +import android.widget.ImageView;
  17 +import android.widget.TextView;
  18 +import android.widget.Toast;
  19 +
  20 +import androidx.core.content.FileProvider;
  21 +
  22 +import com.bumptech.glide.Glide;
  23 +import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
  24 +import com.bumptech.glide.request.RequestOptions;
  25 +import com.google.android.material.bottomsheet.BottomSheetDialog;
  26 +import com.google.gson.Gson;
  27 +import com.hjx.parent.bean.StudentBean;
  28 +import com.prws.common.base.BaseActivity;
  29 +import com.prws.common.base.BasePresenter;
  30 +import com.prws.common.bean.ResponseResult;
  31 +import com.prws.common.net.NetWorks;
  32 +import com.prws.common.utils.LogUtil;
  33 +import com.prws.common.utils.ScreenUtils;
  34 +import com.prws.common.utils.SharedPreferencesUtil;
  35 +
  36 +import org.json.JSONObject;
  37 +
  38 +import java.io.File;
  39 +import java.io.FileOutputStream;
  40 +import java.io.IOException;
  41 +import java.util.HashMap;
  42 +import java.util.Map;
  43 +
  44 +import butterknife.BindView;
  45 +import butterknife.OnClick;
  46 +import io.reactivex.Observer;
  47 +import io.reactivex.disposables.Disposable;
  48 +
  49 +public class EditStudentActivity extends BaseActivity {
  50 + View view_2;
  51 + View view_3;
  52 + View view_4;
  53 + View view_5;
  54 + Button btn_next;
  55 + TextView tv_name, tv_sex, tv_nian, tv_shen;
  56 + @BindView(R.id.iv_avatar)
  57 + ImageView iv_avatar;
  58 + @BindView(R.id.tv_teacher)
  59 + TextView tv_teacher;
  60 + @BindView(R.id.iv_teacher)
  61 + ImageView iv_teacher;
  62 + private static int CAMERA_REQUEST_CODE = 343;
  63 + private static int ALBUM_REQUEST_CODE = 456;
  64 + private static int CROP_REQUEST_CODE = 234;
  65 + private File tempFile;
  66 + private String path;
  67 + StudentBean studentBean;
  68 +
  69 + @Override
  70 + protected int layoutResId() {
  71 + return R.layout.activity_edit_stu;
  72 + }
  73 +
  74 + @Override
  75 + public Object getContract() {
  76 + return null;
  77 + }
  78 +
  79 + @Override
  80 + public BasePresenter getPresenter() {
  81 + return null;
  82 + }
  83 +
  84 + @Override
  85 + protected void initView() {
  86 + view_2 = findViewById(R.id.view_2);
  87 + view_3 = findViewById(R.id.view_3);
  88 + view_4 = findViewById(R.id.view_4);
  89 + view_5 = findViewById(R.id.view_5);
  90 + tv_name = findViewById(R.id.tv_name);
  91 + tv_sex = findViewById(R.id.tv_sex);
  92 + tv_nian = findViewById(R.id.tv_nian);
  93 + tv_shen = findViewById(R.id.tv_shen);
  94 + btn_next = findViewById(R.id.btn_next);
  95 + }
  96 +
  97 + @Override
  98 + protected void onStart() {
  99 + super.onStart();
  100 + String name = (String) SharedPreferencesUtil.getData("setName", "");
  101 + String sex = (String) SharedPreferencesUtil.getData("setSex", "");
  102 + String nian = (String) SharedPreferencesUtil.getData("setNian", "");
  103 + String shen = (String) SharedPreferencesUtil.getData("setShen", "");
  104 + String xueq = (String) SharedPreferencesUtil.getData("setXueq", "");
  105 + btn_next.setTextColor(Color.WHITE);
  106 + btn_next.setBackground(getResources().getDrawable(R.drawable.bg_solid_btn));
  107 + studentBean = new Gson().fromJson(getIntent().getStringExtra("student"), StudentBean.class);
  108 + if (name != null && name.length() > 0) {
  109 + studentBean.setNickName(name);
  110 + }
  111 + if (sex != null && sex.length() > 0) {
  112 + studentBean.setGender("男".equals(sex) ? 0 : 1);
  113 + }
  114 + if (nian != null && nian.length() > 0) {
  115 + studentBean.setGrade(nian);
  116 + studentBean.setGradeId((Integer) SharedPreferencesUtil.getData("grade", 1));
  117 + }
  118 + if (xueq != null && xueq.length() > 0) {
  119 + studentBean.setTerm(xueq);
  120 + }
  121 + if (shen != null && shen.length() > 0) {
  122 + studentBean.setParentIdentity(shen);
  123 + }
  124 + tv_name.setText(studentBean.getNickName());
  125 + tv_nian.setText(studentBean.getGrade() + studentBean.getTerm());
  126 + tv_sex.setText(studentBean.getGender() == 0 ? "男" : "女");
  127 + tv_shen.setText(studentBean.getParentIdentity());
  128 + if (!TextUtils.isEmpty(studentBean.getPhoto())) {
  129 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(this, 45));
  130 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  131 + Glide.with(this).load(studentBean.getPhoto()).apply(options).into(iv_avatar);
  132 + } else {
  133 + iv_avatar.setImageResource(studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female);
  134 + }
  135 + if (!"虚拟".equals(studentBean.getTeacherIdentity())) {
  136 + tv_teacher.setText(studentBean.getTeacherName());
  137 + if (!TextUtils.isEmpty(studentBean.getTeacherAvatar())) {
  138 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(this, 25));
  139 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  140 + Glide.with(this).load(studentBean.getTeacherAvatar()).apply(options).into(iv_teacher);
  141 + } else {
  142 + iv_teacher.setImageResource(studentBean.getSex() == 0 ? R.mipmap.ic_teacher_male : R.mipmap.ic_teacher_female);
  143 + }
  144 + } else {
  145 + iv_teacher.setVisibility(View.GONE);
  146 + }
  147 +
  148 + }
  149 +
  150 + @Override
  151 + protected void initListener() {
  152 + view_2.setOnClickListener(view -> startActivity(NickActivity.class));
  153 + view_3.setOnClickListener(view -> startActivity(SexActivity.class));
  154 + view_4.setOnClickListener(view -> startActivity(NianActivity.class));
  155 + view_5.setOnClickListener(view -> startActivity(ShenActivity.class));
  156 + findViewById(R.id.tv_cancel).setOnClickListener(view -> onBackPressed());
  157 + btn_next.setOnClickListener(view -> {
  158 + editStudent();
  159 + });
  160 + }
  161 +
  162 + public void editStudent() {
  163 + Map map = new HashMap();
  164 + map.put("nickName", studentBean.getNickName());
  165 + map.put("gender", studentBean.getGender());
  166 + map.put("gradeId", studentBean.getGradeId());
  167 + map.put("parentIdentity", studentBean.getParentIdentity());
  168 + map.put("term", studentBean.getTerm());
  169 + map.put("stuId", studentBean.getStuId());
  170 + NetWorks.editStudent(NetWorks.getMapRequestBody(map), new Observer<ResponseResult>() {
  171 + @Override
  172 + public void onSubscribe(Disposable d) {
  173 +
  174 + }
  175 +
  176 + @Override
  177 + public void onNext(ResponseResult responseResult) {
  178 + try {
  179 + boolean isSucceed = responseResult.getSuccess();
  180 + if (isSucceed) {
  181 + finish();
  182 + } else {
  183 + Toast.makeText(EditStudentActivity.this, responseResult.getMsg(), Toast.LENGTH_SHORT).show();
  184 + }
  185 + } catch (Exception e) {
  186 +
  187 + }
  188 + }
  189 +
  190 + @Override
  191 + public void onError(Throwable e) {
  192 +
  193 + }
  194 +
  195 + @Override
  196 + public void onComplete() {
  197 +
  198 + }
  199 + });
  200 + }
  201 +
  202 + @Override
  203 + protected void initData() {
  204 +
  205 + }
  206 +
  207 + @Override
  208 + public void onNetChanged(int netWorkState) {
  209 +
  210 + }
  211 +
  212 + private void cropPhoto(Uri uri) {
  213 + Uri contentUri = Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg"));
  214 + Intent intent = new Intent("com.android.camera.action.CROP");
  215 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  216 + //Android 7.0需要临时添加读取Url的权限, 添加此属性是为了解决:调用裁剪框时候提示:图片无法加载或者加载图片失败或者无法加载此图片
  217 + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
  218 + }
  219 + intent.setDataAndType(uri, "image/*");
  220 + intent.putExtra("crop", "true");//发送裁剪信号,去掉也能进行裁剪
  221 + intent.putExtra("scale", true);// 设置缩放
  222 + intent.putExtra("scaleUpIfNeeded", true);// 去黑边
  223 + intent.putExtra("aspectX", 1);
  224 + intent.putExtra("aspectY", 1);
  225 + //上述两个属性控制裁剪框的缩放比例。
  226 + //当用户用手拉伸裁剪框时候,裁剪框会按照上述比例缩放。
  227 + intent.putExtra("outputX", 300);//属性控制裁剪完毕,保存的图片的大小格式。
  228 + intent.putExtra("outputY", 300);//你按照1:1的比例来裁剪的,如果最后成像是800*400,那么按照2:1的样式保存,
  229 + intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//输出裁剪文件的格式
  230 + intent.putExtra("return-data", true);//是否返回裁剪后图片的Bitmap
  231 + intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);//设置输出路径
  232 + startActivityForResult(intent, CROP_REQUEST_CODE);
  233 + }
  234 +
  235 + @Override
  236 + protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  237 + super.onActivityResult(requestCode, resultCode, intent);
  238 + if (requestCode == CAMERA_REQUEST_CODE) {
  239 + if (resultCode == RESULT_OK) {
  240 + //用相机返回的照片去调用剪裁也需要对Uri进行处理
  241 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  242 + Uri contentUri = FileProvider.getUriForFile(this,
  243 + this.getPackageName() + ".fileprovider", tempFile);
  244 + cropPhoto(contentUri);
  245 + } else {
  246 + cropPhoto(Uri.fromFile(tempFile));
  247 + }
  248 + }
  249 + } else if (requestCode == ALBUM_REQUEST_CODE) {
  250 + if (resultCode == RESULT_OK) {
  251 + Uri uri = intent.getData();
  252 + cropPhoto(uri);
  253 + }
  254 + } else if (requestCode == CROP_REQUEST_CODE) {
  255 + if (intent == null) {
  256 + return;
  257 + }
  258 + Bundle bundle = intent.getExtras();
  259 + if (bundle != null) {
  260 + //在这里获得了剪裁后的Bitmap对象,可以用于上传
  261 + Bitmap image = bundle.getParcelable("data");
  262 + //设置到ImageView上
  263 + //也可以进行一些保存、压缩等操作后上传
  264 + File file = saveImage("head_output", image);
  265 + uploadAvatar(file);
  266 + // Log.d("dsadsadsa",path);
  267 + }
  268 + }
  269 + }
  270 +
  271 + private void uploadAvatar(File file) {
  272 + NetWorks.uploadStudentAvatar(file, studentBean.getStuId(), new Observer<ResponseResult<Map<String, String>>>() {
  273 + @Override
  274 + public void onSubscribe(Disposable d) {
  275 +
  276 + }
  277 +
  278 + @Override
  279 + public void onNext(ResponseResult<Map<String, String>> responseBody) {
  280 + if (responseBody.getData() != null && responseBody.getCode() == 200) {
  281 + String filePath = responseBody.getData().get("imageUrl");
  282 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(EditStudentActivity.this, 45));
  283 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  284 + Glide.with(EditStudentActivity.this).load(filePath).apply(options).into(iv_avatar);
  285 + }
  286 + }
  287 +
  288 + @Override
  289 + public void onError(Throwable e) {
  290 + e.toString();
  291 + }
  292 +
  293 + @Override
  294 + public void onComplete() {
  295 +
  296 + }
  297 + });
  298 + }
  299 +
  300 + public File saveImage(String name, Bitmap bmp) {
  301 + File appDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath());
  302 + if (!appDir.exists()) {
  303 + appDir.mkdir();
  304 + }
  305 + String fileName = name + ".jpg";
  306 + File file = new File(appDir, fileName);
  307 + try {
  308 + FileOutputStream fos = new FileOutputStream(file);
  309 + bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
  310 + fos.flush();
  311 + fos.close();
  312 + return file;
  313 + } catch (IOException e) {
  314 + Log.d("dsadsadsa", e.getLocalizedMessage());
  315 + e.printStackTrace();
  316 + }
  317 + return null;
  318 + }
  319 +
  320 + private void getPicFromCamera() {
  321 + //用于保存调用相机拍照后所生成的文件
  322 + tempFile = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg");
  323 + //跳转到调用系统相机
  324 + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  325 + //判断版本
  326 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //如果在Android7.0以上,使用FileProvider获取Uri
  327 + intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  328 + Uri contentUri = FileProvider.getUriForFile(this,
  329 + this.getPackageName() + ".fileprovider", tempFile);
  330 + intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
  331 + } else { //否则使用Uri.fromFile(file)方法获取Uri
  332 + intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
  333 + }
  334 + startActivityForResult(intent, CAMERA_REQUEST_CODE);
  335 + }
  336 +
  337 + /**
  338 + * 从相册获取图片
  339 + */
  340 + private void getPicFromAlbm() {
  341 + Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
  342 + photoPickerIntent.setType("image/*");
  343 + startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE);
  344 + }
  345 +
  346 + @Override
  347 + protected void onDestroy() {
  348 + super.onDestroy();
  349 + SharedPreferencesUtil.putData("setName", "");
  350 + SharedPreferencesUtil.putData("setSex", "");
  351 + SharedPreferencesUtil.putData("setNian", "");
  352 + SharedPreferencesUtil.putData("setShen", "");
  353 + SharedPreferencesUtil.putData("setXueq", "");
  354 + SharedPreferencesUtil.putData("grade", 0);
  355 + }
  356 +
  357 + @OnClick(R.id.iv_avatar)
  358 + public void showButtonDialog(View view) {
  359 + BottomSheetDialog dialog = new BottomSheetDialog(this, R.style.BottomSheetDialog);
  360 + View bottomView = LayoutInflater.from(this).inflate(R.layout.bottom_sheet_layout, null);
  361 + dialog.setContentView(bottomView);
  362 + bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
  363 + @Override
  364 + public void onClick(View view) {
  365 + dialog.dismiss();
  366 + getPicFromCamera();
  367 + }
  368 + });
  369 + bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
  370 + @Override
  371 + public void onClick(View view) {
  372 + dialog.dismiss();
  373 + getPicFromAlbm();
  374 + }
  375 + });
  376 + bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
  377 + @Override
  378 + public void onClick(View view) {
  379 + dialog.dismiss();
  380 + }
  381 + });
  382 + dialog.show();
  383 + }
  384 +}
... ...
app/src/main/java/com/hjx/parent/LoginActivity.java
1 1 package com.hjx.parent;
2 2  
  3 +import android.content.Intent;
3 4 import android.os.Bundle;
4 5 import android.telephony.PhoneNumberUtils;
5 6 import android.text.InputType;
  7 +import android.text.TextUtils;
6 8 import android.widget.Button;
7 9 import android.widget.CheckBox;
8 10 import android.widget.EditText;
... ... @@ -45,7 +47,6 @@ public class LoginActivity extends BaseActivity {
45 47 TextView tv_ys;
46 48  
47 49  
48   -
49 50 @Override
50 51 protected int layoutResId() {
51 52 return R.layout.activity_login;
... ... @@ -75,20 +76,19 @@ public class LoginActivity extends BaseActivity {
75 76 tv_ys = findViewById(R.id.tv_6);
76 77  
77 78  
78   - String role = (String) SharedPreferencesUtil.getData("role","");
  79 + String student = (String) SharedPreferencesUtil.getData("student", "");
79 80  
80   - if (role != null && role.length()> 0){
81   - LogUtil.e(TAG,"role 不是空----");
82   - startActivity(MainActivity.class);
  81 + if (!TextUtils.isEmpty(student)) {
  82 + LogUtil.e(TAG, "role 不是空----");
  83 + Intent intent = new Intent(this, MainActivity.class);
  84 + startActivity(intent);
83 85 finish();
84 86 return;
85   - }else {
86   - LogUtil.e(TAG,"role 是空----");
  87 + } else {
  88 + LogUtil.e(TAG, "role 是空----");
87 89 }
88 90  
89 91  
90   -
91   -
92 92 }
93 93  
94 94 @Override
... ... @@ -97,16 +97,13 @@ public class LoginActivity extends BaseActivity {
97 97 et_phone.setText("");
98 98 });
99 99 iv_show.setOnClickListener(view -> {
100   -
101   - if (iv_show.getBackground().getConstantState().equals(getDrawable(R.mipmap.xs).getConstantState())){
  100 + if (iv_show.getBackground().getConstantState().equals(getDrawable(R.mipmap.xs).getConstantState())) {
102 101 iv_show.setBackgroundResource(R.mipmap.yc);
103 102 et_pwd.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
104   - }else {
  103 + } else {
105 104 iv_show.setBackgroundResource(R.mipmap.xs);
106 105 et_pwd.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
107 106 }
108   -
109   -
110 107 });
111 108  
112 109  
... ... @@ -114,22 +111,22 @@ public class LoginActivity extends BaseActivity {
114 111  
115 112 String phone = et_phone.getText().toString().trim();
116 113 String pwd = et_pwd.getText().toString().trim();
117   - if (phone.isEmpty() || pwd.isEmpty() || phone.length() == 0 || pwd.length() == 0){
118   - Toast.makeText(this,"手机号以及密码不能为空",Toast.LENGTH_SHORT).show();
  114 + if (phone.isEmpty() || pwd.isEmpty() || phone.length() == 0 || pwd.length() == 0) {
  115 + Toast.makeText(this, "手机号以及密码不能为空", Toast.LENGTH_SHORT).show();
119 116 return;
120 117 }
121 118  
122   - if (!PhoneNumberUtils.isGlobalPhoneNumber(et_phone.getText().toString())){
123   - Toast.makeText(this,"请输入正确的手机号码",Toast.LENGTH_SHORT).show();
  119 + if (!PhoneNumberUtils.isGlobalPhoneNumber(et_phone.getText().toString())) {
  120 + Toast.makeText(this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
124 121 return;
125 122 }
126 123  
127   - if (!cb_1.isChecked()){
128   - Toast.makeText(this,"请勾选协议",Toast.LENGTH_SHORT).show();
  124 + if (!cb_1.isChecked()) {
  125 + Toast.makeText(this, "请勾选协议", Toast.LENGTH_SHORT).show();
129 126 return;
130 127 }
131 128  
132   - login(phone,pwd);
  129 + login(phone, pwd);
133 130  
134 131 });
135 132  
... ... @@ -146,11 +143,11 @@ public class LoginActivity extends BaseActivity {
146 143 });
147 144 }
148 145  
149   - public void login(final String phone ,String pwd){
  146 + public void login(final String phone, String pwd) {
150 147  
151 148 Map map = new HashMap();
152   - map.put("username",phone);
153   - map.put("password",pwd);
  149 + map.put("username", phone);
  150 + map.put("password", pwd);
154 151  
155 152  
156 153 NetWorks.login(NetWorks.getMapRequestBody(map), new Observer<ResponseBody>() {
... ... @@ -162,30 +159,27 @@ public class LoginActivity extends BaseActivity {
162 159 @Override
163 160 public void onNext(ResponseBody responseBody) {
164 161 try {
165   -
166 162 String str = responseBody.string().toString();
167   -
168   -
169   - LogUtil.e(TAG,"----"+str);
  163 + LogUtil.e(TAG, "----" + str);
170 164 JSONObject jo = new JSONObject(str);
171   - boolean isSucceed = jo.getBoolean("success");
172   - if (isSucceed){
173   - JSONObject jo2 = jo.getJSONObject("data");
174   - SharedPreferencesUtil.putData("phone",phone);
175   - SharedPreferencesUtil.putData("role",jo2.getString("role"));
176   - SharedPreferencesUtil.putData("userId",jo2.getString("userId"));
177   - SharedPreferencesUtil.putData("token",jo2.getString("token"));
178   -
179   - startActivity(MainActivity.class);
180   -
181   - }else {
182   - Toast.makeText(LoginActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
183   - }
184   - }catch (Exception e){
  165 + boolean isSucceed = jo.getBoolean("success");
  166 + if (isSucceed) {
  167 + JSONObject jo2 = jo.getJSONObject("data");
  168 + SharedPreferencesUtil.putData("phone", phone);
  169 + SharedPreferencesUtil.putData("role", jo2.getString("role"));
  170 + SharedPreferencesUtil.putData("userId", jo2.getString("userId"));
  171 + SharedPreferencesUtil.putData("token", jo2.getString("token"));
  172 + JSONObject user = new JSONObject(jo2.getString("user"));
  173 + SharedPreferencesUtil.putData("photo", user.getString("photo"));
  174 + startActivity(ChooseActivity.class);
  175 + finish();
  176 + } else {
  177 + Toast.makeText(LoginActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
  178 + }
  179 + } catch (Exception e) {
185 180 e.printStackTrace();
186   - Toast.makeText(LoginActivity.this,"服务繁忙,请重试",Toast.LENGTH_SHORT).show();
  181 + Toast.makeText(LoginActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show();
187 182 }
188   -
189 183 }
190 184  
191 185 @Override
... ...
app/src/main/java/com/hjx/parent/MainActivity.java
... ... @@ -31,72 +31,55 @@ public class MainActivity extends BaseActivity {
31 31 }
32 32  
33 33  
34   -
35   -
36 34 HomeFragment homeFragment;
37 35 MeFragment meFragment;
38 36 ConstraintLayout cl_home;
39 37 ConstraintLayout cl_me;
40   - ImageView iv_3,iv_4;
41   - TextView tv_1,tv_4;
  38 + ImageView iv_3, iv_4;
  39 + TextView tv_1, tv_4;
42 40  
43 41 @Override
44 42 protected void initView() {
45   - showFragment(getHomeFragment(),R.id.rl_content);
  43 + showFragment(getHomeFragment(), R.id.rl_content);
46 44 cl_home = findViewById(R.id.cl_home);
47 45 cl_me = findViewById(R.id.cl_me);
48 46 iv_3 = findViewById(R.id.iv_3);
49 47 iv_4 = findViewById(R.id.iv_4);
50 48 tv_1 = findViewById(R.id.tv_1);
51 49 tv_4 = findViewById(R.id.tv_4);
52   -
53   -
54 50 iv_3.setBackgroundResource(R.mipmap.hoss);
55 51 tv_1.setTextColor(Color.parseColor("#FE5E09"));
56   -
57   -
58   -
59 52 }
60 53  
61   - public HomeFragment getHomeFragment(){
  54 + public HomeFragment getHomeFragment() {
62 55 if (homeFragment == null)
63 56 homeFragment = new HomeFragment();
64 57 return homeFragment;
65 58 }
66 59  
67   - public MeFragment getMeFragment(){
  60 + public MeFragment getMeFragment() {
68 61 if (meFragment == null)
69 62 meFragment = new MeFragment();
70 63 return meFragment;
71 64 }
72 65  
73 66  
74   -
75 67 @Override
76 68 protected void initListener() {
77 69 cl_home.setOnClickListener(view -> {
78   - showFragment(getHomeFragment(),R.id.rl_content);
  70 + showFragment(getHomeFragment(), R.id.rl_content);
79 71 iv_3.setBackgroundResource(R.mipmap.hoss);
80 72 tv_1.setTextColor(Color.parseColor("#FE5E09"));
81   -
82   -
83 73 iv_4.setBackgroundResource(R.mipmap.wmus);
84 74 tv_4.setTextColor(Color.parseColor("#333333"));
85   -
86   -
87 75 });
88 76  
89 77 cl_me.setOnClickListener(view -> {
90   - showFragment(getMeFragment(),R.id.rl_content);
91   -
  78 + showFragment(getMeFragment(), R.id.rl_content);
92 79 iv_3.setBackgroundResource(R.mipmap.hous);
93 80 tv_1.setTextColor(Color.parseColor("#333333"));
94   -
95   -
96 81 iv_4.setBackgroundResource(R.mipmap.wmss);
97 82 tv_4.setTextColor(Color.parseColor("#FE5E09"));
98   -
99   -
100 83 });
101 84 }
102 85  
... ...
app/src/main/java/com/hjx/parent/NianActivity.java
1 1 package com.hjx.parent;
2 2  
  3 +import android.app.AlertDialog;
  4 +import android.content.DialogInterface;
  5 +import android.view.View;
3 6 import android.widget.TextView;
  7 +import android.widget.Toast;
4 8  
  9 +import com.google.gson.Gson;
  10 +import com.prws.common.bean.GradeAndSubject;
5 11 import com.prws.common.base.BaseActivity;
6 12 import com.prws.common.base.BasePresenter;
  13 +import com.prws.common.bean.ResponseResult;
  14 +import com.prws.common.net.NetWorks;
7 15 import com.prws.common.utils.SharedPreferencesUtil;
8 16  
  17 +import java.io.IOException;
  18 +import java.util.ArrayList;
  19 +import java.util.List;
  20 +
  21 +import butterknife.BindView;
  22 +import butterknife.OnClick;
  23 +import io.reactivex.Observer;
  24 +import io.reactivex.disposables.Disposable;
  25 +import okhttp3.ResponseBody;
  26 +
9 27 public class NianActivity extends BaseActivity {
10 28 @Override
11 29 protected int layoutResId() {
... ... @@ -22,21 +40,81 @@ public class NianActivity extends BaseActivity {
22 40 return null;
23 41 }
24 42  
  43 + @BindView(R.id.tv_nian)
25 44 TextView tv_nian;
  45 + @BindView(R.id.tv_xq)
26 46 TextView tv_xq;
  47 + private int gradeId;
27 48  
28 49 @Override
29 50 protected void initView() {
30   - tv_nian = findViewById(R.id.tv_nian);
31   - tv_xq = findViewById(R.id.tv_xq);
32 51 findViewById(R.id.tv_cancel).setOnClickListener(view -> onBackPressed());
33 52 findViewById(R.id.tv_ok).setOnClickListener(view -> {
34 53 SharedPreferencesUtil.putData("setNian", tv_nian.getText());
35 54 SharedPreferencesUtil.putData("setXueq", tv_xq.getText());
  55 + SharedPreferencesUtil.putData("grade", gradeId);
36 56 finish();
37 57 });
  58 + }
  59 +
  60 + @OnClick(R.id.view_3)
  61 + public void changeTerm(View view) {
  62 + String[] strings = {"上学期", "下学期"};
  63 + AlertDialog.Builder builder = new AlertDialog.Builder(NianActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
  64 + builder.setTitle("请选择学期");
  65 + builder.setSingleChoiceItems(strings, 0, new DialogInterface.OnClickListener() {
  66 + @Override
  67 + public void onClick(DialogInterface dialogInterface, int i) {
  68 + tv_xq.setText(strings[i]);
  69 + dialogInterface.dismiss();
  70 + }
  71 + });
  72 + builder.setCancelable(false);
  73 + builder.show();
  74 + }
38 75  
  76 + @OnClick(R.id.view_2)
  77 + public void getGradeAndSubject(View view) {
  78 + NetWorks.listGradeAndSubject(new Observer<ResponseResult<List<GradeAndSubject>>>() {
  79 + @Override
  80 + public void onSubscribe(Disposable d) {
39 81  
  82 + }
  83 +
  84 + @Override
  85 + public void onNext(ResponseResult<List<GradeAndSubject>> listResponseResult) {
  86 + if (listResponseResult != null && listResponseResult.getCode() == 200) {
  87 + List<GradeAndSubject> list = listResponseResult.getData();
  88 + List<String> stringList = new ArrayList<>();
  89 + for (GradeAndSubject gradeAndSubject : list) {
  90 + stringList.add(gradeAndSubject.getGrade().getGrade());
  91 + }
  92 + String[] strings = stringList.toArray(new String[stringList.size()]);
  93 + AlertDialog.Builder builder = new AlertDialog.Builder(NianActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
  94 + builder.setTitle("请选择年级");
  95 + builder.setSingleChoiceItems(strings, 0, new DialogInterface.OnClickListener() {
  96 + @Override
  97 + public void onClick(DialogInterface dialogInterface, int i) {
  98 + tv_nian.setText(list.get(i).getGrade().getGrade());
  99 + gradeId = list.get(i).getGrade().getId();
  100 + dialogInterface.dismiss();
  101 + }
  102 + });
  103 + builder.setCancelable(false);
  104 + builder.show();
  105 + }
  106 + }
  107 +
  108 + @Override
  109 + public void onError(Throwable e) {
  110 + e.toString();
  111 + }
  112 +
  113 + @Override
  114 + public void onComplete() {
  115 +
  116 + }
  117 + });
40 118 }
41 119  
42 120 @Override
... ...
app/src/main/java/com/hjx/parent/QRActivity.java
... ... @@ -47,7 +47,7 @@ public class QRActivity extends BaseActivity {
47 47 captureFragment.setAnalyzeCallback(new CodeUtils.AnalyzeCallback() {
48 48 @Override
49 49 public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
50   - LogUtil.e(TAG,"result----:"+result);
  50 + LogUtil.e(TAG, "result----:" + result);
51 51  
52 52 loginAnd(result);
53 53  
... ... @@ -65,7 +65,7 @@ public class QRActivity extends BaseActivity {
65 65  
66 66 }
67 67  
68   - public void loginAnd(String str){
  68 + public void loginAnd(String str) {
69 69 NetWorks.scanAndLogin(str, new Observer<ResponseBody>() {
70 70 @Override
71 71 public void onSubscribe(Disposable d) {
... ... @@ -77,25 +77,20 @@ public class QRActivity extends BaseActivity {
77 77 try {
78 78  
79 79 String str = responseBody.string().toString();
80   - LogUtil.e(TAG,"----"+str);
  80 + LogUtil.e(TAG, "----" + str);
81 81 JSONObject jo = new JSONObject(str);
82   - boolean isSucceed = jo.getBoolean("success");
83   - if (isSucceed){
  82 + boolean isSucceed = jo.getBoolean("success");
  83 + if (isSucceed) {
84 84 startActivity(MainActivity.class);
85 85 finish();
86   - }else {
  86 + } else {
87 87 Toast.makeText(QRActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
88 88 }
89   - }catch (Exception e){
  89 + } catch (Exception e) {
90 90 e.printStackTrace();
91   - Toast.makeText(QRActivity.this,"服务繁忙,请重试",Toast.LENGTH_SHORT).show();
  91 + Toast.makeText(QRActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show();
92 92 startActivity(MainActivity.class);
93 93 }
94   -
95   -
96   -
97   -
98   -
99 94 }
100 95  
101 96 @Override
... ...
app/src/main/java/com/hjx/parent/RegisterActivity.java
... ... @@ -28,6 +28,8 @@ import com.prws.common.utils.SharedPreferencesUtil;
28 28 import com.uuzuche.lib_zxing.activity.CaptureActivity;
29 29 import com.uuzuche.lib_zxing.activity.CodeUtils;
30 30  
  31 +import org.json.JSONObject;
  32 +
31 33 import java.io.IOException;
32 34 import java.util.HashMap;
33 35 import java.util.List;
... ... @@ -192,12 +194,10 @@ public class RegisterActivity extends BaseActivity {
192 194 }
193 195  
194 196 if (registerBean.getData().getUserName() != null && registerBean.getData().getUserName().length() > 0) {
195   - SharedPreferencesUtil.putData("phone",phone);
196   - SharedPreferencesUtil.putData("role",registerBean.getData().getUserName());
197   - SharedPreferencesUtil.putData("userId",registerBean.getData().getUserName());
198   -
199   - //进入扫码界面
200   - goQRView();
  197 + SharedPreferencesUtil.putData("phone", phone);
  198 + SharedPreferencesUtil.putData("role", registerBean.getData().getUserName());
  199 + SharedPreferencesUtil.putData("userId", registerBean.getData().getUserName());
  200 + login(phone, pwd);
201 201  
202 202 }
203 203  
... ... @@ -216,6 +216,53 @@ public class RegisterActivity extends BaseActivity {
216 216 });
217 217 }
218 218  
  219 + public void login(final String phone, String pwd) {
  220 + Map map = new HashMap();
  221 + map.put("username", phone);
  222 + map.put("password", pwd);
  223 +
  224 + NetWorks.login(NetWorks.getMapRequestBody(map), new Observer<ResponseBody>() {
  225 + @Override
  226 + public void onSubscribe(Disposable d) {
  227 +
  228 + }
  229 +
  230 + @Override
  231 + public void onNext(ResponseBody responseBody) {
  232 + try {
  233 + String str = responseBody.string().toString();
  234 + LogUtil.e(TAG, "----" + str);
  235 + JSONObject jo = new JSONObject(str);
  236 + boolean isSucceed = jo.getBoolean("success");
  237 + if (isSucceed) {
  238 + JSONObject jo2 = jo.getJSONObject("data");
  239 + SharedPreferencesUtil.putData("phone", phone);
  240 + SharedPreferencesUtil.putData("role", jo2.getString("role"));
  241 + SharedPreferencesUtil.putData("userId", jo2.getString("userId"));
  242 + SharedPreferencesUtil.putData("token", jo2.getString("token"));
  243 + startActivity(ChooseActivity.class);
  244 + } else {
  245 + Toast.makeText(RegisterActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
  246 + }
  247 + } catch (Exception e) {
  248 + e.printStackTrace();
  249 + Toast.makeText(RegisterActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show();
  250 + }
  251 +
  252 + }
  253 +
  254 + @Override
  255 + public void onError(Throwable e) {
  256 +
  257 + }
  258 +
  259 + @Override
  260 + public void onComplete() {
  261 +
  262 + }
  263 + });
  264 + }
  265 +
219 266 public void goQRView() {
220 267  
221 268 if (!XXPermissions.isGranted(this, Permission.CAMERA)) {
... ... @@ -256,7 +303,6 @@ public class RegisterActivity extends BaseActivity {
256 303 }
257 304  
258 305  
259   -
260 306 @Override
261 307 protected void initData() {
262 308  
... ...
app/src/main/java/com/hjx/parent/bean/StudentBean.java
... ... @@ -18,6 +18,11 @@ public class StudentBean {
18 18 String parentIdentity;
19 19 String teacherName;
20 20 int teacherId;
  21 + String teacherAvatar;
  22 + String grade;
  23 + String teacherIdentity;
  24 + int sex;
  25 +
21 26  
22 27 @Override
23 28 public String toString() {
... ... @@ -38,9 +43,45 @@ public class StudentBean {
38 43 ", parentIdentity='" + parentIdentity + '\'' +
39 44 ", teacherName='" + teacherName + '\'' +
40 45 ", teacherId=" + teacherId +
  46 + ", teacherAvatar=" + teacherAvatar +
  47 + ", grade=" + grade +
  48 + ", teacherIdentity=" + teacherIdentity +
  49 + ", sex=" + sex +
41 50 '}';
42 51 }
43 52  
  53 + public void setSex(int sex) {
  54 + this.sex = sex;
  55 + }
  56 +
  57 + public int getSex() {
  58 + return sex;
  59 + }
  60 +
  61 + public void setTeacherIdentity(String teacherIdentity) {
  62 + this.teacherIdentity = teacherIdentity;
  63 + }
  64 +
  65 + public String getTeacherIdentity() {
  66 + return teacherIdentity;
  67 + }
  68 +
  69 + public void setTeacherAvatar(String teacherAvatar) {
  70 + this.teacherAvatar = teacherAvatar;
  71 + }
  72 +
  73 + public void setGrade(String grade) {
  74 + this.grade = grade;
  75 + }
  76 +
  77 + public String getTeacherAvatar() {
  78 + return teacherAvatar;
  79 + }
  80 +
  81 + public String getGrade() {
  82 + return grade;
  83 + }
  84 +
44 85 public String getStuId() {
45 86 return stuId;
46 87 }
... ...
app/src/main/java/com/hjx/parent/fragment/HomeFragment.java
... ... @@ -2,23 +2,51 @@ package com.hjx.parent.fragment;
2 2  
3 3 import android.content.Intent;
4 4 import android.os.Bundle;
  5 +import android.text.TextUtils;
  6 +import android.view.LayoutInflater;
  7 +import android.view.View;
5 8 import android.widget.ImageView;
  9 +import android.widget.LinearLayout;
6 10 import android.widget.TextView;
7 11 import android.widget.Toast;
8 12  
  13 +import androidx.annotation.NonNull;
9 14 import androidx.annotation.Nullable;
10   -
  15 +import androidx.recyclerview.widget.LinearLayoutManager;
  16 +import androidx.recyclerview.widget.RecyclerView;
  17 +
  18 +import com.bumptech.glide.Glide;
  19 +import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
  20 +import com.bumptech.glide.request.RequestOptions;
  21 +import com.chad.library.adapter.base.BaseQuickAdapter;
  22 +import com.chad.library.adapter.base.BaseViewHolder;
  23 +import com.google.gson.Gson;
11 24 import com.hjq.permissions.OnPermissionCallback;
12 25 import com.hjq.permissions.Permission;
13 26 import com.hjq.permissions.XXPermissions;
  27 +import com.hjx.parent.ChooseActivity;
  28 +import com.hjx.parent.QRActivity;
14 29 import com.hjx.parent.R;
  30 +import com.hjx.parent.bean.StudentBean;
15 31 import com.prws.common.base.BaseFragment;
  32 +import com.prws.common.bean.ResponseResult;
  33 +import com.prws.common.bean.ScheduleBean;
  34 +import com.prws.common.bean.Video;
  35 +import com.prws.common.net.NetWorks;
  36 +import com.prws.common.utils.ScreenUtils;
16 37 import com.prws.common.utils.SharedPreferencesUtil;
17 38 import com.uuzuche.lib_zxing.activity.CaptureActivity;
18 39 import com.uuzuche.lib_zxing.activity.CodeUtils;
19 40  
  41 +import java.text.SimpleDateFormat;
  42 +import java.util.ArrayList;
20 43 import java.util.List;
21 44  
  45 +import butterknife.BindView;
  46 +import butterknife.OnClick;
  47 +import io.reactivex.Observer;
  48 +import io.reactivex.disposables.Disposable;
  49 +
22 50 public class HomeFragment extends BaseFragment {
23 51 @Override
24 52 protected int getLayoutRes() {
... ... @@ -27,27 +55,36 @@ public class HomeFragment extends BaseFragment {
27 55  
28 56 ImageView iv_sapmiao;
29 57 TextView tv_name;
  58 + StudentBean studentBean;
  59 + ImageView iv_2;
  60 + @BindView(R.id.recycle)
  61 + RecyclerView recyclerView;
  62 + @BindView(R.id.tv_empty)
  63 + TextView tv_empty;
  64 + @BindView(R.id.iv_empty)
  65 + ImageView iv_empty;
  66 +
30 67 @Override
31 68 protected void initDatas() {
32 69 super.initDatas();
  70 + iv_2 = mRootView.findViewById(R.id.iv_2);
33 71 iv_sapmiao = mRootView.findViewById(R.id.iv_sapmiao);
34 72 tv_name = mRootView.findViewById(R.id.tv_name);
35 73 iv_sapmiao.setOnClickListener(view -> {
36   -
37   - if (!XXPermissions.isGranted(getActivity(), Permission.CAMERA)){
  74 + if (!XXPermissions.isGranted(getActivity(), Permission.CAMERA)) {
38 75 XXPermissions.with(getActivity())
39 76 // 申请多个权限
40 77 .permission(Permission.CAMERA)
41 78 .request(new OnPermissionCallback() {
42 79 @Override
43 80 public void onGranted(List<String> permissions, boolean all) {
44   - if (all){
  81 + if (all) {
45 82 //开启扫码界面
46 83 startQRView();
47 84  
48 85  
49   - }else {
50   - Toast.makeText(getActivity(),"需要相机权限",Toast.LENGTH_SHORT).show();
  86 + } else {
  87 + Toast.makeText(getActivity(), "需要相机权限", Toast.LENGTH_SHORT).show();
51 88 }
52 89 }
53 90  
... ... @@ -56,38 +93,68 @@ public class HomeFragment extends BaseFragment {
56 93 XXPermissions.startPermissionActivity(getActivity(), permissions);
57 94 }
58 95 });
  96 + } else {
  97 + startQRView();
  98 + }
59 99  
  100 + });
  101 + }
60 102  
61 103  
62   -
63   - }else {
64   - startQRView();
  104 + @Override
  105 + public void onResume() {
  106 + super.onResume();
  107 + String student = (String) SharedPreferencesUtil.getData("student", "");
  108 + try {
  109 + studentBean = new Gson().fromJson(student, StudentBean.class);
  110 + tv_name.setText(studentBean.getNickName());
  111 + if (TextUtils.isEmpty(studentBean.getPhoto())) {
  112 + iv_2.setImageResource(studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female);
  113 + } else {
  114 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 20));
  115 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  116 + Glide.with(getActivity()).load(studentBean.getPhoto()).apply(options).into(iv_2);
65 117 }
  118 + getWeekPlan(studentBean.getStuId());
  119 + } catch (Exception e) {
66 120  
  121 + }
  122 + }
67 123  
68   - });
  124 + public void getWeekPlan(String id) {
  125 + NetWorks.getWeekPlan(id, new Observer<ResponseResult<ScheduleBean>>() {
  126 + @Override
  127 + public void onSubscribe(Disposable d) {
69 128  
70   - String role = (String) SharedPreferencesUtil.getData("role","");
71   - String userId = (String) SharedPreferencesUtil.getData("userId","");
72   - String token = (String) SharedPreferencesUtil.getData("token","");
73   - String phone = (String) SharedPreferencesUtil.getData("phone","");
74   - if (role != null && role.length() > 0)
75   - tv_name.setText(role);
  129 + }
76 130  
77   - }
  131 + @Override
  132 + public void onNext(ResponseResult<ScheduleBean> result) {
  133 + if (result != null && result.getCode() == 200) {
  134 + showWeekPlan(result.getData().getList());
  135 + }
  136 + }
78 137  
79   - public void startQRView(){
  138 + @Override
  139 + public void onError(Throwable e) {
80 140  
  141 + }
81 142  
82   - startActivityForResult(new Intent(getActivity(), CaptureActivity.class),101);
  143 + @Override
  144 + public void onComplete() {
83 145  
  146 + }
  147 + });
  148 + }
84 149  
  150 + public void startQRView() {
  151 + startActivityForResult(new Intent(getActivity(), QRActivity.class), 101);
85 152 }
86 153  
87 154 @Override
88 155 public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
89 156 super.onActivityResult(requestCode, resultCode, data);
90   - if (requestCode == 101){
  157 + if (requestCode == 101) {
91 158 if (null != data) {
92 159 Bundle bundle = data.getExtras();
93 160 if (bundle == null) {
... ... @@ -101,7 +168,72 @@ public class HomeFragment extends BaseFragment {
101 168 }
102 169 }
103 170 }
  171 + }
  172 +
  173 + @OnClick({R.id.iv_2, R.id.tv_name})
  174 + public void choose(View view) {
  175 + Intent intent = new Intent(getActivity(), ChooseActivity.class);
  176 + startActivity(intent);
  177 + }
  178 +
  179 + @OnClick(R.id.iv_1)
  180 + public void exit(View view) {
  181 + getActivity().finish();
  182 + }
  183 +
  184 + private void showWeekPlan(List<Video> list) {
  185 + iv_empty.setVisibility(list.size() > 0 ? View.GONE : View.VISIBLE);
  186 + tv_empty.setVisibility(list.size() > 0 ? View.GONE : View.VISIBLE);
  187 + List<Schedule> schedules = new ArrayList<>();
  188 + for (int i = 0; i < list.size(); i++) {
  189 + String date = new SimpleDateFormat("yyyy.MM.dd").format(list.get(i).getStudyTime());
  190 + if (schedules.size() > 0 && schedules.get(schedules.size() - 1).getDate().equals(date)) {
  191 + schedules.get(schedules.size() - 1).getStrings().add(list.get(i).getSectionChildName());
  192 + } else {
  193 + List<String> stringList = new ArrayList<>();
  194 + Schedule schedule = new Schedule();
  195 + schedule.setDate(date);
  196 + stringList.add(list.get(i).getSectionChildName());
  197 + schedule.setStrings(stringList);
  198 + schedules.add(schedule);
  199 + }
  200 + }
  201 + BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_schedule, schedules) {
  202 + @Override
  203 + protected void convert(@NonNull BaseViewHolder item, Object o) {
  204 + Schedule schedule = schedules.get(item.getAdapterPosition());
  205 + item.setText(R.id.tv_date, schedule.getDate());
  206 + LinearLayout layout = item.getView(R.id.ll_schedule);
  207 + for (int i = 0; i < schedule.getStrings().size(); i++) {
  208 + View view = LayoutInflater.from(getContext()).inflate(R.layout.item_video, null);
  209 + TextView textView = view.findViewById(R.id.tv_name);
  210 + textView.setText(schedule.getStrings().get(i));
  211 + layout.addView(view);
  212 + }
  213 + }
  214 + };
  215 + recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
  216 + recyclerView.setAdapter(adapter);
  217 + }
  218 +
  219 + class Schedule {
  220 + String date;
  221 + List<String> strings;
  222 +
  223 + public void setDate(String date) {
  224 + this.date = date;
  225 + }
104 226  
  227 + public void setStrings(List<String> strings) {
  228 + this.strings = strings;
  229 + }
105 230  
  231 + public String getDate() {
  232 + return date;
  233 + }
  234 +
  235 + public List<String> getStrings() {
  236 + return strings;
  237 + }
106 238 }
107 239 }
... ...
app/src/main/java/com/hjx/parent/fragment/MeFragment.java
1 1 package com.hjx.parent.fragment;
2 2  
  3 +import android.app.AlertDialog;
  4 +import android.content.DialogInterface;
3 5 import android.content.Intent;
  6 +import android.text.TextUtils;
4 7 import android.view.View;
5 8 import android.widget.ImageView;
6 9 import android.widget.TextView;
7 10 import android.widget.Toast;
8 11  
  12 +import androidx.annotation.NonNull;
  13 +import androidx.annotation.Nullable;
9 14 import androidx.constraintlayout.widget.Group;
  15 +import androidx.recyclerview.widget.LinearLayoutManager;
  16 +import androidx.recyclerview.widget.RecyclerView;
10 17  
11 18 import com.bumptech.glide.Glide;
  19 +import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
  20 +import com.bumptech.glide.request.RequestOptions;
  21 +import com.chad.library.adapter.base.BaseQuickAdapter;
  22 +import com.chad.library.adapter.base.BaseViewHolder;
12 23 import com.developer.wang.utils.PermissionUtils;
13 24 import com.google.gson.Gson;
14 25 import com.google.gson.JsonArray;
... ... @@ -17,6 +28,7 @@ import com.hjq.permissions.Permission;
17 28 import com.hjq.permissions.XXPermissions;
18 29 import com.hjx.parent.AccountActivity;
19 30 import com.hjx.parent.AddStudentActivity;
  31 +import com.hjx.parent.EditStudentActivity;
20 32 import com.hjx.parent.LoginActivity;
21 33 import com.hjx.parent.MainActivity;
22 34 import com.hjx.parent.QRActivity;
... ... @@ -27,6 +39,7 @@ import com.hjx.parent.bean.StudentBean;
27 39 import com.prws.common.base.BaseFragment;
28 40 import com.prws.common.net.NetWorks;
29 41 import com.prws.common.utils.LogUtil;
  42 +import com.prws.common.utils.ScreenUtils;
30 43 import com.prws.common.utils.SharedPreferencesUtil;
31 44  
32 45 import org.json.JSONArray;
... ... @@ -37,6 +50,8 @@ import java.util.HashMap;
37 50 import java.util.List;
38 51 import java.util.Map;
39 52  
  53 +import butterknife.BindView;
  54 +import butterknife.OnClick;
40 55 import io.reactivex.Observer;
41 56 import io.reactivex.disposables.Disposable;
42 57 import okhttp3.ResponseBody;
... ... @@ -47,109 +62,45 @@ public class MeFragment extends BaseFragment {
47 62 return R.layout.fragment_me;
48 63 }
49 64  
50   - ImageView iv_bann;
51 65 Group group_1;
52 66 TextView tv_name;
53 67 TextView tv_phone;
54   - ImageView iv_21, iv_22, iv_23;
55   - TextView tv_21, tv_22, tv_23;
56   -
  68 + ImageView iv_toux;
  69 + RecyclerView recycle;
57 70  
58 71 @Override
59 72 protected void initDatas() {
60 73 super.initDatas();
61   -
62   -
63   - iv_bann = mRootView.findViewById(R.id.iv_bann);
  74 + recycle = mRootView.findViewById(R.id.recycle);
64 75 group_1 = mRootView.findViewById(R.id.group_1);
65   -
66 76 String role = (String) SharedPreferencesUtil.getData("role", "");
67 77 String userId = (String) SharedPreferencesUtil.getData("userId", "");
68 78 String token = (String) SharedPreferencesUtil.getData("token", "");
69 79 String phone = (String) SharedPreferencesUtil.getData("phone", "");
70   - if (role == null || role.length() == 0) {
71   - iv_bann.setVisibility(View.VISIBLE);
72   - group_1.setVisibility(View.GONE);
73   -
74   - iv_bann.setOnClickListener(view -> {
75   -
76   - if (!XXPermissions.isGranted(getActivity(), Permission.CAMERA)) {
77   - XXPermissions.with(getActivity())
78   - // 申请多个权限
79   - .permission(Permission.CAMERA)
80   - .request(new OnPermissionCallback() {
81   - @Override
82   - public void onGranted(List<String> permissions, boolean all) {
83   - if (all) {
84   - //开启扫码界面
85   - startActivity(new Intent(getActivity(), QRActivity.class));
86   - getActivity().finish();
87   - } else {
88   - Toast.makeText(getActivity(), "需要相机权限", Toast.LENGTH_SHORT).show();
89   - }
90   - }
91   -
92   - @Override
93   - public void onDenied(List<String> permissions, boolean never) {
94   - XXPermissions.startPermissionActivity(getActivity(), permissions);
95   - }
96   - });
97   -
98   -
99   - }
100   -
101   -
102   - });
103   - return;
104   - } else {
105   - iv_bann.setVisibility(View.GONE);
106   - group_1.setVisibility(View.VISIBLE);
107   - }
  80 + group_1.setVisibility(View.VISIBLE);
  81 + iv_toux = mRootView.findViewById(R.id.iv_toux);
108 82 tv_name = mRootView.findViewById(R.id.tv_name);
109 83 tv_phone = mRootView.findViewById(R.id.tv_phone);
110   - iv_21 = mRootView.findViewById(R.id.iv_21);
111   - iv_22 = mRootView.findViewById(R.id.iv_22);
112   - iv_23 = mRootView.findViewById(R.id.iv_23);
113   - tv_21 = mRootView.findViewById(R.id.tv_21);
114   - tv_22 = mRootView.findViewById(R.id.tv_22);
115   - tv_23 = mRootView.findViewById(R.id.tv_23);
116   -
117   - tv_phone.setText(phone);
118   - tv_name.setText(role);
119   -
120   - iv_21.setOnClickListener(view -> {
121   - if (iv_21.getBackground().getConstantState().equals(getActivity().getDrawable(R.mipmap.tjxss).getConstantState())) {
122   - startActivity(new Intent(getActivity(), AddStudentActivity.class));
123   - }
124   -
125   - });
126   -
127   - iv_22.setOnClickListener(view -> {
128   - if (iv_22.getBackground().getConstantState().equals(getActivity().getDrawable(R.mipmap.tjxss).getConstantState())) {
129   - startActivity(new Intent(getActivity(), AddStudentActivity.class));
130   -
131   - }
132   - });
133   - iv_23.setOnClickListener(view -> {
134   - if (iv_23.getBackground().getConstantState().equals(getActivity().getDrawable(R.mipmap.tjxss).getConstantState())) {
135   - startActivity(new Intent(getActivity(), AddStudentActivity.class));
136   - }
137   - });
138   -
139   -
  84 + tv_phone.setVisibility(View.GONE);
  85 +// tv_phone.setText(phone);
  86 + tv_name.setText(phone);
140 87 }
141 88  
142 89 @Override
143 90 public void onResume() {
144 91 super.onResume();
  92 + String photo = (String) SharedPreferencesUtil.getData("photo", "");
  93 + if (!TextUtils.isEmpty(photo)) {
  94 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45));
  95 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  96 + Glide.with(getContext()).load(photo).apply(options).into(iv_toux);
  97 + }
145 98 loadChildList();
146 99 }
147 100  
148 101 ArrayList<StudentBean> alist = new ArrayList<>();
149 102  
150 103 public void loadChildList() {
151   -
152   -
153 104 NetWorks.listChildren(new Observer<ResponseBody>() {
154 105 @Override
155 106 public void onSubscribe(Disposable d) {
... ... @@ -171,85 +122,20 @@ public class MeFragment extends BaseFragment {
171 122 alist.clear();
172 123 for (int i = 0; i < jarr.length(); i++) {
173 124 JSONObject jo2 = jarr.getJSONObject(i);
174   - StudentBean sb = new StudentBean();
175   - try {
176   - sb.setStuId(jo2.getString("stuId"));
177   - } catch (Exception e) {
178   - }
179   - try {
180   - sb.setStuName(jo2.getString("stuName"));
181   - } catch (Exception e) {
182   - }
183   - try {
184   - sb.setGender(jo2.getInt("gender"));
185   - } catch (Exception e) {
186   - }
187   - try {
188   - sb.setTerm(jo2.getString("term"));
189   - } catch (Exception e) {
190   - }
191   - try {
192   - sb.setAccount(jo2.getString("account"));
193   - } catch (Exception e) {
194   - }
195   - try {
196   - sb.setNickName(jo2.getString("nickName"));
197   - } catch (Exception e) {
198   - }
199   - try {
200   - sb.setAddress(jo2.getString("address"));
201   - } catch (Exception e) {
202   - }
203   - try {
204   - sb.setPhone(jo2.getString("phone"));
205   - } catch (Exception e) {
206   - }
207   - try {
208   - sb.setPhoto(jo2.getString("photo"));
209   - } catch (Exception e) {
210   - }
211   - try {
212   - sb.setFromType(jo2.getInt("fromType"));
213   - } catch (Exception e) {
214   - }
215   - try {
216   - sb.setGradeId(jo2.getInt("gradeId"));
217   - } catch (Exception e) {
218   - }
219   - try {
220   - sb.setTeacherId(jo2.getInt("teacherId"));
221   - } catch (Exception e) {
222   - }
223   - try {
224   - sb.setOriSchool(jo2.getString("oriSchool"));
225   - } catch (Exception e) {
226   - }
227   - try {
228   - sb.setParentPhone(jo2.getString("parentPhone"));
229   - } catch (Exception e) {
230   - }
231   - try {
232   - sb.setParentIdentity(jo2.getString("parentIdentity"));
233   - } catch (Exception e) {
234   - }
235   - try {
236   - sb.setTeacherName(jo2.getString("teacherName"));
237   - } catch (Exception e) {
238   - }
  125 + Gson gson = new Gson();
  126 + StudentBean sb = gson.fromJson(jo2.toString(), StudentBean.class);
239 127 alist.add(sb);
240 128 }
241   -
242   - if (alist.size() > 0)
  129 + if (alist.size() > 0) {
243 130 loadList();
  131 + }
244 132  
245 133 } else {
246 134  
247 135 }
248 136 } catch (Exception e) {
249 137 e.printStackTrace();
250   -
251 138 }
252   -
253 139 }
254 140  
255 141 @Override
... ... @@ -262,45 +148,57 @@ public class MeFragment extends BaseFragment {
262 148  
263 149 }
264 150 });
265   -
266   -
267 151 mRootView.findViewById(R.id.view_4).setOnClickListener(view -> startActivity(new Intent(getActivity(), YinsiActivity.class)));
268 152 mRootView.findViewById(R.id.view_5).setOnClickListener(view -> startActivity(new Intent(getActivity(), UserActivity.class)));
269   - mRootView.findViewById(R.id.view_3).setOnClickListener(view -> startActivity(new Intent(getActivity(), AccountActivity.class)));
  153 + mRootView.findViewById(R.id.view_3).setOnClickListener(view -> startActivityForResult(new Intent(getActivity(), AccountActivity.class), 1003));
  154 + }
270 155  
  156 + @Override
  157 + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  158 + super.onActivityResult(requestCode, resultCode, data);
  159 + Intent intent = new Intent(getActivity(), LoginActivity.class);
  160 + startActivity(intent);
  161 + getActivity().finish();
271 162 }
272 163  
273 164 public void loadList() {
274   - iv_21.setBackgroundResource(R.mipmap.tjxss);
275   - tv_21.setText("添加学生");
276   -
277   -
278   - iv_22.setBackgroundResource(R.mipmap.tjxss);
279   - tv_22.setText("添加学生");
280   -
281   - iv_23.setBackgroundResource(R.mipmap.tjxss);
282   - tv_23.setText("添加学生");
283   -
284   - if (alist.size() >= 1) {
285   -// if (alist.get(0).getPhoto() != null && alist.get(0).getPhoto().length() > 0)
286   -// Glide.with(getActivity()).load(alist.get(0).getPhoto()).into(iv_21);
287   -// else
288   - iv_21.setBackgroundResource(R.mipmap.txz);
289   - tv_21.setText(alist.get(0).getStuName());
290   - }
291   - if (alist.size() >= 2) {
292   -// if (alist.get(1).getPhoto() != null && alist.get(1).getPhoto().length() > 0)
293   -// Glide.with(getActivity()).load(alist.get(1).getPhoto()).into(iv_22);
294   -// else
295   - iv_22.setBackgroundResource(R.mipmap.txz);
296   - tv_22.setText(alist.get(1).getStuName());
297   - }
298   - if (alist.size() >= 3) {
299   -// if (alist.get(2).getPhoto() != null && alist.get(2).getPhoto().length() > 0)
300   -// Glide.with(getActivity()).load(alist.get(2).getPhoto()).into(iv_23);
301   -// else
302   - iv_23.setBackgroundResource(R.mipmap.txz);
303   - tv_23.setText(alist.get(2).getStuName());
304   - }
  165 + StudentBean sb = new StudentBean();
  166 + sb.setNickName("添加学生");
  167 + alist.add(0, sb);
  168 + BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_child, alist) {
  169 + @Override
  170 + protected void convert(@NonNull BaseViewHolder item, Object o) {
  171 + StudentBean studentBean = alist.get(item.getAdapterPosition());
  172 + item.setText(R.id.tv_name, studentBean.getNickName());
  173 + if (TextUtils.isEmpty(studentBean.getStuId())) {
  174 + item.setImageResource(R.id.iv_avatar, R.mipmap.tjxss);
  175 + item.setVisible(R.id.iv_vip, false);
  176 + item.getConvertView().setOnClickListener(new View.OnClickListener() {
  177 + @Override
  178 + public void onClick(View view) {
  179 + startActivity(new Intent(getActivity(), AddStudentActivity.class));
  180 + }
  181 + });
  182 + } else {
  183 + if (TextUtils.isEmpty(studentBean.getPhoto())) {
  184 + item.setImageResource(R.id.iv_avatar, studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female);
  185 + } else {
  186 + RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45));
  187 + RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
  188 + Glide.with(getActivity()).load(studentBean.getPhoto()).apply(options).into((ImageView) item.getView(R.id.iv_avatar));
  189 + }
  190 + item.setVisible(R.id.iv_vip, !"虚拟".equals(studentBean.getTeacherIdentity()));
  191 + item.getConvertView().setOnClickListener(new View.OnClickListener() {
  192 + @Override
  193 + public void onClick(View view) {
  194 + startActivity(new Intent(getActivity(), EditStudentActivity.class).putExtra("student", new Gson().toJson(studentBean)));
  195 + }
  196 + });
  197 + }
  198 + }
  199 + };
  200 + recycle.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
  201 + recycle.setAdapter(adapter);
305 202 }
  203 +
306 204 }
... ...
app/src/main/res/drawable/bg_item_video_10.xml
... ... @@ -0,0 +1,11 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:shape="rectangle">
  4 +
  5 + <solid android:color="#FFF9F6" />
  6 +
  7 + <corners
  8 + android:radius="10dp"
  9 + />
  10 +
  11 +</shape>
0 12 \ No newline at end of file
... ...
app/src/main/res/drawable/bg_solid_btn_grad.xml
... ... @@ -4,8 +4,6 @@
4 4  
5 5 <solid android:color="#E5E5E5" />
6 6  
7   - <corners
8   - android:radius="20dp"
9   - />
  7 + <corners android:radius="20dp" />
10 8  
11 9 </shape>
12 10 \ No newline at end of file
... ...
app/src/main/res/drawable/bg_solid_white_10_or.xml
... ... @@ -2,14 +2,11 @@
2 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 3 android:shape="rectangle">
4 4  
5   - <solid android:color="#FFFFFF"
6   - />
7   - <stroke android:width="2dp"
8   - android:color="#FE5E09"
9   - />
  5 + <solid android:color="#FFFFFF" />
  6 + <stroke
  7 + android:width="1dp"
  8 + android:color="#FE5E09" />
10 9  
11   - <corners
12   - android:radius="10dp"
13   - />
  10 + <corners android:radius="10dp" />
14 11  
15 12 </shape>
16 13 \ No newline at end of file
... ...
app/src/main/res/layout/activity_add_stu.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <View
10 9 android:id="@+id/view_1"
11 10 android:layout_width="match_parent"
12 11 android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14 12 android:background="@android:color/white"
15   - />
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
16 15 <TextView
17 16 android:layout_width="wrap_content"
18 17 android:layout_height="wrap_content"
19 18 android:text="添加学生"
20 19 android:textColor="#333333"
21 20 android:textSize="18dp"
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
22 22 app:layout_constraintLeft_toLeftOf="@id/view_1"
23 23 app:layout_constraintRight_toRightOf="@id/view_1"
24   - app:layout_constraintTop_toTopOf="@id/view_1"
25   - app:layout_constraintBottom_toBottomOf="@id/view_1"
26   - />
  24 + app:layout_constraintTop_toTopOf="@id/view_1" />
  25 +
27 26 <TextView
28 27 android:id="@+id/tv_cancel"
29 28 android:layout_width="wrap_content"
30 29 android:layout_height="wrap_content"
  30 + android:layout_marginLeft="15dp"
31 31 android:text="取消"
32 32 android:textColor="#666666"
33 33 android:textSize="16dp"
34   - app:layout_constraintLeft_toLeftOf="@id/view_1"
35   - app:layout_constraintTop_toTopOf="@id/view_1"
36 34 app:layout_constraintBottom_toBottomOf="@id/view_1"
37   - android:layout_marginLeft="15dp"
38   - />
39   - <ImageView
  35 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  36 + app:layout_constraintTop_toTopOf="@id/view_1" />
  37 +
  38 + <RelativeLayout
  39 + android:id="@+id/rl_avatar"
40 40 android:layout_width="75dp"
41 41 android:layout_height="75dp"
42   - android:background="@mipmap/txz"
  42 + android:layout_marginTop="32dp"
43 43 app:layout_constraintLeft_toLeftOf="parent"
44 44 app:layout_constraintRight_toRightOf="parent"
45   - app:layout_constraintTop_toBottomOf="@id/view_1"
46   - android:layout_marginTop="32dp"
47   - />
  45 + app:layout_constraintTop_toBottomOf="@id/view_1">
  46 +
  47 + <ImageView
  48 + android:id="@+id/iv_avatar"
  49 + android:layout_width="match_parent"
  50 + android:layout_height="match_parent"
  51 + android:background="@mipmap/txz" />
  52 +
  53 + <ImageView
  54 + android:layout_width="20dp"
  55 + android:layout_height="20dp"
  56 + android:layout_alignParentRight="true"
  57 + android:layout_alignParentBottom="true"
  58 + android:layout_marginBottom="5dp"
  59 + android:src="@mipmap/ic_edit" />
  60 + </RelativeLayout>
  61 +
48 62  
49 63 <View
50 64 android:id="@+id/view_2"
51   - android:layout_width="345dp"
  65 + android:layout_width="match_parent"
52 66 android:layout_height="50dp"
  67 + android:layout_marginLeft="15dp"
  68 + android:layout_marginTop="195dp"
  69 + android:layout_marginRight="15dp"
53 70 android:background="@drawable/bg_solid_white_10"
54 71 app:layout_constraintLeft_toLeftOf="parent"
55 72 app:layout_constraintRight_toRightOf="parent"
56   - app:layout_constraintTop_toTopOf="parent"
57   - android:layout_marginTop="195dp"
58   - />
  73 + app:layout_constraintTop_toTopOf="parent" />
59 74  
60 75 <TextView
61 76 android:layout_width="wrap_content"
62 77 android:layout_height="wrap_content"
  78 + android:layout_marginLeft="15dp"
  79 + android:text="昵称"
63 80 android:textColor="#666666"
64 81 android:textSize="16dp"
65   - android:text="昵称"
66   - app:layout_constraintTop_toTopOf="@id/view_2"
67 82 app:layout_constraintBottom_toBottomOf="@id/view_2"
68 83 app:layout_constraintLeft_toLeftOf="@id/view_2"
69   - android:layout_marginLeft="15dp"
70   - />
  84 + app:layout_constraintTop_toTopOf="@id/view_2" />
  85 +
71 86 <ImageView
72 87 android:layout_width="5.5dp"
73 88 android:layout_height="9.5dp"
  89 + android:layout_marginRight="15dp"
74 90 android:background="@mipmap/ycaj"
75   - app:layout_constraintTop_toTopOf="@id/view_2"
76 91 app:layout_constraintBottom_toBottomOf="@id/view_2"
77 92 app:layout_constraintRight_toRightOf="@id/view_2"
78   - android:layout_marginRight="15dp"
79   - />
  93 + app:layout_constraintTop_toTopOf="@id/view_2" />
80 94  
81 95 <TextView
82 96 android:id="@+id/tv_name"
83 97 android:layout_width="wrap_content"
84 98 android:layout_height="wrap_content"
  99 + android:layout_marginRight="26dp"
  100 + android:text="请输入"
85 101 android:textColor="#999999"
86 102 android:textSize="16dp"
87   - android:text="请输入"
88   - app:layout_constraintTop_toTopOf="@id/view_2"
89 103 app:layout_constraintBottom_toBottomOf="@id/view_2"
90 104 app:layout_constraintRight_toRightOf="@id/view_2"
91   - android:layout_marginRight="26dp"
92   - />
  105 + app:layout_constraintTop_toTopOf="@id/view_2" />
93 106  
94 107 <View
95 108 android:id="@+id/view_3"
96   - android:layout_width="345dp"
  109 + android:layout_width="match_parent"
97 110 android:layout_height="50dp"
  111 + android:layout_marginLeft="15dp"
  112 + android:layout_marginTop="260dp"
  113 + android:layout_marginRight="15dp"
98 114 android:background="@drawable/bg_solid_white_10"
99 115 app:layout_constraintLeft_toLeftOf="parent"
100 116 app:layout_constraintRight_toRightOf="parent"
101   - app:layout_constraintTop_toTopOf="parent"
102   - android:layout_marginTop="260dp"
103   - />
  117 + app:layout_constraintTop_toTopOf="parent" />
104 118  
105 119 <TextView
106 120 android:layout_width="wrap_content"
107 121 android:layout_height="wrap_content"
  122 + android:layout_marginLeft="15dp"
  123 + android:text="性别"
108 124 android:textColor="#666666"
109 125 android:textSize="16dp"
110   - android:text="性别"
111   - app:layout_constraintTop_toTopOf="@id/view_3"
112 126 app:layout_constraintBottom_toBottomOf="@id/view_3"
113 127 app:layout_constraintLeft_toLeftOf="@id/view_3"
114   - android:layout_marginLeft="15dp"
115   - />
  128 + app:layout_constraintTop_toTopOf="@id/view_3" />
  129 +
116 130 <ImageView
117 131 android:layout_width="5.5dp"
118 132 android:layout_height="9.5dp"
  133 + android:layout_marginRight="15dp"
119 134 android:background="@mipmap/ycaj"
120   - app:layout_constraintTop_toTopOf="@id/view_3"
121 135 app:layout_constraintBottom_toBottomOf="@id/view_3"
122 136 app:layout_constraintRight_toRightOf="@id/view_3"
123   - android:layout_marginRight="15dp"
124   - />
  137 + app:layout_constraintTop_toTopOf="@id/view_3" />
  138 +
125 139 <TextView
126 140 android:id="@+id/tv_sex"
127 141 android:layout_width="wrap_content"
128 142 android:layout_height="wrap_content"
  143 + android:layout_marginRight="26dp"
  144 + android:text="请选择"
129 145 android:textColor="#999999"
130 146 android:textSize="16dp"
131   - android:text="请选择"
132   - app:layout_constraintTop_toTopOf="@id/view_3"
133 147 app:layout_constraintBottom_toBottomOf="@id/view_3"
134 148 app:layout_constraintRight_toRightOf="@id/view_3"
135   - android:layout_marginRight="26dp"
136   - />
  149 + app:layout_constraintTop_toTopOf="@id/view_3" />
137 150  
138 151 <View
139 152 android:id="@+id/view_4"
140   - android:layout_width="345dp"
  153 + android:layout_width="match_parent"
141 154 android:layout_height="50dp"
  155 + android:layout_marginLeft="15dp"
  156 + android:layout_marginTop="325dp"
  157 + android:layout_marginRight="15dp"
142 158 android:background="@drawable/bg_solid_white_10"
143 159 app:layout_constraintLeft_toLeftOf="parent"
144 160 app:layout_constraintRight_toRightOf="parent"
145 161 app:layout_constraintTop_toTopOf="parent"
146   - android:layout_marginTop="325dp"
147 162  
148 163 />
149 164  
150 165 <TextView
151 166 android:layout_width="wrap_content"
152 167 android:layout_height="wrap_content"
  168 + android:layout_marginLeft="15dp"
  169 + android:text="年级"
153 170 android:textColor="#666666"
154 171 android:textSize="16dp"
155   - android:text="年级"
156   - app:layout_constraintTop_toTopOf="@id/view_4"
157 172 app:layout_constraintBottom_toBottomOf="@id/view_4"
158 173 app:layout_constraintLeft_toLeftOf="@id/view_4"
159   - android:layout_marginLeft="15dp"
160   - />
  174 + app:layout_constraintTop_toTopOf="@id/view_4" />
  175 +
161 176 <ImageView
162 177 android:layout_width="5.5dp"
163 178 android:layout_height="9.5dp"
  179 + android:layout_marginRight="15dp"
164 180 android:background="@mipmap/ycaj"
165   - app:layout_constraintTop_toTopOf="@id/view_4"
166 181 app:layout_constraintBottom_toBottomOf="@id/view_4"
167 182 app:layout_constraintRight_toRightOf="@id/view_4"
168   - android:layout_marginRight="15dp"
169   - />
  183 + app:layout_constraintTop_toTopOf="@id/view_4" />
  184 +
170 185 <TextView
171 186 android:id="@+id/tv_nian"
172 187 android:layout_width="wrap_content"
173 188 android:layout_height="wrap_content"
  189 + android:layout_marginRight="26dp"
  190 + android:text="请选择"
174 191 android:textColor="#999999"
175 192 android:textSize="16dp"
176   - android:text="请选择"
177   - app:layout_constraintTop_toTopOf="@id/view_4"
178 193 app:layout_constraintBottom_toBottomOf="@id/view_4"
179 194 app:layout_constraintRight_toRightOf="@id/view_4"
180   - android:layout_marginRight="26dp"
181   - />
  195 + app:layout_constraintTop_toTopOf="@id/view_4" />
  196 +
182 197 <View
183 198 android:id="@+id/view_5"
184   - android:layout_width="345dp"
  199 + android:layout_width="match_parent"
185 200 android:layout_height="50dp"
  201 + android:layout_marginLeft="15dp"
  202 + android:layout_marginTop="390dp"
  203 + android:layout_marginRight="15dp"
186 204 android:background="@drawable/bg_solid_white_10"
187 205 app:layout_constraintLeft_toLeftOf="parent"
188 206 app:layout_constraintRight_toRightOf="parent"
189 207 app:layout_constraintTop_toTopOf="parent"
190   - android:layout_marginTop="390dp"
191 208  
192 209 />
193 210  
... ... @@ -195,53 +212,48 @@
195 212  
196 213 android:layout_width="wrap_content"
197 214 android:layout_height="wrap_content"
  215 + android:layout_marginLeft="15dp"
  216 + android:text="家长身份"
198 217 android:textColor="#666666"
199 218 android:textSize="16dp"
200   - android:text="家长身份"
201   - app:layout_constraintTop_toTopOf="@id/view_5"
202 219 app:layout_constraintBottom_toBottomOf="@id/view_5"
203 220 app:layout_constraintLeft_toLeftOf="@id/view_5"
204   - android:layout_marginLeft="15dp"
205   - />
  221 + app:layout_constraintTop_toTopOf="@id/view_5" />
  222 +
206 223 <TextView
207 224 android:id="@+id/tv_shen"
208 225 android:layout_width="wrap_content"
209 226 android:layout_height="wrap_content"
  227 + android:layout_marginRight="26dp"
  228 + android:text="请选择"
210 229 android:textColor="#999999"
211 230 android:textSize="16dp"
212   - android:text="请选择"
213   - app:layout_constraintTop_toTopOf="@id/view_5"
214 231 app:layout_constraintBottom_toBottomOf="@id/view_5"
215 232 app:layout_constraintRight_toRightOf="@id/view_5"
216   - android:layout_marginRight="26dp"
217   - />
  233 + app:layout_constraintTop_toTopOf="@id/view_5" />
  234 +
218 235 <ImageView
219 236 android:layout_width="5.5dp"
220 237 android:layout_height="9.5dp"
  238 + android:layout_marginRight="15dp"
221 239 android:background="@mipmap/ycaj"
222   - app:layout_constraintTop_toTopOf="@id/view_5"
223 240 app:layout_constraintBottom_toBottomOf="@id/view_5"
224 241 app:layout_constraintRight_toRightOf="@id/view_5"
225   - android:layout_marginRight="15dp"
226   - />
227   -
  242 + app:layout_constraintTop_toTopOf="@id/view_5" />
228 243  
229 244  
230 245 <Button
231 246 android:id="@+id/btn_next"
232 247 android:layout_width="180dp"
233 248 android:layout_height="40dp"
234   - app:layout_constraintLeft_toLeftOf="parent"
235   - app:layout_constraintRight_toRightOf="parent"
236   - app:layout_constraintTop_toTopOf="parent"
237 249 android:layout_marginTop="500dp"
238 250 android:background="@drawable/bg_solid_btn_grad"
239 251 android:text="确认"
240 252 android:textColor="#999999"
241 253 android:textSize="16dp"
242   - />
243   -
244   -
  254 + app:layout_constraintLeft_toLeftOf="parent"
  255 + app:layout_constraintRight_toRightOf="parent"
  256 + app:layout_constraintTop_toTopOf="parent" />
245 257  
246 258  
247 259 </androidx.constraintlayout.widget.ConstraintLayout>
248 260 \ No newline at end of file
... ...
app/src/main/res/layout/activity_changem.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <View
10 9 android:id="@+id/view_1"
11 10 android:layout_width="match_parent"
12 11 android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14 12 android:background="@android:color/white"
15   - />
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
16 15 <TextView
17 16 android:layout_width="wrap_content"
18 17 android:layout_height="wrap_content"
19 18 android:text="修改密码"
20 19 android:textColor="#333333"
21 20 android:textSize="18dp"
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
22 22 app:layout_constraintLeft_toLeftOf="@id/view_1"
23 23 app:layout_constraintRight_toRightOf="@id/view_1"
24   - app:layout_constraintTop_toTopOf="@id/view_1"
25   - app:layout_constraintBottom_toBottomOf="@id/view_1"
26   - />
  24 + app:layout_constraintTop_toTopOf="@id/view_1" />
  25 +
27 26 <ImageView
28 27 android:id="@+id/iv_back"
29 28 android:layout_width="10dp"
30 29 android:layout_height="16dp"
31   - app:layout_constraintLeft_toLeftOf="parent"
32   - app:layout_constraintTop_toTopOf="@id/view_1"
33   - app:layout_constraintBottom_toBottomOf="@id/view_1"
34 30 android:layout_marginLeft="15dp"
35 31 android:background="@mipmap/icon_back"
36   - />
  32 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  33 + app:layout_constraintLeft_toLeftOf="parent"
  34 + app:layout_constraintTop_toTopOf="@id/view_1" />
  35 +
37 36 <View
38 37 android:layout_width="match_parent"
39 38 android:layout_height="1dp"
40 39 android:background="#EEEEEE"
41   - app:layout_constraintTop_toBottomOf="@id/view_1"
42   - />
  40 + app:layout_constraintTop_toBottomOf="@id/view_1" />
43 41  
44 42 <View
45 43 android:id="@+id/view_3"
46 44 android:layout_width="match_parent"
47 45 android:layout_height="45dp"
  46 + android:layout_marginTop="80dp"
48 47 android:background="@android:color/white"
49 48 app:layout_constraintLeft_toLeftOf="parent"
50 49 app:layout_constraintRight_toRightOf="parent"
51   - app:layout_constraintTop_toTopOf="parent"
52   - android:layout_marginTop="80dp"
53   - />
54   - <ImageView
55   - android:id="@+id/iv_3"
56   - android:layout_width="20dp"
57   - android:layout_height="16dp"
58   - android:background="@mipmap/xs"
59   - app:layout_constraintTop_toTopOf="@id/view_3"
60   - app:layout_constraintBottom_toBottomOf="@id/view_3"
61   - app:layout_constraintRight_toRightOf="@id/view_3"
62   - android:layout_marginRight="20dp"
63   - />
  50 + app:layout_constraintTop_toTopOf="parent" />
  51 +
  52 +
64 53 <TextView
65 54 android:id="@+id/tv_3"
66 55 android:layout_width="wrap_content"
67 56 android:layout_height="wrap_content"
  57 + android:layout_marginLeft="15dp"
68 58 android:text="请输入原密码"
69 59 android:textColor="#333333"
70 60 android:textSize="15dp"
71   - app:layout_constraintTop_toTopOf="@id/view_3"
72 61 app:layout_constraintBottom_toBottomOf="@id/view_3"
73 62 app:layout_constraintLeft_toLeftOf="@id/view_3"
74   - android:layout_marginLeft="15dp"
75   - />
  63 + app:layout_constraintTop_toTopOf="@id/view_3" />
76 64  
77 65  
78 66 <EditText
  67 + android:id="@+id/et_old_password"
79 68 android:layout_width="0dp"
80 69 android:layout_height="45dp"
81   - android:background="@android:color/transparent"
82   - app:layout_constraintTop_toTopOf="@id/view_3"
83   - app:layout_constraintBottom_toBottomOf="@id/view_3"
84   - app:layout_constraintLeft_toRightOf="@id/tv_3"
85   - app:layout_constraintRight_toRightOf="parent"
86 70 android:layout_marginLeft="30dp"
87 71 android:layout_marginRight="50dp"
88   - android:textSize="15dp"
  72 + android:background="@android:color/transparent"
89 73 android:gravity="left|center_vertical"
90   - android:inputType="textPassword"
91 74 android:hint="请输入密码"
  75 + android:inputType="textPassword"
92 76 android:textColor="#333333"
93 77 android:textColorHint="#666666"
  78 + android:textSize="15dp"
  79 + app:layout_constraintBottom_toBottomOf="@id/view_3"
  80 + app:layout_constraintLeft_toRightOf="@id/tv_3"
  81 + app:layout_constraintRight_toRightOf="parent"
  82 + app:layout_constraintTop_toTopOf="@id/view_3"
94 83  
95 84 />
96 85  
... ... @@ -98,133 +87,110 @@
98 87 android:id="@+id/view_4"
99 88 android:layout_width="match_parent"
100 89 android:layout_height="45dp"
  90 + android:layout_marginTop="125dp"
101 91 android:background="@android:color/white"
102 92 app:layout_constraintLeft_toLeftOf="parent"
103 93 app:layout_constraintRight_toRightOf="parent"
104   - app:layout_constraintTop_toTopOf="parent"
105   - android:layout_marginTop="125dp"
106   - />
107   - <ImageView
108   - android:id="@+id/iv_4"
109   - android:layout_width="20dp"
110   - android:layout_height="16dp"
111   - android:background="@mipmap/xs"
112   - app:layout_constraintTop_toTopOf="@id/view_4"
113   - app:layout_constraintBottom_toBottomOf="@id/view_4"
114   - app:layout_constraintRight_toRightOf="@id/view_4"
115   - android:layout_marginRight="20dp"
116   - />
  94 + app:layout_constraintTop_toTopOf="parent" />
  95 +
  96 +
117 97 <TextView
118 98 android:id="@+id/tv_4"
119 99 android:layout_width="wrap_content"
120 100 android:layout_height="wrap_content"
  101 + android:layout_marginLeft="15dp"
121 102 android:text="请输入新密码"
122 103 android:textColor="#333333"
123 104 android:textSize="15dp"
124   - app:layout_constraintTop_toTopOf="@id/view_4"
125 105 app:layout_constraintBottom_toBottomOf="@id/view_4"
126 106 app:layout_constraintLeft_toLeftOf="@id/view_4"
127   - android:layout_marginLeft="15dp"
128   - />
  107 + app:layout_constraintTop_toTopOf="@id/view_4" />
129 108  
130 109  
131 110 <EditText
132 111 android:id="@+id/et_pwd"
133 112 android:layout_width="0dp"
134 113 android:layout_height="45dp"
135   - android:background="@android:color/transparent"
136   - app:layout_constraintTop_toTopOf="@id/view_4"
137   - app:layout_constraintBottom_toBottomOf="@id/view_4"
138   - app:layout_constraintLeft_toRightOf="@id/tv_4"
139   - app:layout_constraintRight_toRightOf="parent"
140 114 android:layout_marginLeft="30dp"
141 115 android:layout_marginRight="50dp"
142   - android:textSize="15dp"
  116 + android:background="@android:color/transparent"
143 117 android:gravity="left|center_vertical"
144   - android:inputType="textPassword"
145 118 android:hint="请输入密码"
  119 + android:inputType="textPassword"
146 120 android:textColor="#333333"
147 121 android:textColorHint="#666666"
148   - />
  122 + android:textSize="15dp"
  123 + app:layout_constraintBottom_toBottomOf="@id/view_4"
  124 + app:layout_constraintLeft_toRightOf="@id/tv_4"
  125 + app:layout_constraintRight_toRightOf="parent"
  126 + app:layout_constraintTop_toTopOf="@id/view_4" />
149 127  
150 128  
151 129 <View
152 130 android:id="@+id/view_5"
153 131 android:layout_width="match_parent"
154 132 android:layout_height="45dp"
  133 + android:layout_marginTop="171dp"
155 134 android:background="@android:color/white"
156 135 app:layout_constraintLeft_toLeftOf="parent"
157 136 app:layout_constraintRight_toRightOf="parent"
158   - app:layout_constraintTop_toTopOf="parent"
159   - android:layout_marginTop="171dp"
160   - />
161   - <ImageView
162   - android:id="@+id/iv_5"
163   - android:layout_width="20dp"
164   - android:layout_height="16dp"
165   - android:background="@mipmap/xs"
166   - app:layout_constraintTop_toTopOf="@id/view_5"
167   - app:layout_constraintBottom_toBottomOf="@id/view_5"
168   - app:layout_constraintRight_toRightOf="@id/view_5"
169   - android:layout_marginRight="20dp"
170   - />
  137 + app:layout_constraintTop_toTopOf="parent" />
  138 +
  139 +
171 140 <TextView
172 141 android:id="@+id/tv_5"
173 142 android:layout_width="wrap_content"
174 143 android:layout_height="wrap_content"
  144 + android:layout_marginLeft="15dp"
175 145 android:text="再次输入新密码"
176 146 android:textColor="#333333"
177 147 android:textSize="15dp"
178   - app:layout_constraintTop_toTopOf="@id/view_5"
179 148 app:layout_constraintBottom_toBottomOf="@id/view_5"
180 149 app:layout_constraintLeft_toLeftOf="@id/view_5"
181   - android:layout_marginLeft="15dp"
182   - />
  150 + app:layout_constraintTop_toTopOf="@id/view_5" />
183 151  
184 152  
185 153 <EditText
  154 + android:id="@+id/et_pwd_2"
186 155 android:layout_width="0dp"
187 156 android:layout_height="45dp"
188   - android:background="@android:color/transparent"
189   - app:layout_constraintTop_toTopOf="@id/view_5"
190   - app:layout_constraintBottom_toBottomOf="@id/view_5"
191   - app:layout_constraintLeft_toRightOf="@id/tv_5"
192   - app:layout_constraintRight_toRightOf="parent"
193 157 android:layout_marginLeft="15dp"
194 158 android:layout_marginRight="50dp"
195   - android:textSize="15dp"
  159 + android:background="@android:color/transparent"
196 160 android:gravity="left|center_vertical"
197   - android:inputType="textPassword"
198 161 android:hint="请再次输入密码"
  162 + android:inputType="textPassword"
199 163 android:textColor="#333333"
200 164 android:textColorHint="#666666"
201   - />
  165 + android:textSize="15dp"
  166 + app:layout_constraintBottom_toBottomOf="@id/view_5"
  167 + app:layout_constraintLeft_toRightOf="@id/tv_5"
  168 + app:layout_constraintRight_toRightOf="parent"
  169 + app:layout_constraintTop_toTopOf="@id/view_5" />
  170 +
202 171 <TextView
203 172 android:layout_width="wrap_content"
204 173 android:layout_height="wrap_content"
  174 + android:layout_marginLeft="15dp"
  175 + android:layout_marginTop="230dp"
205 176 android:text="6-16位密码,数字或字母"
206 177 android:textColor="#999999"
207 178 android:textSize="15dp"
208 179 app:layout_constraintLeft_toLeftOf="parent"
209   - app:layout_constraintTop_toTopOf="parent"
210   - android:layout_marginTop="230dp"
211   - android:layout_marginLeft="15dp"
212   - />
  180 + app:layout_constraintTop_toTopOf="parent" />
213 181  
214 182 <Button
215 183 android:id="@+id/btn_next"
216 184 android:layout_width="180dp"
217 185 android:layout_height="40dp"
  186 + android:layout_marginTop="310dp"
  187 + android:background="@drawable/bg_solid_btn"
218 188 android:text="确认"
219 189 android:textColor="@color/white"
220 190 android:textSize="16dp"
221   - android:background="@drawable/bg_solid_btn"
222 191 app:layout_constraintLeft_toLeftOf="parent"
223 192 app:layout_constraintRight_toRightOf="parent"
224   - app:layout_constraintTop_toTopOf="parent"
225   - android:layout_marginTop="310dp"
226   - />
227   -
  193 + app:layout_constraintTop_toTopOf="parent" />
228 194  
229 195  
230 196 </androidx.constraintlayout.widget.ConstraintLayout>
231 197 \ No newline at end of file
... ...
app/src/main/res/layout/activity_edit_stu.xml
... ... @@ -0,0 +1,305 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
  4 + android:layout_width="match_parent"
  5 + android:layout_height="match_parent"
  6 + android:background="#F4F6F8">
  7 +
  8 + <View
  9 + android:id="@+id/view_1"
  10 + android:layout_width="match_parent"
  11 + android:layout_height="44dp"
  12 + android:background="@android:color/white"
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
  15 + <TextView
  16 + android:layout_width="wrap_content"
  17 + android:layout_height="wrap_content"
  18 + android:text="编辑学生"
  19 + android:textColor="#333333"
  20 + android:textSize="18dp"
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  22 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  23 + app:layout_constraintRight_toRightOf="@id/view_1"
  24 + app:layout_constraintTop_toTopOf="@id/view_1" />
  25 +
  26 + <TextView
  27 + android:id="@+id/tv_cancel"
  28 + android:layout_width="wrap_content"
  29 + android:layout_height="wrap_content"
  30 + android:layout_marginLeft="15dp"
  31 + android:text="取消"
  32 + android:textColor="#666666"
  33 + android:textSize="16dp"
  34 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  35 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  36 + app:layout_constraintTop_toTopOf="@id/view_1" />
  37 +
  38 + <RelativeLayout
  39 + android:id="@+id/rl_avatar"
  40 + android:layout_width="75dp"
  41 + android:layout_height="75dp"
  42 + android:layout_marginTop="32dp"
  43 + app:layout_constraintLeft_toLeftOf="parent"
  44 + app:layout_constraintRight_toRightOf="parent"
  45 + app:layout_constraintTop_toBottomOf="@id/view_1">
  46 +
  47 + <ImageView
  48 + android:id="@+id/iv_avatar"
  49 + android:layout_width="match_parent"
  50 + android:layout_height="match_parent"
  51 + android:background="@mipmap/txz" />
  52 +
  53 + <ImageView
  54 + android:layout_width="20dp"
  55 + android:layout_height="20dp"
  56 + android:layout_alignParentRight="true"
  57 + android:layout_alignParentBottom="true"
  58 + android:layout_marginBottom="5dp"
  59 + android:src="@mipmap/ic_edit" />
  60 + </RelativeLayout>
  61 +
  62 +
  63 + <View
  64 + android:id="@+id/view_2"
  65 + android:layout_width="match_parent"
  66 + android:layout_marginLeft="15dp"
  67 + android:layout_marginRight="15dp"
  68 + android:layout_height="50dp"
  69 + android:layout_marginTop="195dp"
  70 + android:background="@drawable/bg_solid_white_10"
  71 + app:layout_constraintLeft_toLeftOf="parent"
  72 + app:layout_constraintRight_toRightOf="parent"
  73 + app:layout_constraintTop_toTopOf="parent" />
  74 +
  75 + <TextView
  76 + android:layout_width="wrap_content"
  77 + android:layout_height="wrap_content"
  78 + android:layout_marginLeft="15dp"
  79 + android:text="昵称"
  80 + android:textColor="#666666"
  81 + android:textSize="16dp"
  82 + app:layout_constraintBottom_toBottomOf="@id/view_2"
  83 + app:layout_constraintLeft_toLeftOf="@id/view_2"
  84 + app:layout_constraintTop_toTopOf="@id/view_2" />
  85 +
  86 + <ImageView
  87 + android:layout_width="5.5dp"
  88 + android:layout_height="9.5dp"
  89 + android:layout_marginRight="15dp"
  90 + android:background="@mipmap/ycaj"
  91 + app:layout_constraintBottom_toBottomOf="@id/view_2"
  92 + app:layout_constraintRight_toRightOf="@id/view_2"
  93 + app:layout_constraintTop_toTopOf="@id/view_2" />
  94 +
  95 + <TextView
  96 + android:id="@+id/tv_name"
  97 + android:layout_width="wrap_content"
  98 + android:layout_height="wrap_content"
  99 + android:layout_marginRight="26dp"
  100 + android:text="请输入"
  101 + android:textColor="#333333"
  102 + android:textSize="16dp"
  103 + app:layout_constraintBottom_toBottomOf="@id/view_2"
  104 + app:layout_constraintRight_toRightOf="@id/view_2"
  105 + app:layout_constraintTop_toTopOf="@id/view_2" />
  106 +
  107 + <View
  108 + android:id="@+id/view_3"
  109 + android:layout_width="match_parent"
  110 + android:layout_marginLeft="15dp"
  111 + android:layout_marginRight="15dp"
  112 + android:layout_height="50dp"
  113 + android:layout_marginTop="260dp"
  114 + android:background="@drawable/bg_solid_white_10"
  115 + app:layout_constraintLeft_toLeftOf="parent"
  116 + app:layout_constraintRight_toRightOf="parent"
  117 + app:layout_constraintTop_toTopOf="parent" />
  118 +
  119 + <TextView
  120 + android:layout_width="wrap_content"
  121 + android:layout_height="wrap_content"
  122 + android:layout_marginLeft="15dp"
  123 + android:text="性别"
  124 + android:textColor="#666666"
  125 + android:textSize="16dp"
  126 + app:layout_constraintBottom_toBottomOf="@id/view_3"
  127 + app:layout_constraintLeft_toLeftOf="@id/view_3"
  128 + app:layout_constraintTop_toTopOf="@id/view_3" />
  129 +
  130 + <ImageView
  131 + android:layout_width="5.5dp"
  132 + android:layout_height="9.5dp"
  133 + android:layout_marginRight="15dp"
  134 + android:background="@mipmap/ycaj"
  135 + app:layout_constraintBottom_toBottomOf="@id/view_3"
  136 + app:layout_constraintRight_toRightOf="@id/view_3"
  137 + app:layout_constraintTop_toTopOf="@id/view_3" />
  138 +
  139 + <TextView
  140 + android:id="@+id/tv_sex"
  141 + android:layout_width="wrap_content"
  142 + android:layout_height="wrap_content"
  143 + android:layout_marginRight="26dp"
  144 + android:text="请选择"
  145 + android:textColor="#333333"
  146 + android:textSize="16dp"
  147 + app:layout_constraintBottom_toBottomOf="@id/view_3"
  148 + app:layout_constraintRight_toRightOf="@id/view_3"
  149 + app:layout_constraintTop_toTopOf="@id/view_3" />
  150 +
  151 + <View
  152 + android:id="@+id/view_4"
  153 + android:layout_width="match_parent"
  154 + android:layout_marginLeft="15dp"
  155 + android:layout_marginRight="15dp"
  156 + android:layout_height="50dp"
  157 + android:layout_marginTop="325dp"
  158 + android:background="@drawable/bg_solid_white_10"
  159 + app:layout_constraintLeft_toLeftOf="parent"
  160 + app:layout_constraintRight_toRightOf="parent"
  161 + app:layout_constraintTop_toTopOf="parent"
  162 +
  163 + />
  164 +
  165 + <TextView
  166 + android:layout_width="wrap_content"
  167 + android:layout_height="wrap_content"
  168 + android:layout_marginLeft="15dp"
  169 + android:text="年级"
  170 + android:textColor="#666666"
  171 + android:textSize="16dp"
  172 + app:layout_constraintBottom_toBottomOf="@id/view_4"
  173 + app:layout_constraintLeft_toLeftOf="@id/view_4"
  174 + app:layout_constraintTop_toTopOf="@id/view_4" />
  175 +
  176 + <ImageView
  177 + android:layout_width="5.5dp"
  178 + android:layout_height="9.5dp"
  179 + android:layout_marginRight="15dp"
  180 + android:background="@mipmap/ycaj"
  181 + app:layout_constraintBottom_toBottomOf="@id/view_4"
  182 + app:layout_constraintRight_toRightOf="@id/view_4"
  183 + app:layout_constraintTop_toTopOf="@id/view_4" />
  184 +
  185 + <TextView
  186 + android:id="@+id/tv_nian"
  187 + android:layout_width="wrap_content"
  188 + android:layout_height="wrap_content"
  189 + android:layout_marginRight="26dp"
  190 + android:text="请选择"
  191 + android:textColor="#333333"
  192 + android:textSize="16dp"
  193 + app:layout_constraintBottom_toBottomOf="@id/view_4"
  194 + app:layout_constraintRight_toRightOf="@id/view_4"
  195 + app:layout_constraintTop_toTopOf="@id/view_4" />
  196 +
  197 + <View
  198 + android:id="@+id/view_5"
  199 + android:layout_width="match_parent"
  200 + android:layout_marginLeft="15dp"
  201 + android:layout_marginRight="15dp"
  202 + android:layout_height="50dp"
  203 + android:layout_marginTop="390dp"
  204 + android:background="@drawable/bg_solid_white_10"
  205 + app:layout_constraintLeft_toLeftOf="parent"
  206 + app:layout_constraintRight_toRightOf="parent"
  207 + app:layout_constraintTop_toTopOf="parent"
  208 +
  209 + />
  210 +
  211 + <TextView
  212 +
  213 + android:layout_width="wrap_content"
  214 + android:layout_height="wrap_content"
  215 + android:layout_marginLeft="15dp"
  216 + android:text="家长身份"
  217 + android:textColor="#666666"
  218 + android:textSize="16dp"
  219 + app:layout_constraintBottom_toBottomOf="@id/view_5"
  220 + app:layout_constraintLeft_toLeftOf="@id/view_5"
  221 + app:layout_constraintTop_toTopOf="@id/view_5" />
  222 +
  223 + <TextView
  224 + android:id="@+id/tv_shen"
  225 + android:layout_width="wrap_content"
  226 + android:layout_height="wrap_content"
  227 + android:layout_marginRight="26dp"
  228 + android:text="请选择"
  229 + android:textColor="#333333"
  230 + android:textSize="16dp"
  231 + app:layout_constraintBottom_toBottomOf="@id/view_5"
  232 + app:layout_constraintRight_toRightOf="@id/view_5"
  233 + app:layout_constraintTop_toTopOf="@id/view_5" />
  234 +
  235 + <ImageView
  236 + android:layout_width="5.5dp"
  237 + android:layout_height="9.5dp"
  238 + android:layout_marginRight="15dp"
  239 + android:background="@mipmap/ycaj"
  240 + app:layout_constraintBottom_toBottomOf="@id/view_5"
  241 + app:layout_constraintRight_toRightOf="@id/view_5"
  242 + app:layout_constraintTop_toTopOf="@id/view_5" />
  243 +
  244 + <View
  245 + android:id="@+id/view_6"
  246 + android:layout_width="match_parent"
  247 + android:layout_marginLeft="15dp"
  248 + android:layout_marginRight="15dp"
  249 + android:layout_height="50dp"
  250 + android:layout_marginTop="455dp"
  251 + android:background="@drawable/bg_solid_white_10"
  252 + app:layout_constraintLeft_toLeftOf="parent"
  253 + app:layout_constraintRight_toRightOf="parent"
  254 + app:layout_constraintTop_toTopOf="parent"
  255 +
  256 + />
  257 +
  258 + <TextView
  259 + android:layout_width="wrap_content"
  260 + android:layout_height="wrap_content"
  261 + android:layout_marginLeft="15dp"
  262 + android:text="绑定老师"
  263 + android:textColor="#666666"
  264 + android:textSize="16dp"
  265 + app:layout_constraintBottom_toBottomOf="@id/view_6"
  266 + app:layout_constraintLeft_toLeftOf="@id/view_6"
  267 + app:layout_constraintTop_toTopOf="@id/view_6" />
  268 +
  269 + <ImageView
  270 + android:id="@+id/iv_teacher"
  271 + android:layout_width="28dp"
  272 + android:layout_height="28dp"
  273 + android:layout_marginRight="10dp"
  274 + app:layout_constraintBottom_toBottomOf="@id/view_6"
  275 + app:layout_constraintRight_toLeftOf="@+id/tv_teacher"
  276 + app:layout_constraintTop_toTopOf="@id/view_6" />
  277 +
  278 + <TextView
  279 + android:id="@+id/tv_teacher"
  280 + android:layout_width="wrap_content"
  281 + android:layout_height="wrap_content"
  282 + android:layout_marginRight="15dp"
  283 + android:text="未绑定"
  284 + android:textColor="#333333"
  285 + android:textSize="16dp"
  286 + app:layout_constraintBottom_toBottomOf="@id/view_6"
  287 + app:layout_constraintRight_toRightOf="@id/view_6"
  288 + app:layout_constraintTop_toTopOf="@id/view_6" />
  289 +
  290 +
  291 + <Button
  292 + android:id="@+id/btn_next"
  293 + android:layout_width="180dp"
  294 + android:layout_height="40dp"
  295 + android:layout_marginTop="570dp"
  296 + android:background="@drawable/bg_solid_btn_grad"
  297 + android:text="确认"
  298 + android:textColor="#999999"
  299 + android:textSize="16dp"
  300 + app:layout_constraintLeft_toLeftOf="parent"
  301 + app:layout_constraintRight_toRightOf="parent"
  302 + app:layout_constraintTop_toTopOf="parent" />
  303 +
  304 +
  305 +</androidx.constraintlayout.widget.ConstraintLayout>
0 306 \ No newline at end of file
... ...
app/src/main/res/layout/activity_login.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="@mipmap/bg"
7   - >
8   -
  6 + android:background="@mipmap/bg">
9 7  
10 8  
11 9 <TextView
12 10 android:layout_width="wrap_content"
13 11 android:layout_height="wrap_content"
  12 + android:layout_marginLeft="30dp"
  13 + android:layout_marginTop="64dp"
14 14 android:text="登陆"
15 15 android:textColor="#333333"
16   - android:textStyle="bold"
17 16 android:textSize="25dp"
18   - android:layout_marginLeft="30dp"
19   - android:layout_marginTop="64dp"
  17 + android:textStyle="bold"
20 18 app:layout_constraintLeft_toLeftOf="parent"
21   - app:layout_constraintTop_toTopOf="parent"
22   - />
  19 + app:layout_constraintTop_toTopOf="parent" />
23 20  
24 21 <View
25 22 android:id="@+id/view_1"
26 23 android:layout_width="315dp"
27 24 android:layout_height="50dp"
28   - app:layout_constraintLeft_toLeftOf="parent"
29   - app:layout_constraintRight_toRightOf="parent"
30   - app:layout_constraintTop_toTopOf="parent"
31 25 android:layout_marginTop="166dp"
32 26 android:background="@drawable/bg_solid_white"
33   - />
  27 + app:layout_constraintLeft_toLeftOf="parent"
  28 + app:layout_constraintRight_toRightOf="parent"
  29 + app:layout_constraintTop_toTopOf="parent" />
34 30  
35 31 <ImageView
36 32 android:id="@+id/iv_1"
37 33 android:layout_width="16dp"
38 34 android:layout_height="18dp"
39   - app:layout_constraintTop_toTopOf="@id/view_1"
  35 + android:layout_marginLeft="20dp"
  36 + android:background="@mipmap/sjh"
40 37 app:layout_constraintBottom_toBottomOf="@id/view_1"
41 38 app:layout_constraintLeft_toLeftOf="@id/view_1"
42   - android:background="@mipmap/sjh"
43   - android:layout_marginLeft="20dp"
44   - />
  39 + app:layout_constraintTop_toTopOf="@id/view_1" />
45 40  
46 41 <ImageView
47 42 android:id="@+id/iv_2"
48 43 android:layout_width="13dp"
49 44 android:layout_height="13dp"
  45 + android:layout_marginRight="20dp"
50 46 android:background="@mipmap/sc"
51   - app:layout_constraintTop_toTopOf="@id/view_1"
52 47 app:layout_constraintBottom_toBottomOf="@id/view_1"
53 48 app:layout_constraintRight_toRightOf="@id/view_1"
54   - android:layout_marginRight="20dp"
55   - />
  49 + app:layout_constraintTop_toTopOf="@id/view_1" />
56 50  
57 51 <EditText
58 52 android:id="@+id/et_phone"
59 53 android:layout_width="0dp"
60 54 android:layout_height="0dp"
  55 + android:layout_marginLeft="46dp"
61 56 android:background="@android:color/transparent"
62   - app:layout_constraintTop_toTopOf="@id/view_1"
63   - app:layout_constraintBottom_toBottomOf="@id/view_1"
64   - app:layout_constraintRight_toLeftOf="@id/iv_2"
65   - app:layout_constraintLeft_toLeftOf="@id/view_1"
66   - android:textColorHint="#999999"
67   - android:hint="请输入手机号"
68   - android:textSize="16dp"
69 57 android:gravity="left|center_vertical"
  58 + android:hint="请输入手机号"
70 59 android:inputType="number"
71   - android:layout_marginLeft="46dp"
72 60 android:maxLength="11"
73   - />
  61 + android:textColorHint="#999999"
  62 + android:textSize="16dp"
  63 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  64 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  65 + app:layout_constraintRight_toLeftOf="@id/iv_2"
  66 + app:layout_constraintTop_toTopOf="@id/view_1" />
74 67  
75 68  
76 69 <View
77 70 android:id="@+id/view_2"
78 71 android:layout_width="315dp"
79 72 android:layout_height="50dp"
80   - app:layout_constraintLeft_toLeftOf="parent"
81   - app:layout_constraintRight_toRightOf="parent"
82   - app:layout_constraintTop_toTopOf="parent"
83 73 android:layout_marginTop="241dp"
84 74 android:background="@drawable/bg_solid_white"
85   - />
  75 + app:layout_constraintLeft_toLeftOf="parent"
  76 + app:layout_constraintRight_toRightOf="parent"
  77 + app:layout_constraintTop_toTopOf="parent" />
86 78  
87 79 <ImageView
88 80 android:id="@+id/iv_3"
89 81 android:layout_width="16dp"
90 82 android:layout_height="18dp"
91   - app:layout_constraintTop_toTopOf="@id/view_2"
  83 + android:layout_marginLeft="20dp"
  84 + android:background="@mipmap/mm"
92 85 app:layout_constraintBottom_toBottomOf="@id/view_2"
93 86 app:layout_constraintLeft_toLeftOf="@id/view_2"
94   - android:background="@mipmap/mm"
95   - android:layout_marginLeft="20dp"
96   - />
  87 + app:layout_constraintTop_toTopOf="@id/view_2" />
97 88  
98 89 <ImageView
99 90 android:id="@+id/iv_4"
100 91 android:layout_width="20dp"
101 92 android:layout_height="16dp"
  93 + android:layout_marginRight="20dp"
102 94 android:background="@mipmap/xs"
103   - app:layout_constraintTop_toTopOf="@id/view_2"
104 95 app:layout_constraintBottom_toBottomOf="@id/view_2"
105 96 app:layout_constraintRight_toRightOf="@id/view_2"
106   - android:layout_marginRight="20dp"
107   - />
  97 + app:layout_constraintTop_toTopOf="@id/view_2" />
108 98  
109 99 <EditText
110 100 android:id="@+id/et_pwd"
111 101 android:layout_width="0dp"
112 102 android:layout_height="0dp"
  103 + android:layout_marginLeft="46dp"
  104 + android:layout_marginRight="20dp"
113 105 android:background="@android:color/transparent"
114   - app:layout_constraintTop_toTopOf="@id/view_2"
  106 + android:gravity="left|center_vertical"
  107 + android:hint="请输入密码"
  108 + android:inputType="textPassword"
  109 + android:textColorHint="#999999"
  110 + android:textSize="16dp"
115 111 app:layout_constraintBottom_toBottomOf="@id/view_2"
116 112 app:layout_constraintLeft_toLeftOf="@id/view_2"
117 113 app:layout_constraintRight_toLeftOf="@id/iv_4"
118   - android:layout_marginLeft="46dp"
119   - android:textColorHint="#999999"
120   - android:hint="请输入密码"
121   - android:textSize="16dp"
122   - android:gravity="left|center_vertical"
123   - android:inputType="textPassword"
124   - android:layout_marginRight="20dp"
125   - />
  114 + app:layout_constraintTop_toTopOf="@id/view_2" />
126 115  
127 116  
128 117 <Button
129 118 android:id="@+id/btn_1"
130 119 android:layout_width="315dp"
131 120 android:layout_height="50dp"
132   - app:layout_constraintLeft_toLeftOf="parent"
133   - app:layout_constraintRight_toRightOf="parent"
134   - app:layout_constraintTop_toTopOf="parent"
135 121 android:layout_marginTop="331dp"
136 122 android:background="@drawable/bg_solid_btn"
  123 + android:text="登陆"
137 124 android:textColor="@color/white"
138 125 android:textSize="18dp"
139   - android:text="登陆"
140   - />
  126 + app:layout_constraintLeft_toLeftOf="parent"
  127 + app:layout_constraintRight_toRightOf="parent"
  128 + app:layout_constraintTop_toTopOf="parent" />
  129 +
141 130 <TextView
142 131 android:id="@+id/tv_1"
143 132 android:layout_width="wrap_content"
144 133 android:layout_height="wrap_content"
  134 + android:layout_marginLeft="85dp"
  135 + android:layout_marginTop="15dp"
145 136 android:text="没有账号,立即"
146 137 android:textColor="#666666"
147 138 android:textSize="17dp"
148 139 app:layout_constraintLeft_toLeftOf="@id/btn_1"
149   - app:layout_constraintTop_toBottomOf="@id/btn_1"
150   - android:layout_marginLeft="85dp"
151   - android:layout_marginTop="15dp"
152   - />
  140 + app:layout_constraintTop_toBottomOf="@id/btn_1" />
  141 +
153 142 <TextView
154 143 android:id="@+id/tv_2"
155 144 android:layout_width="wrap_content"
156 145 android:layout_height="wrap_content"
  146 + android:layout_marginTop="15dp"
157 147 android:text="注册"
158 148 android:textColor="#FE5E09"
159 149 android:textSize="17dp"
160 150 app:layout_constraintLeft_toRightOf="@id/tv_1"
161   - app:layout_constraintTop_toBottomOf="@id/btn_1"
162   - android:layout_marginTop="15dp"
163   - />
  151 + app:layout_constraintTop_toBottomOf="@id/btn_1" />
164 152  
165 153  
166 154 <CheckBox
167 155 android:id="@+id/cb_1"
168   - android:layout_width="13dp"
169   - android:layout_height="13dp"
170   - app:layout_constraintBottom_toBottomOf="parent"
171   - app:layout_constraintLeft_toLeftOf="parent"
  156 + android:layout_width="wrap_content"
  157 + android:layout_height="wrap_content"
172 158 android:layout_marginLeft="67dp"
173 159 android:layout_marginBottom="50dp"
174 160 android:background="@android:color/transparent"
175   - android:button="@drawable/checked_xc"
176   - />
  161 + app:layout_constraintBottom_toBottomOf="parent"
  162 + app:layout_constraintLeft_toLeftOf="parent" />
  163 +
177 164 <TextView
178 165 android:id="@+id/tv_3"
179 166 android:layout_width="wrap_content"
180 167 android:layout_height="wrap_content"
  168 + android:layout_marginLeft="5dp"
181 169 android:text="已阅读并同意《"
182 170 android:textColor="#999999"
183 171 android:textSize="12dp"
184   - app:layout_constraintLeft_toRightOf="@id/cb_1"
185   - app:layout_constraintTop_toTopOf="@id/cb_1"
186 172 app:layout_constraintBottom_toBottomOf="@id/cb_1"
187   - android:layout_marginLeft="5dp"
188   - />
  173 + app:layout_constraintLeft_toRightOf="@id/cb_1"
  174 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  175 +
189 176 <TextView
190 177 android:id="@+id/tv_4"
191 178 android:layout_width="wrap_content"
... ... @@ -193,10 +180,10 @@
193 180 android:text="用户协议"
194 181 android:textColor="#FE5E09"
195 182 android:textSize="12dp"
196   - app:layout_constraintLeft_toRightOf="@id/tv_3"
197   - app:layout_constraintTop_toTopOf="@id/cb_1"
198 183 app:layout_constraintBottom_toBottomOf="@id/cb_1"
199   - />
  184 + app:layout_constraintLeft_toRightOf="@id/tv_3"
  185 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  186 +
200 187 <TextView
201 188 android:id="@+id/tv_5"
202 189 android:layout_width="wrap_content"
... ... @@ -204,10 +191,10 @@
204 191 android:text="》和《"
205 192 android:textColor="#999999"
206 193 android:textSize="12dp"
207   - app:layout_constraintLeft_toRightOf="@id/tv_4"
208   - app:layout_constraintTop_toTopOf="@id/cb_1"
209 194 app:layout_constraintBottom_toBottomOf="@id/cb_1"
210   - />
  195 + app:layout_constraintLeft_toRightOf="@id/tv_4"
  196 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  197 +
211 198 <TextView
212 199 android:id="@+id/tv_6"
213 200 android:layout_width="wrap_content"
... ... @@ -215,10 +202,10 @@
215 202 android:text="隐私政策"
216 203 android:textColor="#FE5E09"
217 204 android:textSize="12dp"
218   - app:layout_constraintLeft_toRightOf="@id/tv_5"
219   - app:layout_constraintTop_toTopOf="@id/cb_1"
220 205 app:layout_constraintBottom_toBottomOf="@id/cb_1"
221   - />
  206 + app:layout_constraintLeft_toRightOf="@id/tv_5"
  207 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  208 +
222 209 <TextView
223 210 android:id="@+id/tv_7"
224 211 android:layout_width="wrap_content"
... ... @@ -226,13 +213,9 @@
226 213 android:text="》"
227 214 android:textColor="#999999"
228 215 android:textSize="12dp"
229   - app:layout_constraintLeft_toRightOf="@id/tv_6"
230   - app:layout_constraintTop_toTopOf="@id/cb_1"
231 216 app:layout_constraintBottom_toBottomOf="@id/cb_1"
232   - />
233   -
234   -
235   -
  217 + app:layout_constraintLeft_toRightOf="@id/tv_6"
  218 + app:layout_constraintTop_toTopOf="@id/cb_1" />
236 219  
237 220  
238 221 </androidx.constraintlayout.widget.ConstraintLayout>
239 222 \ No newline at end of file
... ...
app/src/main/res/layout/activity_me.xml
... ... @@ -43,7 +43,9 @@
43 43  
44 44 <View
45 45 android:id="@+id/view_3"
46   - android:layout_width="345dp"
  46 + android:layout_width="match_parent"
  47 + android:layout_marginLeft="15dp"
  48 + android:layout_marginRight="15dp"
47 49 android:layout_height="68dp"
48 50 android:background="@drawable/bg_solid_white_10"
49 51 app:layout_constraintLeft_toLeftOf="parent"
... ... @@ -76,7 +78,9 @@
76 78  
77 79 <View
78 80 android:id="@+id/view_4"
79   - android:layout_width="345dp"
  81 + android:layout_width="match_parent"
  82 + android:layout_marginLeft="15dp"
  83 + android:layout_marginRight="15dp"
80 84 android:layout_height="111dp"
81 85 android:background="@drawable/bg_solid_white_10"
82 86 app:layout_constraintLeft_toLeftOf="parent"
... ... @@ -131,7 +135,9 @@
131 135  
132 136 <View
133 137 android:id="@+id/view_5"
134   - android:layout_width="345dp"
  138 + android:layout_width="match_parent"
  139 + android:layout_marginLeft="15dp"
  140 + android:layout_marginRight="15dp"
135 141 android:layout_height="132dp"
136 142 android:background="@drawable/bg_solid_white_10"
137 143 app:layout_constraintLeft_toLeftOf="parent"
... ...
app/src/main/res/layout/activity_register.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="@mipmap/bg"
7   - >
8   -
  6 + android:background="@mipmap/bg">
9 7  
10 8  
11 9 <TextView
12 10 android:layout_width="wrap_content"
13 11 android:layout_height="wrap_content"
  12 + android:layout_marginLeft="30dp"
  13 + android:layout_marginTop="64dp"
14 14 android:text="注册"
15 15 android:textColor="#333333"
16   - android:textStyle="bold"
17 16 android:textSize="25dp"
18   - android:layout_marginLeft="30dp"
19   - android:layout_marginTop="64dp"
  17 + android:textStyle="bold"
20 18 app:layout_constraintLeft_toLeftOf="parent"
21   - app:layout_constraintTop_toTopOf="parent"
22   - />
  19 + app:layout_constraintTop_toTopOf="parent" />
23 20  
24 21 <View
25 22 android:id="@+id/view_1"
26 23 android:layout_width="315dp"
27 24 android:layout_height="50dp"
28   - app:layout_constraintLeft_toLeftOf="parent"
29   - app:layout_constraintRight_toRightOf="parent"
30   - app:layout_constraintTop_toTopOf="parent"
31 25 android:layout_marginTop="166dp"
32 26 android:background="@drawable/bg_solid_white"
33   - />
  27 + app:layout_constraintLeft_toLeftOf="parent"
  28 + app:layout_constraintRight_toRightOf="parent"
  29 + app:layout_constraintTop_toTopOf="parent" />
34 30  
35 31 <ImageView
36 32 android:id="@+id/iv_1"
37 33 android:layout_width="16dp"
38 34 android:layout_height="18dp"
39   - app:layout_constraintTop_toTopOf="@id/view_1"
  35 + android:layout_marginLeft="20dp"
  36 + android:background="@mipmap/sjh"
40 37 app:layout_constraintBottom_toBottomOf="@id/view_1"
41 38 app:layout_constraintLeft_toLeftOf="@id/view_1"
42   - android:background="@mipmap/sjh"
43   - android:layout_marginLeft="20dp"
44   - />
  39 + app:layout_constraintTop_toTopOf="@id/view_1" />
45 40  
46 41 <ImageView
47 42 android:id="@+id/iv_2"
48 43 android:layout_width="13dp"
49 44 android:layout_height="13dp"
  45 + android:layout_marginRight="20dp"
50 46 android:background="@mipmap/sc"
51   - app:layout_constraintTop_toTopOf="@id/view_1"
52 47 app:layout_constraintBottom_toBottomOf="@id/view_1"
53 48 app:layout_constraintRight_toRightOf="@id/view_1"
54   - android:layout_marginRight="20dp"
55   - />
  49 + app:layout_constraintTop_toTopOf="@id/view_1" />
56 50  
57 51 <EditText
58 52 android:id="@+id/et_phone"
59 53 android:layout_width="0dp"
60 54 android:layout_height="0dp"
  55 + android:layout_marginLeft="46dp"
61 56 android:background="@android:color/transparent"
62   - app:layout_constraintTop_toTopOf="@id/view_1"
63   - app:layout_constraintBottom_toBottomOf="@id/view_1"
64   - app:layout_constraintRight_toLeftOf="@id/iv_2"
65   - app:layout_constraintLeft_toLeftOf="@id/view_1"
66   - android:textColorHint="#999999"
67   - android:hint="请输入手机号"
68   - android:textSize="16dp"
69 57 android:gravity="left|center_vertical"
  58 + android:hint="请输入手机号"
70 59 android:inputType="number"
71   - android:layout_marginLeft="46dp"
72 60 android:maxLength="11"
73 61 android:textColor="#333333"
74   - />
  62 + android:textColorHint="#999999"
  63 + android:textSize="16dp"
  64 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  65 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  66 + app:layout_constraintRight_toLeftOf="@id/iv_2"
  67 + app:layout_constraintTop_toTopOf="@id/view_1" />
75 68  
76 69  
77 70 <View
78 71 android:id="@+id/view_2"
79 72 android:layout_width="315dp"
80 73 android:layout_height="50dp"
81   - app:layout_constraintLeft_toLeftOf="parent"
82   - app:layout_constraintRight_toRightOf="parent"
83   - app:layout_constraintTop_toTopOf="parent"
84 74 android:layout_marginTop="241dp"
85 75 android:background="@drawable/bg_solid_white"
86   - />
  76 + app:layout_constraintLeft_toLeftOf="parent"
  77 + app:layout_constraintRight_toRightOf="parent"
  78 + app:layout_constraintTop_toTopOf="parent" />
87 79  
88 80 <ImageView
89 81 android:id="@+id/iv_3"
90 82 android:layout_width="16dp"
91 83 android:layout_height="18dp"
92   - app:layout_constraintTop_toTopOf="@id/view_2"
  84 + android:layout_marginLeft="20dp"
  85 + android:background="@mipmap/mm"
93 86 app:layout_constraintBottom_toBottomOf="@id/view_2"
94 87 app:layout_constraintLeft_toLeftOf="@id/view_2"
95   - android:background="@mipmap/mm"
96   - android:layout_marginLeft="20dp"
97   - />
  88 + app:layout_constraintTop_toTopOf="@id/view_2" />
98 89  
99 90 <ImageView
100 91 android:id="@+id/iv_4"
101 92 android:layout_width="20dp"
102 93 android:layout_height="16dp"
  94 + android:layout_marginRight="20dp"
103 95 android:background="@mipmap/xs"
104   - app:layout_constraintTop_toTopOf="@id/view_2"
105 96 app:layout_constraintBottom_toBottomOf="@id/view_2"
106 97 app:layout_constraintRight_toRightOf="@id/view_2"
107   - android:layout_marginRight="20dp"
108   - />
  98 + app:layout_constraintTop_toTopOf="@id/view_2" />
109 99  
110 100 <EditText
111 101 android:id="@+id/et_pwd"
112 102 android:layout_width="0dp"
113 103 android:layout_height="0dp"
114   - android:background="@android:color/transparent"
115   - app:layout_constraintTop_toTopOf="@id/view_2"
116   - app:layout_constraintBottom_toBottomOf="@id/view_2"
117   - app:layout_constraintLeft_toLeftOf="@id/view_2"
118   - app:layout_constraintRight_toLeftOf="@id/iv_4"
119 104 android:layout_marginLeft="46dp"
120   - android:textColorHint="#999999"
121   - android:hint="请输入密码"
122   - android:textSize="16dp"
  105 + android:layout_marginRight="20dp"
  106 + android:background="@android:color/transparent"
123 107 android:gravity="left|center_vertical"
  108 + android:hint="请输入密码"
124 109 android:inputType="textPassword"
125   - android:layout_marginRight="20dp"
126 110 android:textColor="#333333"
127   - />
  111 + android:textColorHint="#999999"
  112 + android:textSize="16dp"
  113 + app:layout_constraintBottom_toBottomOf="@id/view_2"
  114 + app:layout_constraintLeft_toLeftOf="@id/view_2"
  115 + app:layout_constraintRight_toLeftOf="@id/iv_4"
  116 + app:layout_constraintTop_toTopOf="@id/view_2" />
128 117  
129 118  
130 119 <View
131 120 android:id="@+id/view_3"
132 121 android:layout_width="315dp"
133 122 android:layout_height="50dp"
134   - app:layout_constraintLeft_toLeftOf="parent"
135   - app:layout_constraintRight_toRightOf="parent"
136   - app:layout_constraintTop_toTopOf="parent"
137 123 android:layout_marginTop="316dp"
138 124 android:background="@drawable/bg_solid_white"
139   - />
  125 + app:layout_constraintLeft_toLeftOf="parent"
  126 + app:layout_constraintRight_toRightOf="parent"
  127 + app:layout_constraintTop_toTopOf="parent" />
140 128  
141 129 <ImageView
142 130 android:id="@+id/iv_5"
143 131 android:layout_width="16dp"
144 132 android:layout_height="18dp"
145   - app:layout_constraintTop_toTopOf="@id/view_3"
  133 + android:layout_marginLeft="20dp"
  134 + android:background="@mipmap/mm"
146 135 app:layout_constraintBottom_toBottomOf="@id/view_3"
147 136 app:layout_constraintLeft_toLeftOf="@id/view_3"
148   - android:background="@mipmap/mm"
149   - android:layout_marginLeft="20dp"
150   - />
  137 + app:layout_constraintTop_toTopOf="@id/view_3" />
151 138  
152 139 <ImageView
153 140 android:id="@+id/iv_6"
154 141 android:layout_width="20dp"
155 142 android:layout_height="16dp"
  143 + android:layout_marginRight="20dp"
156 144 android:background="@mipmap/xs"
157   - app:layout_constraintTop_toTopOf="@id/view_3"
158 145 app:layout_constraintBottom_toBottomOf="@id/view_3"
159 146 app:layout_constraintRight_toRightOf="@id/view_3"
160   - android:layout_marginRight="20dp"
161   - />
  147 + app:layout_constraintTop_toTopOf="@id/view_3" />
162 148  
163 149 <EditText
164 150 android:id="@+id/et_pwd_2"
165 151 android:layout_width="0dp"
166 152 android:layout_height="0dp"
167   - android:background="@android:color/transparent"
168   - app:layout_constraintTop_toTopOf="@id/view_3"
169   - app:layout_constraintBottom_toBottomOf="@id/view_3"
170   - app:layout_constraintLeft_toLeftOf="@id/view_3"
171   - app:layout_constraintRight_toLeftOf="@id/iv_6"
172 153 android:layout_marginLeft="46dp"
173   - android:textColorHint="#999999"
174   - android:hint="再次输入密码"
175   - android:textSize="16dp"
  154 + android:layout_marginRight="20dp"
  155 + android:background="@android:color/transparent"
176 156 android:gravity="left|center_vertical"
  157 + android:hint="再次输入密码"
177 158 android:inputType="textPassword"
178   - android:layout_marginRight="20dp"
179 159 android:textColor="#333333"
180   - />
  160 + android:textColorHint="#999999"
  161 + android:textSize="16dp"
  162 + app:layout_constraintBottom_toBottomOf="@id/view_3"
  163 + app:layout_constraintLeft_toLeftOf="@id/view_3"
  164 + app:layout_constraintRight_toLeftOf="@id/iv_6"
  165 + app:layout_constraintTop_toTopOf="@id/view_3" />
  166 +
181 167 <TextView
182 168 android:layout_width="wrap_content"
183 169 android:layout_height="wrap_content"
184   - app:layout_constraintTop_toBottomOf="@id/view_3"
185   - app:layout_constraintLeft_toLeftOf="@id/view_3"
186 170 android:layout_marginLeft="45dp"
187 171 android:layout_marginTop="10dp"
188   - android:textSize="13dp"
189 172 android:text="6-16位密码,数字或字母"
190 173 android:textColor="#999999"
191   - />
  174 + android:textSize="13dp"
  175 + app:layout_constraintLeft_toLeftOf="@id/view_3"
  176 + app:layout_constraintTop_toBottomOf="@id/view_3" />
192 177  
193 178 <Button
194 179 android:id="@+id/btn_1"
195 180 android:layout_width="315dp"
196 181 android:layout_height="50dp"
197   - app:layout_constraintLeft_toLeftOf="parent"
198   - app:layout_constraintRight_toRightOf="parent"
199   - app:layout_constraintTop_toTopOf="parent"
200 182 android:layout_marginTop="428dp"
201 183 android:background="@drawable/bg_solid_btn"
  184 + android:text="注册"
202 185 android:textColor="@color/white"
203 186 android:textSize="18dp"
204   - android:text="注册"
205   - />
  187 + app:layout_constraintLeft_toLeftOf="parent"
  188 + app:layout_constraintRight_toRightOf="parent"
  189 + app:layout_constraintTop_toTopOf="parent" />
  190 +
206 191 <TextView
207 192 android:id="@+id/tv_1"
208 193 android:layout_width="wrap_content"
209 194 android:layout_height="wrap_content"
  195 + android:layout_marginLeft="85dp"
  196 + android:layout_marginTop="15dp"
210 197 android:text="已有账号,立即"
211 198 android:textColor="#666666"
212 199 android:textSize="17dp"
213 200 app:layout_constraintLeft_toLeftOf="@id/btn_1"
214   - app:layout_constraintTop_toBottomOf="@id/btn_1"
215   - android:layout_marginLeft="85dp"
216   - android:layout_marginTop="15dp"
217   - />
  201 + app:layout_constraintTop_toBottomOf="@id/btn_1" />
  202 +
218 203 <TextView
219 204 android:id="@+id/tv_2"
220 205 android:layout_width="wrap_content"
221 206 android:layout_height="wrap_content"
  207 + android:layout_marginTop="15dp"
222 208 android:text="登陆"
223 209 android:textColor="#FE5E09"
224 210 android:textSize="17dp"
225 211 app:layout_constraintLeft_toRightOf="@id/tv_1"
226   - app:layout_constraintTop_toBottomOf="@id/btn_1"
227   - android:layout_marginTop="15dp"
228   - />
  212 + app:layout_constraintTop_toBottomOf="@id/btn_1" />
229 213  
230 214  
231 215 <CheckBox
232 216 android:id="@+id/cb_1"
233   - android:layout_width="13dp"
234   - android:layout_height="13dp"
235   - app:layout_constraintBottom_toBottomOf="parent"
236   - app:layout_constraintLeft_toLeftOf="parent"
  217 + android:layout_width="wrap_content"
  218 + android:layout_height="wrap_content"
237 219 android:layout_marginLeft="67dp"
238 220 android:layout_marginBottom="50dp"
239 221 android:background="@android:color/transparent"
240   - android:button="@drawable/checked_xc"
241   - />
  222 + app:layout_constraintBottom_toBottomOf="parent"
  223 + app:layout_constraintLeft_toLeftOf="parent" />
  224 +
242 225 <TextView
243 226 android:id="@+id/tv_3"
244 227 android:layout_width="wrap_content"
245 228 android:layout_height="wrap_content"
  229 + android:layout_marginLeft="5dp"
246 230 android:text="已阅读并同意《"
247 231 android:textColor="#999999"
248 232 android:textSize="12dp"
249   - app:layout_constraintLeft_toRightOf="@id/cb_1"
250   - app:layout_constraintTop_toTopOf="@id/cb_1"
251 233 app:layout_constraintBottom_toBottomOf="@id/cb_1"
252   - android:layout_marginLeft="5dp"
253   - />
  234 + app:layout_constraintLeft_toRightOf="@id/cb_1"
  235 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  236 +
254 237 <TextView
255 238 android:id="@+id/tv_4"
256 239 android:layout_width="wrap_content"
... ... @@ -258,10 +241,10 @@
258 241 android:text="用户协议"
259 242 android:textColor="#FE5E09"
260 243 android:textSize="12dp"
261   - app:layout_constraintLeft_toRightOf="@id/tv_3"
262   - app:layout_constraintTop_toTopOf="@id/cb_1"
263 244 app:layout_constraintBottom_toBottomOf="@id/cb_1"
264   - />
  245 + app:layout_constraintLeft_toRightOf="@id/tv_3"
  246 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  247 +
265 248 <TextView
266 249 android:id="@+id/tv_5"
267 250 android:layout_width="wrap_content"
... ... @@ -269,10 +252,10 @@
269 252 android:text="》和《"
270 253 android:textColor="#999999"
271 254 android:textSize="12dp"
272   - app:layout_constraintLeft_toRightOf="@id/tv_4"
273   - app:layout_constraintTop_toTopOf="@id/cb_1"
274 255 app:layout_constraintBottom_toBottomOf="@id/cb_1"
275   - />
  256 + app:layout_constraintLeft_toRightOf="@id/tv_4"
  257 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  258 +
276 259 <TextView
277 260 android:id="@+id/tv_6"
278 261 android:layout_width="wrap_content"
... ... @@ -280,10 +263,10 @@
280 263 android:text="隐私政策"
281 264 android:textColor="#FE5E09"
282 265 android:textSize="12dp"
283   - app:layout_constraintLeft_toRightOf="@id/tv_5"
284   - app:layout_constraintTop_toTopOf="@id/cb_1"
285 266 app:layout_constraintBottom_toBottomOf="@id/cb_1"
286   - />
  267 + app:layout_constraintLeft_toRightOf="@id/tv_5"
  268 + app:layout_constraintTop_toTopOf="@id/cb_1" />
  269 +
287 270 <TextView
288 271 android:id="@+id/tv_7"
289 272 android:layout_width="wrap_content"
... ... @@ -291,13 +274,9 @@
291 274 android:text="》"
292 275 android:textColor="#999999"
293 276 android:textSize="12dp"
294   - app:layout_constraintLeft_toRightOf="@id/tv_6"
295   - app:layout_constraintTop_toTopOf="@id/cb_1"
296 277 app:layout_constraintBottom_toBottomOf="@id/cb_1"
297   - />
298   -
299   -
300   -
  278 + app:layout_constraintLeft_toRightOf="@id/tv_6"
  279 + app:layout_constraintTop_toTopOf="@id/cb_1" />
301 280  
302 281  
303 282 </androidx.constraintlayout.widget.ConstraintLayout>
304 283 \ No newline at end of file
... ...
app/src/main/res/layout/activity_select_stu.xml
... ... @@ -1,45 +0,0 @@
1   -<?xml version="1.0" encoding="utf-8"?>
2   -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3   - android:layout_width="match_parent"
4   - android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
8   -
9   - <View
10   - android:id="@+id/view_1"
11   - android:layout_width="match_parent"
12   - android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14   - android:background="@android:color/white"
15   - />
16   - <TextView
17   - android:layout_width="wrap_content"
18   - android:layout_height="wrap_content"
19   - android:text="选择学生"
20   - android:textColor="#333333"
21   - android:textSize="18dp"
22   - app:layout_constraintLeft_toLeftOf="@id/view_1"
23   - app:layout_constraintRight_toRightOf="@id/view_1"
24   - app:layout_constraintTop_toTopOf="@id/view_1"
25   - app:layout_constraintBottom_toBottomOf="@id/view_1"
26   - />
27   -
28   -
29   - <Button
30   - android:layout_width="180dp"
31   - android:layout_height="40dp"
32   - app:layout_constraintLeft_toLeftOf="parent"
33   - app:layout_constraintRight_toRightOf="parent"
34   - app:layout_constraintTop_toTopOf="parent"
35   - android:layout_marginTop="500dp"
36   - android:background="@drawable/bg_solid_btn"
37   - android:text="确认"
38   - android:textColor="#FFFFFF"
39   - android:textSize="16dp"
40   - />
41   -
42   -
43   -
44   -
45   -</androidx.constraintlayout.widget.ConstraintLayout>
46 0 \ No newline at end of file
app/src/main/res/layout/activity_set_jia.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <View
10 9 android:id="@+id/view_1"
11 10 android:layout_width="match_parent"
12 11 android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14 12 android:background="@android:color/white"
15   - />
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
16 15 <TextView
17 16 android:layout_width="wrap_content"
18 17 android:layout_height="wrap_content"
19 18 android:text="家长身份"
20 19 android:textColor="#333333"
21 20 android:textSize="18dp"
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
22 22 app:layout_constraintLeft_toLeftOf="@id/view_1"
23 23 app:layout_constraintRight_toRightOf="@id/view_1"
24   - app:layout_constraintTop_toTopOf="@id/view_1"
25   - app:layout_constraintBottom_toBottomOf="@id/view_1"
26   - />
  24 + app:layout_constraintTop_toTopOf="@id/view_1" />
  25 +
27 26 <TextView
28 27 android:id="@+id/tv_cancel"
29 28 android:layout_width="wrap_content"
30 29 android:layout_height="wrap_content"
  30 + android:layout_marginLeft="15dp"
31 31 android:text="取消"
32 32 android:textColor="#666666"
33 33 android:textSize="16dp"
34   - app:layout_constraintLeft_toLeftOf="@id/view_1"
35   - app:layout_constraintTop_toTopOf="@id/view_1"
36 34 app:layout_constraintBottom_toBottomOf="@id/view_1"
37   - android:layout_marginLeft="15dp"
38   - />
  35 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  36 + app:layout_constraintTop_toTopOf="@id/view_1" />
  37 +
39 38 <TextView
40 39 android:id="@+id/tv_ok"
41 40 android:layout_width="wrap_content"
42 41 android:layout_height="wrap_content"
  42 + android:layout_marginRight="15dp"
43 43 android:text="确认"
44 44 android:textColor="#FE5E09"
45 45 android:textSize="16dp"
46   - app:layout_constraintRight_toRightOf="@id/view_1"
47   - app:layout_constraintTop_toTopOf="@id/view_1"
48 46 app:layout_constraintBottom_toBottomOf="@id/view_1"
49   - android:layout_marginRight="15dp"
50   - />
  47 + app:layout_constraintRight_toRightOf="@id/view_1"
  48 + app:layout_constraintTop_toTopOf="@id/view_1" />
  49 +
51 50 <TextView
52 51 android:layout_width="wrap_content"
53 52 android:layout_height="wrap_content"
54   - android:text="请选择身份"
55   - app:layout_constraintBottom_toTopOf="@id/view_2"
56   - android:layout_marginBottom="15dp"
57   - app:layout_constraintLeft_toLeftOf="parent"
58 53 android:layout_marginLeft="15dp"
  54 + android:layout_marginBottom="15dp"
  55 + android:text="请选择身份"
59 56 android:textColor="#666666"
60 57 android:textSize="16dp"
61   - />
  58 + app:layout_constraintBottom_toTopOf="@id/view_2"
  59 + app:layout_constraintLeft_toLeftOf="parent" />
62 60  
63 61 <View
64 62 android:id="@+id/view_2"
65   - android:layout_width="345dp"
  63 + android:layout_width="match_parent"
66 64 android:layout_height="50dp"
  65 + android:layout_marginLeft="15dp"
  66 + android:layout_marginTop="109dp"
  67 + android:layout_marginRight="15dp"
67 68 android:background="@drawable/bg_solid_white_10"
68 69 app:layout_constraintLeft_toLeftOf="parent"
69 70 app:layout_constraintRight_toRightOf="parent"
70   - app:layout_constraintTop_toTopOf="parent"
71   - android:layout_marginTop="109dp"
72   - />
  71 + app:layout_constraintTop_toTopOf="parent" />
73 72  
74 73  
75 74 <TextView
76 75 android:layout_width="wrap_content"
77 76 android:layout_height="wrap_content"
78   - app:layout_constraintLeft_toLeftOf="@id/view_2"
79   - app:layout_constraintRight_toRightOf="@id/view_2"
80   - app:layout_constraintTop_toTopOf="@+id/view_2"
81   - app:layout_constraintBottom_toBottomOf="@+id/view_2"
  77 + android:text="爸爸"
82 78 android:textColor="#333333"
83 79 android:textSize="16dp"
84   - android:text="爸爸"
85   - />
  80 + app:layout_constraintBottom_toBottomOf="@+id/view_2"
  81 + app:layout_constraintLeft_toLeftOf="@id/view_2"
  82 + app:layout_constraintRight_toRightOf="@id/view_2"
  83 + app:layout_constraintTop_toTopOf="@+id/view_2" />
86 84  
87 85 <ImageView
88 86 android:id="@+id/iv_1"
89 87 android:layout_width="13dp"
90 88 android:layout_height="13dp"
  89 + android:layout_marginRight="20dp"
91 90 android:background="@mipmap/wsyq"
92   - app:layout_constraintTop_toTopOf="@id/view_2"
93 91 app:layout_constraintBottom_toBottomOf="@id/view_2"
94 92 app:layout_constraintRight_toRightOf="@id/view_2"
95   - android:layout_marginRight="20dp"
96   - />
  93 + app:layout_constraintTop_toTopOf="@id/view_2" />
97 94  
98 95 <View
99 96 android:id="@+id/view_3"
100   - android:layout_width="345dp"
  97 + android:layout_width="match_parent"
101 98 android:layout_height="50dp"
  99 + android:layout_marginLeft="15dp"
  100 + android:layout_marginTop="175dp"
  101 + android:layout_marginRight="15dp"
102 102 android:background="@drawable/bg_solid_white_10"
103 103 app:layout_constraintLeft_toLeftOf="parent"
104 104 app:layout_constraintRight_toRightOf="parent"
105   - app:layout_constraintTop_toTopOf="parent"
106   - android:layout_marginTop="175dp"
107   - />
  105 + app:layout_constraintTop_toTopOf="parent" />
108 106  
109 107  
110 108 <TextView
111 109 android:layout_width="wrap_content"
112 110 android:layout_height="wrap_content"
113   - app:layout_constraintLeft_toLeftOf="@id/view_3"
114   - app:layout_constraintRight_toRightOf="@id/view_3"
115   - app:layout_constraintTop_toTopOf="@+id/view_3"
116   - app:layout_constraintBottom_toBottomOf="@+id/view_3"
  111 + android:text="妈妈"
117 112 android:textColor="#333333"
118 113 android:textSize="16dp"
119   - android:text="妈妈"
120   - />
  114 + app:layout_constraintBottom_toBottomOf="@+id/view_3"
  115 + app:layout_constraintLeft_toLeftOf="@id/view_3"
  116 + app:layout_constraintRight_toRightOf="@id/view_3"
  117 + app:layout_constraintTop_toTopOf="@+id/view_3" />
121 118  
122 119 <ImageView
123 120 android:id="@+id/iv_2"
124 121 android:layout_width="13dp"
125 122 android:layout_height="13dp"
  123 + android:layout_marginRight="20dp"
126 124 android:background="@mipmap/wsyq"
127   - app:layout_constraintTop_toTopOf="@id/view_3"
128 125 app:layout_constraintBottom_toBottomOf="@id/view_3"
129 126 app:layout_constraintRight_toRightOf="@id/view_3"
130   - android:layout_marginRight="20dp"
131   - />
  127 + app:layout_constraintTop_toTopOf="@id/view_3" />
  128 +
132 129 <View
133 130 android:id="@+id/view_4"
134   - android:layout_width="345dp"
  131 + android:layout_width="match_parent"
135 132 android:layout_height="50dp"
  133 + android:layout_marginLeft="15dp"
  134 + android:layout_marginTop="240dp"
  135 + android:layout_marginRight="15dp"
136 136 android:background="@drawable/bg_solid_white_10"
137 137 app:layout_constraintLeft_toLeftOf="parent"
138 138 app:layout_constraintRight_toRightOf="parent"
139   - app:layout_constraintTop_toTopOf="parent"
140   - android:layout_marginTop="240dp"
141   - />
  139 + app:layout_constraintTop_toTopOf="parent" />
142 140  
143 141  
144 142 <TextView
145 143 android:layout_width="wrap_content"
146 144 android:layout_height="wrap_content"
147   - app:layout_constraintLeft_toLeftOf="@id/view_4"
148   - app:layout_constraintRight_toRightOf="@id/view_4"
149   - app:layout_constraintTop_toTopOf="@+id/view_4"
150   - app:layout_constraintBottom_toBottomOf="@+id/view_4"
  145 + android:text="爷爷"
151 146 android:textColor="#333333"
152 147 android:textSize="16dp"
153   - android:text="爷爷"
154   - />
  148 + app:layout_constraintBottom_toBottomOf="@+id/view_4"
  149 + app:layout_constraintLeft_toLeftOf="@id/view_4"
  150 + app:layout_constraintRight_toRightOf="@id/view_4"
  151 + app:layout_constraintTop_toTopOf="@+id/view_4" />
155 152  
156 153 <ImageView
157 154 android:id="@+id/iv_3"
158 155 android:layout_width="13dp"
159 156 android:layout_height="13dp"
  157 + android:layout_marginRight="20dp"
160 158 android:background="@mipmap/wsyq"
161   - app:layout_constraintTop_toTopOf="@id/view_4"
162 159 app:layout_constraintBottom_toBottomOf="@id/view_4"
163 160 app:layout_constraintRight_toRightOf="@id/view_4"
164   - android:layout_marginRight="20dp"
165   - />
  161 + app:layout_constraintTop_toTopOf="@id/view_4" />
  162 +
166 163 <View
167 164 android:id="@+id/view_5"
168   - android:layout_width="345dp"
  165 + android:layout_width="match_parent"
169 166 android:layout_height="50dp"
  167 + android:layout_marginLeft="15dp"
  168 + android:layout_marginTop="304dp"
  169 + android:layout_marginRight="15dp"
170 170 android:background="@drawable/bg_solid_white_10"
171 171 app:layout_constraintLeft_toLeftOf="parent"
172 172 app:layout_constraintRight_toRightOf="parent"
173   - app:layout_constraintTop_toTopOf="parent"
174   - android:layout_marginTop="304dp"
175   - />
  173 + app:layout_constraintTop_toTopOf="parent" />
176 174  
177 175  
178 176 <TextView
179 177 android:layout_width="wrap_content"
180 178 android:layout_height="wrap_content"
181   - app:layout_constraintLeft_toLeftOf="@id/view_5"
182   - app:layout_constraintRight_toRightOf="@id/view_5"
183   - app:layout_constraintTop_toTopOf="@+id/view_5"
184   - app:layout_constraintBottom_toBottomOf="@+id/view_5"
  179 + android:text="奶奶"
185 180 android:textColor="#333333"
186 181 android:textSize="16dp"
187   - android:text="奶奶"
188   - />
  182 + app:layout_constraintBottom_toBottomOf="@+id/view_5"
  183 + app:layout_constraintLeft_toLeftOf="@id/view_5"
  184 + app:layout_constraintRight_toRightOf="@id/view_5"
  185 + app:layout_constraintTop_toTopOf="@+id/view_5" />
189 186  
190 187 <ImageView
191 188 android:id="@+id/iv_4"
192 189 android:layout_width="13dp"
193 190 android:layout_height="13dp"
  191 + android:layout_marginRight="20dp"
194 192 android:background="@mipmap/wsyq"
195   - app:layout_constraintTop_toTopOf="@id/view_5"
196 193 app:layout_constraintBottom_toBottomOf="@id/view_5"
197 194 app:layout_constraintRight_toRightOf="@id/view_5"
198   - android:layout_marginRight="20dp"
199   - />
  195 + app:layout_constraintTop_toTopOf="@id/view_5" />
  196 +
200 197 <View
201 198 android:id="@+id/view_6"
202   - android:layout_width="345dp"
  199 + android:layout_width="match_parent"
203 200 android:layout_height="50dp"
  201 + android:layout_marginLeft="15dp"
  202 + android:layout_marginTop="370dp"
  203 + android:layout_marginRight="15dp"
204 204 android:background="@drawable/bg_solid_white_10"
205 205 app:layout_constraintLeft_toLeftOf="parent"
206 206 app:layout_constraintRight_toRightOf="parent"
207   - app:layout_constraintTop_toTopOf="parent"
208   - android:layout_marginTop="370dp"
209   - />
  207 + app:layout_constraintTop_toTopOf="parent" />
210 208  
211 209  
212 210 <TextView
213 211 android:layout_width="wrap_content"
214 212 android:layout_height="wrap_content"
215   - app:layout_constraintLeft_toLeftOf="@id/view_6"
216   - app:layout_constraintRight_toRightOf="@id/view_6"
217   - app:layout_constraintTop_toTopOf="@+id/view_6"
218   - app:layout_constraintBottom_toBottomOf="@+id/view_6"
  213 + android:text="外公"
219 214 android:textColor="#333333"
220 215 android:textSize="16dp"
221   - android:text="外公"
222   - />
  216 + app:layout_constraintBottom_toBottomOf="@+id/view_6"
  217 + app:layout_constraintLeft_toLeftOf="@id/view_6"
  218 + app:layout_constraintRight_toRightOf="@id/view_6"
  219 + app:layout_constraintTop_toTopOf="@+id/view_6" />
223 220  
224 221 <ImageView
225 222 android:id="@+id/iv_5"
226 223 android:layout_width="13dp"
227 224 android:layout_height="13dp"
  225 + android:layout_marginRight="20dp"
228 226 android:background="@mipmap/wsyq"
229   - app:layout_constraintTop_toTopOf="@id/view_6"
230 227 app:layout_constraintBottom_toBottomOf="@id/view_6"
231 228 app:layout_constraintRight_toRightOf="@id/view_6"
232   - android:layout_marginRight="20dp"
233   - />
  229 + app:layout_constraintTop_toTopOf="@id/view_6" />
  230 +
234 231 <View
235 232 android:id="@+id/view_7"
236   - android:layout_width="345dp"
  233 + android:layout_width="match_parent"
237 234 android:layout_height="50dp"
  235 + android:layout_marginLeft="15dp"
  236 + android:layout_marginTop="434dp"
  237 + android:layout_marginRight="15dp"
238 238 android:background="@drawable/bg_solid_white_10"
239 239 app:layout_constraintLeft_toLeftOf="parent"
240 240 app:layout_constraintRight_toRightOf="parent"
241   - app:layout_constraintTop_toTopOf="parent"
242   - android:layout_marginTop="434dp"
243   - />
  241 + app:layout_constraintTop_toTopOf="parent" />
244 242  
245 243  
246 244 <TextView
247 245 android:layout_width="wrap_content"
248 246 android:layout_height="wrap_content"
249   - app:layout_constraintLeft_toLeftOf="@id/view_7"
250   - app:layout_constraintRight_toRightOf="@id/view_7"
251   - app:layout_constraintTop_toTopOf="@+id/view_7"
252   - app:layout_constraintBottom_toBottomOf="@+id/view_7"
  247 + android:text="外婆"
253 248 android:textColor="#333333"
254 249 android:textSize="16dp"
255   - android:text="外婆"
256   - />
  250 + app:layout_constraintBottom_toBottomOf="@+id/view_7"
  251 + app:layout_constraintLeft_toLeftOf="@id/view_7"
  252 + app:layout_constraintRight_toRightOf="@id/view_7"
  253 + app:layout_constraintTop_toTopOf="@+id/view_7" />
257 254  
258 255 <ImageView
259 256 android:id="@+id/iv_6"
260 257 android:layout_width="13dp"
261 258 android:layout_height="13dp"
  259 + android:layout_marginRight="20dp"
262 260 android:background="@mipmap/wsyq"
263   - app:layout_constraintTop_toTopOf="@id/view_7"
264 261 app:layout_constraintBottom_toBottomOf="@id/view_7"
265 262 app:layout_constraintRight_toRightOf="@id/view_7"
266   - android:layout_marginRight="20dp"
267   - />
268   -
  263 + app:layout_constraintTop_toTopOf="@id/view_7" />
269 264  
270 265  
271 266 </androidx.constraintlayout.widget.ConstraintLayout>
272 267 \ No newline at end of file
... ...
app/src/main/res/layout/activity_set_nian.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <View
10 9 android:id="@+id/view_1"
11 10 android:layout_width="match_parent"
12 11 android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14 12 android:background="@android:color/white"
15   - />
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
16 15 <TextView
17 16 android:layout_width="wrap_content"
18 17 android:layout_height="wrap_content"
19 18 android:text="年级"
20 19 android:textColor="#333333"
21 20 android:textSize="18dp"
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
22 22 app:layout_constraintLeft_toLeftOf="@id/view_1"
23 23 app:layout_constraintRight_toRightOf="@id/view_1"
24   - app:layout_constraintTop_toTopOf="@id/view_1"
25   - app:layout_constraintBottom_toBottomOf="@id/view_1"
26   - />
  24 + app:layout_constraintTop_toTopOf="@id/view_1" />
  25 +
27 26 <TextView
28 27 android:id="@+id/tv_cancel"
29 28 android:layout_width="wrap_content"
30 29 android:layout_height="wrap_content"
  30 + android:layout_marginLeft="15dp"
31 31 android:text="取消"
32 32 android:textColor="#666666"
33 33 android:textSize="16dp"
34   - app:layout_constraintLeft_toLeftOf="@id/view_1"
35   - app:layout_constraintTop_toTopOf="@id/view_1"
36 34 app:layout_constraintBottom_toBottomOf="@id/view_1"
37   - android:layout_marginLeft="15dp"
38   - />
  35 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  36 + app:layout_constraintTop_toTopOf="@id/view_1" />
  37 +
39 38 <TextView
40 39 android:id="@+id/tv_ok"
41 40 android:layout_width="wrap_content"
42 41 android:layout_height="wrap_content"
  42 + android:layout_marginRight="15dp"
43 43 android:text="确认"
44 44 android:textColor="#FE5E09"
45 45 android:textSize="16dp"
46   - app:layout_constraintRight_toRightOf="@id/view_1"
47   - app:layout_constraintTop_toTopOf="@id/view_1"
48 46 app:layout_constraintBottom_toBottomOf="@id/view_1"
49   - android:layout_marginRight="15dp"
50   - />
  47 + app:layout_constraintRight_toRightOf="@id/view_1"
  48 + app:layout_constraintTop_toTopOf="@id/view_1" />
  49 +
51 50 <TextView
52 51 android:layout_width="wrap_content"
53 52 android:layout_height="wrap_content"
54   - android:text="请选择年级"
55   - app:layout_constraintBottom_toTopOf="@id/view_2"
56   - android:layout_marginBottom="15dp"
57   - app:layout_constraintLeft_toLeftOf="parent"
58 53 android:layout_marginLeft="15dp"
  54 + android:layout_marginBottom="15dp"
  55 + android:text="请选择年级"
59 56 android:textColor="#666666"
60 57 android:textSize="16dp"
61   - />
  58 + app:layout_constraintBottom_toTopOf="@id/view_2"
  59 + app:layout_constraintLeft_toLeftOf="parent" />
62 60  
63 61 <View
64 62 android:id="@+id/view_2"
65   - android:layout_width="345dp"
  63 + android:layout_width="match_parent"
66 64 android:layout_height="50dp"
  65 + android:layout_marginLeft="15dp"
  66 + android:layout_marginTop="109dp"
  67 + android:layout_marginRight="15dp"
67 68 android:background="@drawable/bg_solid_white_10"
68 69 app:layout_constraintLeft_toLeftOf="parent"
69 70 app:layout_constraintRight_toRightOf="parent"
70   - app:layout_constraintTop_toTopOf="parent"
71   - android:layout_marginTop="109dp"
72   - />
  71 + app:layout_constraintTop_toTopOf="parent" />
73 72  
74 73  
75 74 <TextView
76 75 android:id="@+id/tv_nian"
77 76 android:layout_width="wrap_content"
78 77 android:layout_height="wrap_content"
79   - app:layout_constraintLeft_toLeftOf="@id/view_2"
80   - app:layout_constraintTop_toTopOf="@+id/view_2"
81   - app:layout_constraintBottom_toBottomOf="@+id/view_2"
  78 + android:layout_marginLeft="15dp"
  79 + android:text="七年级"
82 80 android:textColor="#333333"
83 81 android:textSize="16dp"
84   - android:text="一年纪"
85   - android:layout_marginLeft="15dp"
86   - />
  82 + app:layout_constraintBottom_toBottomOf="@+id/view_2"
  83 + app:layout_constraintLeft_toLeftOf="@id/view_2"
  84 + app:layout_constraintTop_toTopOf="@+id/view_2" />
87 85  
88 86 <ImageView
89 87 android:layout_width="5.5dp"
90 88 android:layout_height="9.5dp"
  89 + android:layout_marginRight="15dp"
91 90 android:background="@mipmap/ycaj"
92   - app:layout_constraintTop_toTopOf="@id/view_2"
93 91 app:layout_constraintBottom_toBottomOf="@id/view_2"
94 92 app:layout_constraintRight_toRightOf="@id/view_2"
95   - android:layout_marginRight="15dp"
96   - />
  93 + app:layout_constraintTop_toTopOf="@id/view_2" />
97 94  
98 95 <TextView
99 96 android:layout_width="wrap_content"
100 97 android:layout_height="wrap_content"
101   - android:text="请选择学期"
102   - app:layout_constraintBottom_toTopOf="@id/view_3"
103   - android:layout_marginBottom="15dp"
104   - app:layout_constraintLeft_toLeftOf="parent"
105 98 android:layout_marginLeft="15dp"
  99 + android:layout_marginBottom="15dp"
  100 + android:text="请选择学期"
106 101 android:textColor="#666666"
107 102 android:textSize="16dp"
108   - />
  103 + app:layout_constraintBottom_toTopOf="@id/view_3"
  104 + app:layout_constraintLeft_toLeftOf="parent" />
109 105  
110 106 <View
111 107 android:id="@+id/view_3"
112   - android:layout_width="345dp"
  108 + android:layout_width="match_parent"
113 109 android:layout_height="50dp"
  110 + android:layout_marginLeft="15dp"
  111 + android:layout_marginTop="209dp"
  112 + android:layout_marginRight="15dp"
114 113 android:background="@drawable/bg_solid_white_10"
115 114 app:layout_constraintLeft_toLeftOf="parent"
116 115 app:layout_constraintRight_toRightOf="parent"
117   - app:layout_constraintTop_toTopOf="parent"
118   - android:layout_marginTop="209dp"
119   - />
  116 + app:layout_constraintTop_toTopOf="parent" />
120 117  
121 118 <ImageView
122 119 android:layout_width="5.5dp"
123 120 android:layout_height="9.5dp"
  121 + android:layout_marginRight="15dp"
124 122 android:background="@mipmap/ycaj"
125   - app:layout_constraintTop_toTopOf="@id/view_3"
126 123 app:layout_constraintBottom_toBottomOf="@id/view_3"
127 124 app:layout_constraintRight_toRightOf="@id/view_3"
128   - android:layout_marginRight="15dp"
129   - />
  125 + app:layout_constraintTop_toTopOf="@id/view_3" />
130 126  
131 127 <TextView
132 128 android:id="@+id/tv_xq"
133 129 android:layout_width="wrap_content"
134 130 android:layout_height="wrap_content"
135   - app:layout_constraintLeft_toLeftOf="@id/view_3"
136   - app:layout_constraintTop_toTopOf="@+id/view_3"
137   - app:layout_constraintBottom_toBottomOf="@+id/view_3"
  131 + android:layout_marginLeft="15dp"
  132 + android:text="上学期"
138 133 android:textColor="#333333"
139 134 android:textSize="16dp"
140   - android:text="上学期"
141   - android:layout_marginLeft="15dp"
142   - />
143   -
  135 + app:layout_constraintBottom_toBottomOf="@+id/view_3"
  136 + app:layout_constraintLeft_toLeftOf="@id/view_3"
  137 + app:layout_constraintTop_toTopOf="@+id/view_3" />
144 138  
145 139  
146 140 </androidx.constraintlayout.widget.ConstraintLayout>
147 141 \ No newline at end of file
... ...
app/src/main/res/layout/activity_set_nick.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <View
10 9 android:id="@+id/view_1"
11 10 android:layout_width="match_parent"
12 11 android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14 12 android:background="@android:color/white"
15   - />
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
16 15 <TextView
17 16 android:layout_width="wrap_content"
18 17 android:layout_height="wrap_content"
19 18 android:text="昵称"
20 19 android:textColor="#333333"
21 20 android:textSize="18dp"
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
22 22 app:layout_constraintLeft_toLeftOf="@id/view_1"
23 23 app:layout_constraintRight_toRightOf="@id/view_1"
24   - app:layout_constraintTop_toTopOf="@id/view_1"
25   - app:layout_constraintBottom_toBottomOf="@id/view_1"
26   - />
  24 + app:layout_constraintTop_toTopOf="@id/view_1" />
  25 +
27 26 <TextView
28 27 android:id="@+id/tv_cancel"
29 28 android:layout_width="wrap_content"
30 29 android:layout_height="wrap_content"
  30 + android:layout_marginLeft="15dp"
31 31 android:text="取消"
32 32 android:textColor="#666666"
33 33 android:textSize="16dp"
34   - app:layout_constraintLeft_toLeftOf="@id/view_1"
35   - app:layout_constraintTop_toTopOf="@id/view_1"
36 34 app:layout_constraintBottom_toBottomOf="@id/view_1"
37   - android:layout_marginLeft="15dp"
38   - />
  35 + app:layout_constraintLeft_toLeftOf="@id/view_1"
  36 + app:layout_constraintTop_toTopOf="@id/view_1" />
  37 +
39 38 <TextView
40 39 android:id="@+id/tv_ok"
41 40 android:layout_width="wrap_content"
42 41 android:layout_height="wrap_content"
  42 + android:layout_marginRight="15dp"
43 43 android:text="确认"
44 44 android:textColor="#FE5E09"
45 45 android:textSize="16dp"
46   - app:layout_constraintRight_toRightOf="@id/view_1"
47   - app:layout_constraintTop_toTopOf="@id/view_1"
48 46 app:layout_constraintBottom_toBottomOf="@id/view_1"
49   - android:layout_marginRight="15dp"
50   - />
  47 + app:layout_constraintRight_toRightOf="@id/view_1"
  48 + app:layout_constraintTop_toTopOf="@id/view_1" />
51 49  
52 50  
53 51 <View
54 52 android:id="@+id/view_3"
55   - android:layout_width="345dp"
  53 + android:layout_width="match_parent"
56 54 android:layout_height="50dp"
  55 + android:layout_marginLeft="15dp"
  56 + android:layout_marginTop="109dp"
  57 + android:layout_marginRight="15dp"
57 58 android:background="@drawable/bg_solid_white_10"
58 59 app:layout_constraintLeft_toLeftOf="parent"
59 60 app:layout_constraintRight_toRightOf="parent"
60   - app:layout_constraintTop_toTopOf="parent"
61   - android:layout_marginTop="109dp"
62   - />
  61 + app:layout_constraintTop_toTopOf="parent" />
  62 +
63 63 <EditText
64 64 android:id="@+id/et_1"
65 65 android:layout_width="0dp"
66 66 android:layout_height="0dp"
67   - app:layout_constraintLeft_toLeftOf="@+id/view_3"
68   - app:layout_constraintRight_toRightOf="@+id/view_3"
69   - app:layout_constraintTop_toTopOf="@+id/view_3"
70   - app:layout_constraintBottom_toBottomOf="@+id/view_3"
71 67 android:layout_marginLeft="5dp"
72 68 android:layout_marginRight="5dp"
73   - android:textSize="16dp"
74   - android:textColorHint="#999999"
75 69 android:hint="请设置2-10个字符,不包括无效字符"
76 70 android:textColor="#333333"
77   - />
  71 + android:textColorHint="#999999"
  72 + android:textSize="16dp"
  73 + app:layout_constraintBottom_toBottomOf="@+id/view_3"
  74 + app:layout_constraintLeft_toLeftOf="@+id/view_3"
  75 + app:layout_constraintRight_toRightOf="@+id/view_3"
  76 + app:layout_constraintTop_toTopOf="@+id/view_3" />
78 77  
79 78 <TextView
80 79 android:layout_width="wrap_content"
81 80 android:layout_height="wrap_content"
  81 + android:layout_marginLeft="15dp"
  82 + android:layout_marginBottom="15dp"
82 83 android:text="请输入昵称"
  84 + android:textColor="#666666"
83 85 app:layout_constraintBottom_toTopOf="@id/et_1"
84   - android:layout_marginBottom="15dp"
85   - app:layout_constraintLeft_toLeftOf="parent"
86   - android:layout_marginLeft="15dp"
87   - />
  86 + app:layout_constraintLeft_toLeftOf="parent" />
88 87  
89 88  
90 89 </androidx.constraintlayout.widget.ConstraintLayout>
91 90 \ No newline at end of file
... ...
app/src/main/res/layout/activity_set_sex.xml
... ... @@ -52,7 +52,9 @@
52 52  
53 53 <View
54 54 android:id="@+id/view_2"
55   - android:layout_width="345dp"
  55 + android:layout_width="match_parent"
  56 + android:layout_marginLeft="15dp"
  57 + android:layout_marginRight="15dp"
56 58 android:layout_height="50dp"
57 59 android:background="@drawable/bg_solid_white_10"
58 60 app:layout_constraintLeft_toLeftOf="parent"
... ... @@ -108,7 +110,9 @@
108 110  
109 111 <View
110 112 android:id="@+id/view_3"
111   - android:layout_width="345dp"
  113 + android:layout_width="match_parent"
  114 + android:layout_marginLeft="15dp"
  115 + android:layout_marginRight="15dp"
112 116 android:layout_height="50dp"
113 117 android:background="@drawable/bg_solid_white_10"
114 118 app:layout_constraintLeft_toLeftOf="parent"
... ...
app/src/main/res/layout/activity_setac.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <View
10 9 android:id="@+id/view_1"
11 10 android:layout_width="match_parent"
12 11 android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14 12 android:background="@android:color/white"
15   - />
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
16 15 <TextView
17 16 android:layout_width="wrap_content"
18 17 android:layout_height="wrap_content"
19 18 android:text="账号设置"
20 19 android:textColor="#333333"
21 20 android:textSize="18dp"
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
22 22 app:layout_constraintLeft_toLeftOf="@id/view_1"
23 23 app:layout_constraintRight_toRightOf="@id/view_1"
24   - app:layout_constraintTop_toTopOf="@id/view_1"
25   - app:layout_constraintBottom_toBottomOf="@id/view_1"
26   - />
  24 + app:layout_constraintTop_toTopOf="@id/view_1" />
  25 +
27 26 <ImageView
28 27 android:id="@+id/iv_back"
29 28 android:layout_width="10dp"
30 29 android:layout_height="16dp"
31   - app:layout_constraintLeft_toLeftOf="parent"
32   - app:layout_constraintTop_toTopOf="@id/view_1"
33   - app:layout_constraintBottom_toBottomOf="@id/view_1"
34 30 android:layout_marginLeft="15dp"
35 31 android:background="@mipmap/icon_back"
36   - />
  32 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  33 + app:layout_constraintLeft_toLeftOf="parent"
  34 + app:layout_constraintTop_toTopOf="@id/view_1" />
  35 +
37 36 <View
38 37 android:layout_width="match_parent"
39 38 android:layout_height="1dp"
40 39 android:background="#EEEEEE"
41   - app:layout_constraintTop_toBottomOf="@id/view_1"
42   - />
  40 + app:layout_constraintTop_toBottomOf="@id/view_1" />
43 41  
44 42 <View
45 43 android:id="@+id/view_3"
46   - android:layout_width="345dp"
  44 + android:layout_width="match_parent"
47 45 android:layout_height="80dp"
  46 + android:layout_marginLeft="15dp"
  47 + android:layout_marginTop="90dp"
  48 + android:layout_marginRight="15dp"
48 49 android:background="@drawable/bg_solid_white_10"
49 50 app:layout_constraintLeft_toLeftOf="parent"
50 51 app:layout_constraintRight_toRightOf="parent"
51   - app:layout_constraintTop_toTopOf="parent"
52   - android:layout_marginTop="90dp"
53   - />
  52 + app:layout_constraintTop_toTopOf="parent" />
  53 +
54 54 <ImageView
55 55 android:id="@+id/iv_3"
56 56 android:layout_width="57dp"
57 57 android:layout_height="57dp"
58   - android:background="@mipmap/txz"
59   - app:layout_constraintTop_toTopOf="@id/view_3"
  58 + android:layout_marginRight="31dp"
  59 + android:background="@mipmap/ic_parent_avatar"
60 60 app:layout_constraintBottom_toBottomOf="@id/view_3"
61 61 app:layout_constraintRight_toRightOf="@id/view_3"
62   - android:layout_marginRight="31dp"
63   - />
  62 + app:layout_constraintTop_toTopOf="@id/view_3" />
  63 +
64 64 <TextView
65 65 android:id="@+id/tv_3"
66 66 android:layout_width="wrap_content"
67 67 android:layout_height="wrap_content"
  68 + android:layout_marginLeft="15dp"
68 69 android:text="头像"
69 70 android:textColor="#333333"
70 71 android:textSize="15dp"
71   - app:layout_constraintTop_toTopOf="@id/view_3"
72 72 app:layout_constraintBottom_toBottomOf="@id/view_3"
73 73 app:layout_constraintLeft_toLeftOf="@id/view_3"
74   - android:layout_marginLeft="15dp"
75   - />
  74 + app:layout_constraintTop_toTopOf="@id/view_3" />
  75 +
76 76 <ImageView
77 77 android:layout_width="5.5dp"
78 78 android:layout_height="9.5dp"
  79 + android:layout_marginRight="15dp"
79 80 android:background="@mipmap/ycaj"
80   - app:layout_constraintTop_toTopOf="@id/view_3"
81 81 app:layout_constraintBottom_toBottomOf="@id/view_3"
82 82 app:layout_constraintRight_toRightOf="@id/view_3"
83   - android:layout_marginRight="15dp"
84   - />
  83 + app:layout_constraintTop_toTopOf="@id/view_3" />
85 84  
86 85 <View
87 86 android:id="@+id/view_4"
88   - android:layout_width="345dp"
  87 + android:layout_width="match_parent"
89 88 android:layout_height="90dp"
  89 + android:layout_marginLeft="15dp"
  90 + android:layout_marginTop="185dp"
  91 + android:layout_marginRight="15dp"
90 92 android:background="@drawable/bg_solid_white_10"
91 93 app:layout_constraintLeft_toLeftOf="parent"
92 94 app:layout_constraintRight_toRightOf="parent"
93   - app:layout_constraintTop_toTopOf="parent"
94   - android:layout_marginTop="185dp"
95   - />
  95 + app:layout_constraintTop_toTopOf="parent" />
96 96  
97 97 <TextView
98 98 android:id="@+id/tv_4"
99 99 android:layout_width="wrap_content"
100 100 android:layout_height="wrap_content"
  101 + android:layout_marginLeft="15dp"
  102 + android:layout_marginTop="15dp"
101 103 android:text="账户"
102 104 android:textColor="#333333"
103 105 android:textSize="15dp"
104   - app:layout_constraintTop_toTopOf="@id/view_4"
105 106 app:layout_constraintLeft_toLeftOf="@id/view_4"
106   - android:layout_marginLeft="15dp"
107   - android:layout_marginTop="15dp"
108   - />
  107 + app:layout_constraintTop_toTopOf="@id/view_4" />
  108 +
109 109 <TextView
110 110 android:id="@+id/tv_5"
111 111 android:layout_width="wrap_content"
112 112 android:layout_height="wrap_content"
  113 + android:layout_marginLeft="15dp"
  114 + android:layout_marginTop="60dp"
113 115 android:text="密码"
114 116 android:textColor="#333333"
115 117 android:textSize="15dp"
116   - app:layout_constraintTop_toTopOf="@id/view_4"
117 118 app:layout_constraintLeft_toLeftOf="@id/view_4"
118   - android:layout_marginLeft="15dp"
119   - android:layout_marginTop="60dp"
120   - />
  119 + app:layout_constraintTop_toTopOf="@id/view_4" />
  120 +
121 121 <TextView
122 122 android:id="@+id/tv_6"
123 123 android:layout_width="wrap_content"
124 124 android:layout_height="wrap_content"
  125 + android:layout_marginTop="15dp"
  126 + android:layout_marginRight="15dp"
125 127 android:text="123"
126 128 android:textColor="#666666"
127 129 android:textSize="15dp"
128   - app:layout_constraintTop_toTopOf="@id/view_4"
129 130 app:layout_constraintRight_toRightOf="@id/view_4"
130   - android:layout_marginRight="15dp"
131   - android:layout_marginTop="15dp"
132   - />
  131 + app:layout_constraintTop_toTopOf="@id/view_4" />
  132 +
133 133 <ImageView
134 134 android:layout_width="5.5dp"
135 135 android:layout_height="9.5dp"
  136 + android:layout_marginRight="15dp"
136 137 android:background="@mipmap/ycaj"
137   - app:layout_constraintTop_toTopOf="@id/tv_7"
138 138 app:layout_constraintBottom_toBottomOf="@id/tv_7"
139 139 app:layout_constraintRight_toRightOf="@id/view_4"
140   - android:layout_marginRight="15dp"
141   - />
  140 + app:layout_constraintTop_toTopOf="@id/tv_7" />
  141 +
142 142 <TextView
143 143 android:id="@+id/tv_7"
144 144 android:layout_width="wrap_content"
145 145 android:layout_height="wrap_content"
  146 + android:layout_marginTop="60dp"
  147 + android:layout_marginRight="31dp"
146 148 android:text="已设置"
147 149 android:textColor="#666666"
148 150 android:textSize="15dp"
149   - app:layout_constraintTop_toTopOf="@id/view_4"
150 151 app:layout_constraintRight_toRightOf="@id/view_4"
151   - android:layout_marginRight="31dp"
152   - android:layout_marginTop="60dp"
153   - />
154   -
  152 + app:layout_constraintTop_toTopOf="@id/view_4" />
155 153  
  154 + <Button
  155 + android:id="@+id/logout"
  156 + android:layout_width="315dp"
  157 + android:layout_height="50dp"
  158 + android:layout_marginBottom="120dp"
  159 + android:background="@drawable/bg_solid_btn"
  160 + android:text="退出登录"
  161 + android:textColor="@color/white"
  162 + android:textSize="18dp"
  163 + app:layout_constraintBottom_toBottomOf="parent"
  164 + app:layout_constraintLeft_toLeftOf="parent"
  165 + app:layout_constraintRight_toRightOf="parent" />
156 166 </androidx.constraintlayout.widget.ConstraintLayout>
157 167 \ No newline at end of file
... ...
app/src/main/res/layout/bottom_sheet_layout.xml
... ... @@ -0,0 +1,44 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="wrap_content"
  5 + android:orientation="vertical"
  6 + android:background="@drawable/shape_bottom_sheet_dialog">
  7 +
  8 + <TextView
  9 + android:id="@+id/take_photo"
  10 + android:layout_width="match_parent"
  11 + android:layout_height="50dp"
  12 + android:text="拍照"
  13 + android:textSize="15sp"
  14 + android:textColor="#191919"
  15 + android:gravity="center"/>
  16 +
  17 +
  18 + <View
  19 + android:layout_width="match_parent"
  20 + android:layout_height="1dp"
  21 + android:background="#F5F5F5"/>
  22 + <TextView
  23 + android:id="@+id/choose_photo"
  24 + android:layout_width="match_parent"
  25 + android:layout_height="50dp"
  26 + android:text="从相册选择"
  27 + android:textSize="15sp"
  28 + android:textColor="#191919"
  29 + android:gravity="center"/>
  30 +
  31 + <View
  32 + android:layout_width="match_parent"
  33 + android:layout_height="10dp"
  34 + android:background="#F5F5F5"/>
  35 + <TextView
  36 + android:id="@+id/cancel"
  37 + android:layout_width="match_parent"
  38 + android:layout_height="50dp"
  39 + android:text="取消"
  40 + android:textSize="15sp"
  41 + android:textColor="#191919"
  42 + android:gravity="center"/>
  43 +
  44 +</LinearLayout>
0 45 \ No newline at end of file
... ...
app/src/main/res/layout/choose_activity.xml
... ... @@ -0,0 +1,38 @@
  1 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + android:layout_width="match_parent"
  3 + android:layout_height="match_parent"
  4 + android:background="#F4F6F8">
  5 +
  6 + <TextView
  7 + android:id="@+id/tv_title"
  8 + android:layout_width="match_parent"
  9 + android:layout_height="44dp"
  10 + android:background="@color/white"
  11 + android:gravity="center"
  12 + android:text="选择学生"
  13 + android:textColor="#333333"
  14 + android:textSize="18sp" />
  15 +
  16 + <androidx.recyclerview.widget.RecyclerView
  17 + android:id="@+id/recycle"
  18 + android:layout_width="match_parent"
  19 + android:layout_height="wrap_content"
  20 + android:layout_above="@+id/tv_confirm"
  21 + android:layout_below="@+id/tv_title"
  22 + android:layout_marginBottom="20dp" />
  23 +
  24 + <TextView
  25 + android:id="@+id/tv_confirm"
  26 + android:layout_width="180dp"
  27 + android:layout_height="40dp"
  28 + android:layout_alignParentBottom="true"
  29 + android:layout_centerHorizontal="true"
  30 + android:layout_marginBottom="120dp"
  31 + android:background="@drawable/bg_solid_btn"
  32 + android:gravity="center"
  33 + android:text="确认"
  34 +
  35 + android:textColor="@color/white"
  36 + android:textSize="16sp" />
  37 +
  38 +</RelativeLayout>
... ...
app/src/main/res/layout/fragment_home.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <View
10 9 android:id="@+id/view_1"
11 10 android:layout_width="match_parent"
12 11 android:layout_height="44dp"
13   - app:layout_constraintTop_toTopOf="parent"
14 12 android:background="@android:color/white"
15   - />
  13 + app:layout_constraintTop_toTopOf="parent" />
  14 +
16 15 <ImageView
17 16 android:id="@+id/iv_1"
18 17 android:layout_width="10dp"
19 18 android:layout_height="16dp"
20   - app:layout_constraintLeft_toLeftOf="parent"
21   - app:layout_constraintTop_toTopOf="@id/view_1"
22   - app:layout_constraintBottom_toBottomOf="@id/view_1"
23 19 android:layout_marginLeft="15dp"
24 20 android:background="@mipmap/icon_back"
25   - />
  21 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  22 + app:layout_constraintLeft_toLeftOf="parent"
  23 + app:layout_constraintTop_toTopOf="@id/view_1" />
26 24  
27 25 <ImageView
28 26 android:id="@+id/iv_2"
29 27 android:layout_width="31dp"
30 28 android:layout_height="31dp"
31   - app:layout_constraintTop_toTopOf="@id/view_1"
32   - app:layout_constraintBottom_toBottomOf="@id/view_1"
33   - app:layout_constraintLeft_toLeftOf="parent"
34 29 android:layout_marginLeft="35dp"
35 30 android:background="@mipmap/txz"
36   - />
  31 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  32 + app:layout_constraintLeft_toLeftOf="parent"
  33 + app:layout_constraintTop_toTopOf="@id/view_1" />
  34 +
37 35 <TextView
38 36 android:id="@+id/tv_name"
39 37 android:layout_width="wrap_content"
40 38 android:layout_height="wrap_content"
  39 + android:layout_marginLeft="6.5dp"
41 40 android:textColor="#333333"
42 41 android:textSize="15dp"
43   - app:layout_constraintTop_toTopOf="@id/view_1"
44 42 app:layout_constraintBottom_toBottomOf="@id/view_1"
45 43 app:layout_constraintLeft_toRightOf="@id/iv_2"
46   - android:layout_marginLeft="6.5dp"
47   - />
  44 + app:layout_constraintTop_toTopOf="@id/view_1" />
  45 +
48 46 <ImageView
49 47 android:id="@+id/iv_3"
50 48 android:layout_width="8dp"
51 49 android:layout_height="5dp"
52   - app:layout_constraintTop_toTopOf="@id/view_1"
53   - app:layout_constraintBottom_toBottomOf="@id/view_1"
54   - app:layout_constraintLeft_toRightOf="@id/tv_name"
55 50 android:layout_marginLeft="5dp"
56 51 android:background="@mipmap/xxan"
57   - />
  52 + app:layout_constraintBottom_toBottomOf="@id/view_1"
  53 + app:layout_constraintLeft_toRightOf="@id/tv_name"
  54 + app:layout_constraintTop_toTopOf="@id/view_1" />
58 55  
59 56 <ImageView
60 57 android:id="@+id/iv_sapmiao"
61   - android:layout_width="345dp"
  58 + android:layout_width="match_parent"
62 59 android:layout_height="167dp"
63   - app:layout_constraintLeft_toLeftOf="parent"
64   - app:layout_constraintRight_toRightOf="parent"
65   - app:layout_constraintTop_toTopOf="parent"
  60 + android:layout_marginLeft="15dp"
66 61 android:layout_marginTop="60dp"
  62 + android:layout_marginRight="15dp"
67 63 android:background="@mipmap/ssss"
68   - />
  64 + app:layout_constraintLeft_toLeftOf="parent"
  65 + app:layout_constraintRight_toRightOf="parent"
  66 + app:layout_constraintTop_toTopOf="parent" />
69 67  
70 68  
71   - <View
  69 + <LinearLayout
72 70 android:id="@+id/view_2"
73   - android:layout_width="345dp"
  71 + android:layout_width="match_parent"
74 72 android:layout_height="100dp"
  73 + android:layout_marginLeft="15dp"
  74 + android:layout_marginTop="240dp"
  75 + android:layout_marginRight="15dp"
  76 + android:background="@drawable/bg_solid_white_10"
  77 + android:orientation="horizontal"
75 78 app:layout_constraintLeft_toLeftOf="parent"
76 79 app:layout_constraintRight_toRightOf="parent"
77   - app:layout_constraintTop_toTopOf="parent"
78   - android:background="@drawable/bg_solid_white_10"
79   - android:layout_marginTop="240dp"
80   - />
  80 + app:layout_constraintTop_toTopOf="parent">
81 81  
82   - <ImageView
83   - android:id="@+id/iv_21"
84   - android:layout_width="50dp"
85   - android:layout_height="50dp"
86   - app:layout_constraintLeft_toLeftOf="@id/view_2"
87   - app:layout_constraintTop_toTopOf="@id/view_2"
88   - android:layout_marginLeft="10dp"
89   - android:layout_marginTop="15dp"
90   - android:background="@mipmap/yyxz"
91   - />
92   - <TextView
93   - android:layout_width="wrap_content"
94   - android:layout_height="wrap_content"
95   - android:textColor="#333333"
96   - android:textSize="13dp"
97   - android:text="应用管理"
98   - android:layout_marginTop="8dp"
99   - app:layout_constraintLeft_toLeftOf="@id/iv_21"
100   - app:layout_constraintRight_toRightOf="@id/iv_21"
101   - app:layout_constraintTop_toBottomOf="@id/iv_21"
102   - />
103   - <ImageView
104   - android:id="@+id/iv_22"
105   - android:layout_width="50dp"
106   - android:layout_height="50dp"
107   - app:layout_constraintLeft_toLeftOf="@id/view_2"
108   - app:layout_constraintTop_toTopOf="@id/view_2"
109   - android:layout_marginLeft="101dp"
110   - android:layout_marginTop="15dp"
111   - android:background="@mipmap/xxxt"
112   - />
113   - <TextView
114   - android:layout_width="wrap_content"
115   - android:layout_height="wrap_content"
116   - android:textColor="#333333"
117   - android:textSize="13dp"
118   - android:text="小星错题"
119   - android:layout_marginTop="8dp"
120   - app:layout_constraintLeft_toLeftOf="@id/iv_22"
121   - app:layout_constraintRight_toRightOf="@id/iv_22"
122   - app:layout_constraintTop_toBottomOf="@id/iv_22"
123   - />
124   - <ImageView
125   - android:id="@+id/iv_23"
126   - android:layout_width="50dp"
127   - android:layout_height="50dp"
128   - app:layout_constraintLeft_toLeftOf="@id/view_2"
129   - app:layout_constraintTop_toTopOf="@id/view_2"
130   - android:layout_marginLeft="194dp"
131   - android:layout_marginTop="15dp"
132   - android:background="@mipmap/ffsj"
133   - />
134   - <TextView
135   - android:layout_width="wrap_content"
136   - android:layout_height="wrap_content"
137   - android:textColor="#333333"
138   - android:textSize="13dp"
139   - android:text="分发试卷"
140   - android:layout_marginTop="8dp"
141   - app:layout_constraintLeft_toLeftOf="@id/iv_23"
142   - app:layout_constraintRight_toRightOf="@id/iv_23"
143   - app:layout_constraintTop_toBottomOf="@id/iv_23"
144   - />
145   - <ImageView
146   - android:id="@+id/iv_24"
147   - android:layout_width="50dp"
148   - android:layout_height="50dp"
149   - app:layout_constraintLeft_toLeftOf="@id/view_2"
150   - app:layout_constraintTop_toTopOf="@id/view_2"
151   - android:layout_marginLeft="285dp"
152   - android:layout_marginTop="15dp"
153   - android:background="@mipmap/sbgl"
154   - />
155   - <TextView
156   - android:layout_width="wrap_content"
157   - android:layout_height="wrap_content"
158   - android:textColor="#333333"
159   - android:textSize="13dp"
160   - android:text="设备管理"
161   - android:layout_marginTop="8dp"
162   - app:layout_constraintLeft_toLeftOf="@id/iv_24"
163   - app:layout_constraintRight_toRightOf="@id/iv_24"
164   - app:layout_constraintTop_toBottomOf="@id/iv_24"
165   - />
  82 + <LinearLayout
  83 + android:layout_width="0dp"
  84 + android:layout_height="wrap_content"
  85 + android:layout_weight="1"
  86 + android:orientation="vertical">
166 87  
167   - <View
  88 + <ImageView
  89 + android:id="@+id/iv_21"
  90 + android:layout_width="50dp"
  91 + android:layout_height="50dp"
  92 + android:layout_gravity="center_horizontal"
  93 + android:layout_marginTop="15dp"
  94 + android:background="@mipmap/yyxz" />
  95 +
  96 + <TextView
  97 + android:layout_width="wrap_content"
  98 + android:layout_height="wrap_content"
  99 + android:layout_gravity="center_horizontal"
  100 + android:layout_marginTop="8dp"
  101 + android:text="应用管理"
  102 + android:textColor="#333333"
  103 + android:textSize="13dp"
  104 + app:layout_constraintLeft_toLeftOf="@id/iv_21"
  105 + app:layout_constraintRight_toRightOf="@id/iv_21"
  106 + app:layout_constraintTop_toBottomOf="@id/iv_21" />
  107 + </LinearLayout>
  108 +
  109 + <LinearLayout
  110 + android:layout_width="0dp"
  111 + android:layout_height="wrap_content"
  112 + android:layout_weight="1"
  113 + android:orientation="vertical">
  114 +
  115 + <ImageView
  116 + android:id="@+id/iv_22"
  117 + android:layout_width="50dp"
  118 + android:layout_height="50dp"
  119 + android:layout_gravity="center_horizontal"
  120 + android:layout_marginTop="15dp"
  121 + android:background="@mipmap/xxxt"
  122 + app:layout_constraintLeft_toLeftOf="@id/view_2"
  123 + app:layout_constraintTop_toTopOf="@id/view_2" />
  124 +
  125 + <TextView
  126 + android:layout_width="wrap_content"
  127 + android:layout_height="wrap_content"
  128 + android:layout_gravity="center_horizontal"
  129 + android:layout_marginTop="8dp"
  130 + android:text="小星错题"
  131 + android:textColor="#333333"
  132 + android:textSize="13dp"
  133 + app:layout_constraintLeft_toLeftOf="@id/iv_22"
  134 + app:layout_constraintRight_toRightOf="@id/iv_22"
  135 + app:layout_constraintTop_toBottomOf="@id/iv_22" />
  136 + </LinearLayout>
  137 +
  138 + <LinearLayout
  139 + android:layout_width="0dp"
  140 + android:layout_height="wrap_content"
  141 + android:layout_weight="1"
  142 + android:orientation="vertical">
  143 +
  144 + <ImageView
  145 + android:id="@+id/iv_23"
  146 + android:layout_width="50dp"
  147 + android:layout_height="50dp"
  148 + android:layout_gravity="center_horizontal"
  149 + android:layout_marginTop="15dp"
  150 + android:background="@mipmap/ffsj"
  151 + app:layout_constraintLeft_toLeftOf="@id/view_2"
  152 + app:layout_constraintTop_toTopOf="@id/view_2" />
  153 +
  154 + <TextView
  155 + android:layout_width="wrap_content"
  156 + android:layout_height="wrap_content"
  157 + android:layout_gravity="center_horizontal"
  158 + android:layout_marginTop="8dp"
  159 + android:text="分发试卷"
  160 + android:textColor="#333333"
  161 + android:textSize="13dp"
  162 + app:layout_constraintLeft_toLeftOf="@id/iv_23"
  163 + app:layout_constraintRight_toRightOf="@id/iv_23"
  164 + app:layout_constraintTop_toBottomOf="@id/iv_23" />
  165 + </LinearLayout>
  166 +
  167 + <LinearLayout
  168 + android:layout_width="0dp"
  169 + android:layout_height="wrap_content"
  170 + android:layout_weight="1"
  171 + android:orientation="vertical">
  172 +
  173 + <ImageView
  174 + android:id="@+id/iv_24"
  175 + android:layout_width="50dp"
  176 + android:layout_height="50dp"
  177 + android:layout_gravity="center_horizontal"
  178 + android:layout_marginTop="15dp"
  179 + android:background="@mipmap/sbgl"
  180 + app:layout_constraintLeft_toLeftOf="@id/view_2"
  181 + app:layout_constraintTop_toTopOf="@id/view_2" />
  182 +
  183 + <TextView
  184 + android:layout_width="wrap_content"
  185 + android:layout_height="wrap_content"
  186 + android:layout_gravity="center_horizontal"
  187 + android:layout_marginTop="8dp"
  188 + android:text="设备管理"
  189 + android:textColor="#333333"
  190 + android:textSize="13dp"
  191 + app:layout_constraintLeft_toLeftOf="@id/iv_24"
  192 + app:layout_constraintRight_toRightOf="@id/iv_24"
  193 + app:layout_constraintTop_toBottomOf="@id/iv_24" />
  194 + </LinearLayout>
  195 + </LinearLayout>
  196 +
  197 + <RelativeLayout
168 198 android:id="@+id/view_3"
169   - android:layout_width="345dp"
170   - android:layout_height="225dp"
  199 + android:layout_width="match_parent"
  200 + android:layout_height="match_parent"
  201 + android:layout_marginLeft="15dp"
  202 + android:layout_marginTop="357dp"
  203 + android:layout_marginRight="15dp"
  204 + android:layout_marginBottom="20dp"
  205 + android:background="@drawable/bg_solid_white_10"
  206 + android:orientation="vertical"
171 207 app:layout_constraintLeft_toLeftOf="parent"
172 208 app:layout_constraintRight_toRightOf="parent"
173   - app:layout_constraintTop_toTopOf="parent"
174   - android:background="@drawable/bg_solid_white_10"
175   - android:layout_marginTop="357dp"
176   - />
177   - <TextView
178   - android:id="@+id/tv_31"
179   - android:layout_width="wrap_content"
180   - android:layout_height="wrap_content"
181   - android:textColor="#333333"
182   - android:textSize="15dp"
183   - android:text="本周学习计划"
184   - android:layout_marginTop="15dp"
185   - app:layout_constraintLeft_toLeftOf="@id/view_3"
186   - app:layout_constraintRight_toRightOf="@id/view_3"
187   - app:layout_constraintTop_toTopOf="@id/view_3"
188   - />
189   - <View
190   - android:layout_width="25dp"
191   - android:layout_height="1dp"
192   - android:background="#EEEEEE"
193   - app:layout_constraintRight_toLeftOf="@+id/tv_31"
194   - app:layout_constraintTop_toTopOf="@id/tv_31"
195   - app:layout_constraintBottom_toBottomOf="@id/tv_31"
196   - android:layout_marginRight="10dp"
197   - />
198   - <View
199   - android:layout_width="25dp"
200   - android:layout_height="1dp"
201   - android:background="#EEEEEE"
202   - app:layout_constraintLeft_toRightOf="@+id/tv_31"
203   - app:layout_constraintTop_toTopOf="@id/tv_31"
204   - app:layout_constraintBottom_toBottomOf="@id/tv_31"
205   - android:layout_marginLeft="10dp"
206   - />
207   - <ImageView
208   - android:layout_width="103dp"
209   - android:layout_height="66dp"
210   - android:background="@mipmap/zwjh"
211   - app:layout_constraintLeft_toLeftOf="@id/view_3"
212   - app:layout_constraintRight_toRightOf="@id/view_3"
213   - app:layout_constraintTop_toTopOf="@id/view_3"
214   - android:layout_marginTop="77dp"
215   - />
216   - <TextView
217   - android:layout_width="wrap_content"
218   - android:layout_height="wrap_content"
219   - android:textColor="#666666"
220   - android:textSize="12dp"
221   - android:text="本周学习计划"
222   - android:layout_marginTop="161dp"
223   - app:layout_constraintLeft_toLeftOf="@id/view_3"
224   - app:layout_constraintRight_toRightOf="@id/view_3"
225   - app:layout_constraintTop_toTopOf="@id/view_3"
226   - />
  209 + app:layout_constraintTop_toTopOf="parent">
  210 +
  211 + <RelativeLayout
  212 + android:id="@+id/rl_schedule"
  213 + android:layout_width="match_parent"
  214 + android:layout_height="wrap_content"
  215 + android:layout_marginTop="15dp"
  216 + android:layout_marginRight="10dp">
  217 +
  218 + <TextView
  219 + android:id="@+id/tv_31"
  220 + android:layout_width="wrap_content"
  221 + android:layout_height="wrap_content"
  222 + android:layout_centerHorizontal="true"
  223 + android:text="本周学习计划"
  224 + android:textColor="#333333"
  225 + android:textSize="15dp" />
  226 +
  227 +
  228 + <View
  229 + android:layout_width="25dp"
  230 + android:layout_height="1dp"
  231 + android:layout_centerVertical="true"
  232 + android:layout_marginRight="10dp"
  233 + android:layout_toLeftOf="@+id/tv_31"
  234 + android:background="#EEEEEE" />
  235 +
  236 + <View
  237 + android:layout_width="25dp"
  238 + android:layout_height="1dp"
  239 + android:layout_centerVertical="true"
  240 + android:layout_marginLeft="10dp"
  241 + android:layout_toRightOf="@+id/tv_31"
  242 + android:background="#EEEEEE" />
  243 + </RelativeLayout>
  244 +
  245 +
  246 + <ImageView
  247 + android:id="@+id/iv_empty"
  248 + android:layout_width="103dp"
  249 + android:layout_height="66dp"
  250 + android:layout_below="@+id/rl_schedule"
  251 + android:layout_centerHorizontal="true"
  252 + android:layout_gravity="center_horizontal"
  253 + android:layout_marginTop="48dp"
  254 + android:background="@mipmap/zwjh" />
  255 +
  256 + <TextView
  257 + android:id="@+id/tv_empty"
  258 + android:layout_width="wrap_content"
  259 + android:layout_height="wrap_content"
  260 + android:layout_below="@+id/iv_empty"
  261 + android:layout_centerHorizontal="true"
  262 + android:layout_gravity="center_horizontal"
  263 + android:layout_marginTop="18dp"
  264 + android:text="暂无学习计划"
  265 + android:textColor="#666666"
  266 + android:textSize="12dp" />
227 267  
  268 + <androidx.recyclerview.widget.RecyclerView
  269 + android:id="@+id/recycle"
  270 + android:layout_width="match_parent"
  271 + android:layout_height="match_parent"
  272 + android:layout_below="@+id/rl_schedule" />
  273 + </RelativeLayout>
228 274  
229 275  
230 276 </androidx.constraintlayout.widget.ConstraintLayout>
231 277 \ No newline at end of file
... ...
app/src/main/res/layout/fragment_me.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 4 android:layout_width="match_parent"
4 5 android:layout_height="match_parent"
5   - xmlns:app="http://schemas.android.com/apk/res-auto"
6   - android:background="#F4F6F8"
7   - >
  6 + android:background="#F4F6F8">
8 7  
9 8 <androidx.constraintlayout.widget.Group
10 9 android:id="@+id/group_1"
11 10 android:layout_width="wrap_content"
12 11 android:layout_height="wrap_content"
13   - app:constraint_referenced_ids="iv_toux,tv_name,tv_phone,view_2,tv_title,iv_21,iv_22,iv_23,tv_21,tv_22,tv_23"
14   - android:visibility="gone"
15   - />
  12 + android:visibility="visible" />
16 13  
17 14 <View
18 15 android:id="@+id/view_1"
19 16 android:layout_width="match_parent"
20 17 android:layout_height="44dp"
21   - app:layout_constraintTop_toTopOf="parent"
22 18 android:background="@android:color/white"
23   - />
  19 + app:layout_constraintTop_toTopOf="parent" />
  20 +
24 21 <TextView
25 22 android:layout_width="wrap_content"
26 23 android:layout_height="wrap_content"
27 24 android:text="个人中心"
28 25 android:textColor="#333333"
29 26 android:textSize="18dp"
  27 + app:layout_constraintBottom_toBottomOf="@id/view_1"
30 28 app:layout_constraintLeft_toLeftOf="@id/view_1"
31 29 app:layout_constraintRight_toRightOf="@id/view_1"
32   - app:layout_constraintTop_toTopOf="@id/view_1"
33   - app:layout_constraintBottom_toBottomOf="@id/view_1"
34   - />
  30 + app:layout_constraintTop_toTopOf="@id/view_1" />
35 31  
36   - <ImageView
37   - android:id="@+id/iv_bann"
38   - android:layout_width="345dp"
39   - android:layout_height="167dp"
40   - android:background="@mipmap/smdlaa"
41   - app:layout_constraintLeft_toLeftOf="parent"
42   - app:layout_constraintRight_toRightOf="parent"
43   - app:layout_constraintTop_toTopOf="parent"
44   - android:layout_marginTop="63dp"
45   - android:visibility="visible"
46   - />
47 32  
48 33 <ImageView
49 34 android:id="@+id/iv_toux"
50 35 android:layout_width="57dp"
51 36 android:layout_height="57dp"
52   - app:layout_constraintLeft_toLeftOf="parent"
53   - app:layout_constraintTop_toTopOf="parent"
54 37 android:layout_marginLeft="15dp"
55 38 android:layout_marginTop="63dp"
56   - android:background="@mipmap/txz"
57   - />
  39 + android:background="@mipmap/ic_parent_avatar"
  40 + app:layout_constraintLeft_toLeftOf="parent"
  41 + app:layout_constraintTop_toTopOf="parent" />
58 42  
59 43 <TextView
60 44 android:id="@+id/tv_name"
61 45 android:layout_width="wrap_content"
62 46 android:layout_height="wrap_content"
63   - app:layout_constraintLeft_toLeftOf="parent"
64   - app:layout_constraintTop_toTopOf="parent"
65 47 android:layout_marginLeft="88dp"
66 48 android:layout_marginTop="72dp"
67   - android:textSize="20dp"
68   - android:textColor="#333333"
69 49 android:text="名字"
70   - />
  50 + android:textColor="#333333"
  51 + android:textSize="20dp"
  52 + app:layout_constraintLeft_toLeftOf="parent"
  53 + app:layout_constraintTop_toTopOf="parent" />
  54 +
71 55 <TextView
72 56 android:id="@+id/tv_phone"
73 57 android:layout_width="wrap_content"
74 58 android:layout_height="wrap_content"
75   - app:layout_constraintLeft_toLeftOf="parent"
76   - app:layout_constraintTop_toTopOf="parent"
77 59 android:layout_marginLeft="88dp"
78 60 android:layout_marginTop="98dp"
  61 + android:text="1231223123"
79 62 android:textColor="#999999"
80 63 android:textSize="17dp"
81   - android:text="1231223123"
82   - />
83   -
  64 + android:visibility="gone"
  65 + app:layout_constraintLeft_toLeftOf="parent"
  66 + app:layout_constraintTop_toTopOf="parent" />
84 67  
85 68  
86   - <View
  69 + <LinearLayout
87 70 android:id="@+id/view_2"
88   - android:layout_width="345dp"
  71 + android:layout_width="match_parent"
89 72 android:layout_height="140dp"
90   - app:layout_constraintLeft_toLeftOf="parent"
91   - app:layout_constraintRight_toRightOf="parent"
92   - app:layout_constraintTop_toTopOf="parent"
  73 + android:layout_marginLeft="15dp"
93 74 android:layout_marginTop="140dp"
  75 + android:layout_marginRight="15dp"
94 76 android:background="@drawable/bg_solid_white_10"
95   - />
96   -
97   - <TextView
98   - android:id="@+id/tv_title"
99   - android:layout_width="wrap_content"
100   - android:layout_height="wrap_content"
101   - android:text="学生"
102   - android:textColor="#333333"
103   - android:textSize="16dp"
104   - app:layout_constraintLeft_toLeftOf="@id/view_2"
105   - app:layout_constraintTop_toTopOf="@id/view_2"
106   - android:layout_marginLeft="15dp"
107   - android:layout_marginTop="15dp"
108   - />
109   -
110   - <ImageView
111   - android:id="@+id/iv_21"
112   - android:layout_width="56dp"
113   - android:layout_height="56dp"
114   - android:background="@mipmap/tjxss"
115   - app:layout_constraintLeft_toLeftOf="@id/view_2"
116   - app:layout_constraintTop_toTopOf="@id/view_2"
117   - android:layout_marginLeft="15dp"
118   - android:layout_marginTop="44dp"
119   - />
120   - <TextView
121   - android:id="@+id/tv_21"
122   - android:layout_width="wrap_content"
123   - android:layout_height="wrap_content"
124   - app:layout_constraintLeft_toLeftOf="@id/iv_21"
125   - app:layout_constraintRight_toRightOf="@id/iv_21"
126   - app:layout_constraintTop_toBottomOf="@id/iv_21"
127   - android:layout_marginTop="10dp"
128   - android:textColor="#000000"
129   - android:textSize="13dp"
130   - android:text="添加学生"
131   - />
132   - <ImageView
133   - android:id="@+id/iv_22"
134   - android:layout_width="56dp"
135   - android:layout_height="56dp"
136   - android:background="@mipmap/tjxss"
137   - app:layout_constraintLeft_toLeftOf="@id/view_2"
138   - app:layout_constraintTop_toTopOf="@id/view_2"
139   - android:layout_marginLeft="144dp"
140   - android:layout_marginTop="44dp"
141   - />
142   - <TextView
143   - android:id="@+id/tv_22"
144   - android:layout_width="wrap_content"
145   - android:layout_height="wrap_content"
146   - app:layout_constraintLeft_toLeftOf="@id/iv_22"
147   - app:layout_constraintRight_toRightOf="@id/iv_22"
148   - app:layout_constraintTop_toBottomOf="@id/iv_22"
149   - android:layout_marginTop="10dp"
150   - android:textColor="#000000"
151   - android:textSize="13dp"
152   - android:text="添加学生"
153   - />
154   - <ImageView
155   - android:id="@+id/iv_23"
156   - android:layout_width="56dp"
157   - android:layout_height="56dp"
158   - android:background="@mipmap/tjxss"
159   - app:layout_constraintLeft_toLeftOf="@id/view_2"
160   - app:layout_constraintTop_toTopOf="@id/view_2"
161   - android:layout_marginLeft="274dp"
162   - android:layout_marginTop="44dp"
163   - />
164   - <TextView
165   - android:id="@+id/tv_23"
166   - android:layout_width="wrap_content"
167   - android:layout_height="wrap_content"
168   - app:layout_constraintLeft_toLeftOf="@id/iv_23"
169   - app:layout_constraintRight_toRightOf="@id/iv_23"
170   - app:layout_constraintTop_toBottomOf="@id/iv_23"
171   - android:layout_marginTop="10dp"
172   - android:textColor="#000000"
173   - android:textSize="13dp"
174   - android:text="添加学生"
175   - />
176   -
177   -
178   -
179   -
180   -
181   -
  77 + android:orientation="vertical"
  78 + app:layout_constraintLeft_toLeftOf="parent"
  79 + app:layout_constraintRight_toRightOf="parent"
  80 + app:layout_constraintTop_toTopOf="parent">
182 81  
  82 + <TextView
  83 + android:id="@+id/tv_title"
  84 + android:layout_width="wrap_content"
  85 + android:layout_height="wrap_content"
  86 + android:layout_marginLeft="15dp"
  87 + android:layout_marginTop="15dp"
  88 + android:text="学生"
  89 + android:textColor="#333333"
  90 + android:textSize="16dp" />
183 91  
  92 + <androidx.recyclerview.widget.RecyclerView
  93 + android:id="@+id/recycle"
  94 + android:layout_width="match_parent"
  95 + android:layout_height="match_parent"
  96 + android:layout_marginLeft="15dp"
  97 + android:layout_marginRight="15dp" />
  98 + </LinearLayout>
184 99  
185 100 <View
186 101 android:id="@+id/view_3"
187   - android:layout_width="345dp"
  102 + android:layout_width="match_parent"
188 103 android:layout_height="45dp"
  104 + android:layout_marginLeft="15dp"
  105 + android:layout_marginTop="15dp"
  106 + android:layout_marginRight="15dp"
  107 + android:background="@drawable/bg_solid_white_10_top"
189 108 app:layout_constraintLeft_toLeftOf="parent"
190 109 app:layout_constraintRight_toRightOf="parent"
191   - app:layout_goneMarginTop="241dp"
192 110 app:layout_constraintTop_toBottomOf="@id/view_2"
193   - android:layout_marginTop="15dp"
194   - android:background="@drawable/bg_solid_white_10_top"
195   - />
  111 + app:layout_goneMarginTop="241dp" />
  112 +
196 113 <ImageView
197 114 android:layout_width="6.8dp"
198 115 android:layout_height="12dp"
  116 + android:layout_marginRight="15dp"
199 117 android:background="@mipmap/ycaj"
200   - app:layout_constraintTop_toTopOf="@id/view_3"
201 118 app:layout_constraintBottom_toBottomOf="@id/view_3"
202 119 app:layout_constraintRight_toRightOf="@id/view_3"
203   - android:layout_marginRight="15dp"
204   - />
  120 + app:layout_constraintTop_toTopOf="@id/view_3" />
  121 +
205 122 <ImageView
206 123 android:layout_width="14dp"
207 124 android:layout_height="14dp"
208   - app:layout_constraintTop_toTopOf="@id/view_3"
209   - app:layout_constraintBottom_toBottomOf="@id/view_3"
210   - app:layout_constraintLeft_toLeftOf="@id/view_3"
211 125 android:layout_marginLeft="15dp"
212 126 android:background="@mipmap/szz"
213   - />
  127 + app:layout_constraintBottom_toBottomOf="@id/view_3"
  128 + app:layout_constraintLeft_toLeftOf="@id/view_3"
  129 + app:layout_constraintTop_toTopOf="@id/view_3" />
214 130  
215 131 <TextView
216 132 android:layout_width="wrap_content"
217 133 android:layout_height="wrap_content"
  134 + android:layout_marginLeft="40dp"
  135 + android:text="账户设置"
218 136 android:textColor="#333333"
219 137 android:textSize="15dp"
220   - android:text="账户设置"
221   - app:layout_constraintTop_toTopOf="@id/view_3"
222 138 app:layout_constraintBottom_toBottomOf="@id/view_3"
223 139 app:layout_constraintLeft_toLeftOf="@id/view_3"
224   - android:layout_marginLeft="40dp"
225   - />
  140 + app:layout_constraintTop_toTopOf="@id/view_3" />
  141 +
226 142 <View
227 143 android:id="@+id/view_4"
228   - android:layout_width="345dp"
  144 + android:layout_width="match_parent"
229 145 android:layout_height="45dp"
  146 + android:layout_marginLeft="15dp"
  147 + android:layout_marginRight="15dp"
  148 + android:background="@android:color/white"
230 149 app:layout_constraintLeft_toLeftOf="parent"
231 150 app:layout_constraintRight_toRightOf="parent"
232   - app:layout_constraintTop_toBottomOf="@id/view_3"
233   - android:background="@android:color/white"
234   - />
  151 + app:layout_constraintTop_toBottomOf="@id/view_3" />
  152 +
235 153 <ImageView
236 154 android:layout_width="6.8dp"
237 155 android:layout_height="12dp"
  156 + android:layout_marginRight="15dp"
238 157 android:background="@mipmap/ycaj"
239   - app:layout_constraintTop_toTopOf="@id/view_4"
240 158 app:layout_constraintBottom_toBottomOf="@id/view_4"
241 159 app:layout_constraintRight_toRightOf="@id/view_4"
242   - android:layout_marginRight="15dp"
243   - />
  160 + app:layout_constraintTop_toTopOf="@id/view_4" />
  161 +
244 162 <ImageView
245 163 android:layout_width="14dp"
246 164 android:layout_height="14dp"
247   - app:layout_constraintTop_toTopOf="@id/view_4"
248   - app:layout_constraintBottom_toBottomOf="@id/view_4"
249   - app:layout_constraintLeft_toLeftOf="@id/view_4"
250 165 android:layout_marginLeft="15dp"
251 166 android:background="@mipmap/yincs"
252   - />
  167 + app:layout_constraintBottom_toBottomOf="@id/view_4"
  168 + app:layout_constraintLeft_toLeftOf="@id/view_4"
  169 + app:layout_constraintTop_toTopOf="@id/view_4" />
253 170  
254 171 <TextView
255 172 android:layout_width="wrap_content"
256 173 android:layout_height="wrap_content"
  174 + android:layout_marginLeft="40dp"
  175 + android:text="隐私设置"
257 176 android:textColor="#333333"
258 177 android:textSize="15dp"
259   - android:text="隐私设置"
260   - app:layout_constraintTop_toTopOf="@id/view_4"
261 178 app:layout_constraintBottom_toBottomOf="@id/view_4"
262 179 app:layout_constraintLeft_toLeftOf="@id/view_4"
263   - android:layout_marginLeft="40dp"
264   - />
  180 + app:layout_constraintTop_toTopOf="@id/view_4" />
265 181  
266 182 <View
267 183 android:id="@+id/view_5"
268   - android:layout_width="345dp"
  184 + android:layout_width="match_parent"
269 185 android:layout_height="45dp"
  186 + android:layout_marginLeft="15dp"
  187 + android:layout_marginRight="15dp"
  188 + android:background="@android:color/white"
270 189 app:layout_constraintLeft_toLeftOf="parent"
271 190 app:layout_constraintRight_toRightOf="parent"
272   - app:layout_constraintTop_toBottomOf="@id/view_4"
273   - android:background="@android:color/white"
274   - />
  191 + app:layout_constraintTop_toBottomOf="@id/view_4" />
  192 +
275 193 <ImageView
276 194 android:layout_width="6.8dp"
277 195 android:layout_height="12dp"
  196 + android:layout_marginRight="15dp"
278 197 android:background="@mipmap/ycaj"
279   - app:layout_constraintTop_toTopOf="@id/view_5"
280 198 app:layout_constraintBottom_toBottomOf="@id/view_5"
281 199 app:layout_constraintRight_toRightOf="@id/view_5"
282   - android:layout_marginRight="15dp"
283   - />
  200 + app:layout_constraintTop_toTopOf="@id/view_5" />
  201 +
284 202 <ImageView
285 203 android:layout_width="14dp"
286 204 android:layout_height="14dp"
287   - app:layout_constraintTop_toTopOf="@id/view_5"
288   - app:layout_constraintBottom_toBottomOf="@id/view_5"
289   - app:layout_constraintLeft_toLeftOf="@id/view_5"
290 205 android:layout_marginLeft="15dp"
291 206 android:background="@mipmap/gywmm"
292   - />
  207 + app:layout_constraintBottom_toBottomOf="@id/view_5"
  208 + app:layout_constraintLeft_toLeftOf="@id/view_5"
  209 + app:layout_constraintTop_toTopOf="@id/view_5" />
293 210  
294 211 <TextView
295 212 android:layout_width="wrap_content"
296 213 android:layout_height="wrap_content"
  214 + android:layout_marginLeft="40dp"
  215 + android:text="关于我们"
297 216 android:textColor="#333333"
298 217 android:textSize="15dp"
299   - android:text="关于我们"
300   - app:layout_constraintTop_toTopOf="@id/view_5"
301 218 app:layout_constraintBottom_toBottomOf="@id/view_5"
302 219 app:layout_constraintLeft_toLeftOf="@id/view_5"
303   - android:layout_marginLeft="40dp"
304   - />
  220 + app:layout_constraintTop_toTopOf="@id/view_5" />
  221 +
305 222 <View
306 223 android:id="@+id/view_6"
307   - android:layout_width="345dp"
  224 + android:layout_width="match_parent"
308 225 android:layout_height="45dp"
  226 + android:layout_marginLeft="15dp"
  227 + android:layout_marginRight="15dp"
  228 + android:background="@drawable/bg_solid_white_10_bottom"
309 229 app:layout_constraintLeft_toLeftOf="parent"
310 230 app:layout_constraintRight_toRightOf="parent"
311   - app:layout_constraintTop_toBottomOf="@id/view_5"
312   - android:background="@drawable/bg_solid_white_10_bottom"
313   - />
  231 + app:layout_constraintTop_toBottomOf="@id/view_5" />
314 232  
315 233 <ImageView
316 234 android:layout_width="14dp"
317 235 android:layout_height="14dp"
318   - app:layout_constraintTop_toTopOf="@id/view_6"
319   - app:layout_constraintBottom_toBottomOf="@id/view_6"
320   - app:layout_constraintLeft_toLeftOf="@id/view_6"
321 236 android:layout_marginLeft="15dp"
322 237 android:background="@mipmap/banb"
323   - />
  238 + app:layout_constraintBottom_toBottomOf="@id/view_6"
  239 + app:layout_constraintLeft_toLeftOf="@id/view_6"
  240 + app:layout_constraintTop_toTopOf="@id/view_6" />
324 241  
325 242 <TextView
326 243 android:layout_width="wrap_content"
327 244 android:layout_height="wrap_content"
  245 + android:layout_marginLeft="40dp"
  246 + android:text="当前版本"
328 247 android:textColor="#333333"
329 248 android:textSize="15dp"
330   - android:text="当前版本"
331   - app:layout_constraintTop_toTopOf="@id/view_6"
332 249 app:layout_constraintBottom_toBottomOf="@id/view_6"
333 250 app:layout_constraintLeft_toLeftOf="@id/view_6"
334   - android:layout_marginLeft="40dp"
335   - />
  251 + app:layout_constraintTop_toTopOf="@id/view_6" />
  252 +
336 253 <TextView
337 254 android:layout_width="wrap_content"
338 255 android:layout_height="wrap_content"
  256 + android:layout_marginRight="15dp"
  257 + android:text="V1.0"
339 258 android:textColor="#333333"
340 259 android:textSize="15dp"
341   - android:text="V1.0"
342   - app:layout_constraintTop_toTopOf="@id/view_6"
343 260 app:layout_constraintBottom_toBottomOf="@id/view_6"
344 261 app:layout_constraintRight_toRightOf="@id/view_6"
345   - android:layout_marginRight="15dp"
346   - />
347   -
  262 + app:layout_constraintTop_toTopOf="@id/view_6" />
348 263  
349 264 </androidx.constraintlayout.widget.ConstraintLayout>
350 265 \ No newline at end of file
... ...
app/src/main/res/layout/item_child.xml
... ... @@ -0,0 +1,36 @@
  1 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + android:layout_width="75dp"
  3 + android:layout_height="wrap_content"
  4 + android:layout_marginLeft="15dp"
  5 + android:layout_marginRight="15dp"
  6 + android:orientation="vertical">
  7 +
  8 + <ImageView
  9 + android:id="@+id/iv_avatar"
  10 + android:layout_width="56dp"
  11 + android:layout_height="56dp"
  12 + android:layout_centerHorizontal="true"
  13 + android:layout_marginTop="8dp"
  14 + android:background="@mipmap/tjxss" />
  15 +
  16 + <ImageView
  17 + android:id="@+id/iv_vip"
  18 + android:layout_width="20dp"
  19 + android:layout_height="18dp"
  20 + android:layout_alignRight="@+id/iv_avatar"
  21 + android:src="@mipmap/ic_vip" />
  22 +
  23 + <TextView
  24 + android:id="@+id/tv_name"
  25 + android:layout_width="wrap_content"
  26 + android:layout_height="wrap_content"
  27 + android:layout_below="@+id/iv_avatar"
  28 + android:layout_centerHorizontal="true"
  29 + android:layout_marginTop="10dp"
  30 + android:ellipsize="end"
  31 + android:singleLine="true"
  32 + android:text="添加学生"
  33 + android:textColor="#000000"
  34 + android:textSize="13dp" />
  35 +</RelativeLayout>
  36 +
... ...
app/src/main/res/layout/item_child_choose.xml
... ... @@ -0,0 +1,74 @@
  1 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + android:id="@+id/rl_child"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="70dp"
  5 + android:layout_marginLeft="15dp"
  6 + android:layout_marginTop="15dp"
  7 + android:layout_marginRight="15dp"
  8 + android:background="@drawable/bg_solid_white_10">
  9 +
  10 + <ImageView
  11 + android:id="@+id/iv_avatar"
  12 + android:layout_width="50dp"
  13 + android:layout_height="50dp"
  14 + android:layout_centerVertical="true"
  15 + android:layout_marginLeft="20dp" />
  16 +
  17 + <ImageView
  18 + android:id="@+id/iv_vip"
  19 + android:layout_width="20dp"
  20 + android:layout_height="18dp"
  21 + android:layout_alignRight="@+id/iv_avatar"
  22 + android:src="@mipmap/ic_vip" />
  23 +
  24 + <TextView
  25 + android:id="@+id/tv_name"
  26 + android:layout_width="wrap_content"
  27 + android:layout_height="wrap_content"
  28 + android:layout_centerVertical="true"
  29 + android:layout_marginLeft="15dp"
  30 + android:layout_toRightOf="@+id/iv_avatar"
  31 + android:textColor="#333333"
  32 + android:textSize="16sp" />
  33 +
  34 + <ImageView
  35 + android:id="@+id/iv_select"
  36 + android:layout_width="15dp"
  37 + android:layout_height="15dp"
  38 + android:layout_alignParentRight="true"
  39 + android:src="@mipmap/wsyq"
  40 + android:layout_centerVertical="true"
  41 + android:layout_marginRight="20dp" />
  42 +
  43 + <RelativeLayout
  44 + android:id="@+id/rl_add"
  45 + android:layout_width="match_parent"
  46 + android:layout_height="match_parent"
  47 + android:background="@drawable/bg_solid_white_10"
  48 + android:visibility="gone">
  49 +
  50 + <LinearLayout
  51 + android:layout_width="wrap_content"
  52 + android:layout_height="wrap_content"
  53 + android:layout_centerInParent="true"
  54 + android:orientation="horizontal">
  55 +
  56 + <ImageView
  57 + android:layout_width="20dp"
  58 + android:layout_height="20dp"
  59 + android:layout_gravity="center_vertical"
  60 + android:gravity="center_vertical"
  61 + android:src="@mipmap/ic_add" />
  62 +
  63 + <TextView
  64 + android:layout_width="wrap_content"
  65 + android:layout_height="wrap_content"
  66 + android:layout_gravity="center_vertical"
  67 + android:layout_marginLeft="8dp"
  68 + android:gravity="center_vertical"
  69 + android:text="添加学生"
  70 + android:textColor="#FE5E09"
  71 + android:textSize="16sp" />
  72 + </LinearLayout>
  73 + </RelativeLayout>
  74 +</RelativeLayout>
0 75 \ No newline at end of file
... ...
app/src/main/res/layout/item_schedule.xml
... ... @@ -0,0 +1,35 @@
  1 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + android:layout_width="match_parent"
  3 + android:layout_height="wrap_content"
  4 + android:layout_marginLeft="15dp"
  5 + android:layout_marginTop="15dp"
  6 + android:layout_marginRight="15dp"
  7 + android:orientation="vertical">
  8 +
  9 + <LinearLayout
  10 + android:layout_width="wrap_content"
  11 + android:layout_height="wrap_content"
  12 + android:orientation="horizontal">
  13 +
  14 + <View
  15 + android:layout_width="1dp"
  16 + android:layout_height="15dp"
  17 + android:layout_gravity="center_vertical"
  18 + android:background="#FE5E09" />
  19 +
  20 + <TextView
  21 + android:id="@+id/tv_date"
  22 + android:layout_width="wrap_content"
  23 + android:layout_height="wrap_content"
  24 + android:layout_gravity="center_vertical"
  25 + android:layout_marginLeft="10dp"
  26 + android:textColor="#333333"
  27 + android:textSize="13sp" />
  28 + </LinearLayout>
  29 +
  30 + <LinearLayout
  31 + android:id="@+id/ll_schedule"
  32 + android:layout_width="match_parent"
  33 + android:layout_height="wrap_content"
  34 + android:orientation="vertical" />
  35 +</LinearLayout>
0 36 \ No newline at end of file
... ...
app/src/main/res/layout/item_video.xml
... ... @@ -0,0 +1,15 @@
  1 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + android:layout_width="match_parent"
  3 + android:layout_height="wrap_content">
  4 +
  5 + <TextView
  6 + android:id="@+id/tv_name"
  7 + android:layout_width="match_parent"
  8 + android:layout_height="35dp"
  9 + android:layout_marginTop="15dp"
  10 + android:background="@drawable/bg_item_video_10"
  11 + android:gravity="center"
  12 + android:singleLine="true"
  13 + android:textColor="#333333"
  14 + android:textSize="13sp" />
  15 +</LinearLayout>
0 16 \ No newline at end of file
... ...
app/src/main/res/mipmap-hdpi/gx.png

847 Bytes | W: | H:

2.11 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/src/main/res/mipmap-hdpi/ic_add.png

3.3 KB

app/src/main/res/mipmap-hdpi/ic_avatar_female.png

168 KB

app/src/main/res/mipmap-hdpi/ic_avatar_male.png

202 KB

app/src/main/res/mipmap-hdpi/ic_edit.png

2.39 KB

app/src/main/res/mipmap-hdpi/ic_parent_avatar.png

182 KB

app/src/main/res/mipmap-hdpi/ic_teacher_female.png

164 KB

app/src/main/res/mipmap-hdpi/ic_teacher_male.png

169 KB

app/src/main/res/mipmap-hdpi/ic_vip.png

8.46 KB

app/src/main/res/mipmap-hdpi/ssss.png

139 KB | W: | H:

990 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/src/main/res/mipmap-hdpi/wsyq.png

563 Bytes | W: | H:

1.35 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/src/main/res/values/styles.xml
... ... @@ -20,6 +20,13 @@
20 20 <item name="android:textSize">11dp</item>
21 21 <item name="android:drawablePadding">2dp</item>
22 22 </style>
23   -
24   -
  23 + <!--实现BottomSheetDialog圆角效果-->
  24 + <style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog">
  25 + <item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item>
  26 + </style>
  27 + <style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
  28 + <item name="android:background">@android:color/transparent</item>
  29 + <item name="android:navigationBarColor">@android:color/transparent</item>
  30 + <item name="behavior_peekHeight">500dp</item>
  31 + </style>
25 32 </resources>
26 33 \ No newline at end of file
... ...
app/src/main/res/values/themes.xml
1 1 <resources xmlns:tools="http://schemas.android.com/tools">
2 2 <!-- Base application theme. -->
3   - <style name="Theme.Parent" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
  3 + <style name="Theme.Parent" parent="Theme.AppCompat.Light.DarkActionBar">
4 4 <!-- Primary brand color. -->
5 5 <item name="colorPrimary">@color/purple_500</item>
6 6 <item name="colorPrimaryVariant">@color/purple_700</item>
... ...
app/src/main/res/xml/file_provider_paths.xml
... ... @@ -0,0 +1,9 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<paths>
  3 + <root-path
  4 + name="name"
  5 + path="" />
  6 + <external-cache-path
  7 + name="cache_root"
  8 + path="." />
  9 +</paths>
0 10 \ No newline at end of file
... ...
... ... @@ -16,8 +16,8 @@ buildscript {
16 16  
17 17  
18 18 url = [
19   - server_url: "https://mgr.hjx.com", //http 请求指令
20   -
  19 + server_url : "http://192.168.3.11:8088", //http 请求指令
  20 + server_url_online: "https://mgr.hjx.com", //http 请求指令
21 21 ]
22 22  
23 23  
... ... @@ -49,7 +49,7 @@ buildscript {
49 49 commons_codec : 'commons-codec:commons-codec:1.7',
50 50 eventbus : 'org.greenrobot:eventbus:3.2.0',
51 51 eventbus2 : 'org.simple:androideventbus:1.0.5.1',
52   - glide : 'com.github.bumptech.glide:glide:3.7.0',
  52 + glide : 'com.github.bumptech.glide:glide:4.6.1',
53 53 permissions : 'com.github.getActivity:XXPermissions:11.6',
54 54 orcode : 'cn.yipianfengye.android:zxing-library:2.2'
55 55 // push : 'com.umeng.sdk:push:4.1.0',
... ...
libs/common/build.gradle
... ... @@ -25,13 +25,12 @@ android {
25 25 buildTypes {
26 26 debug {
27 27 minifyEnabled false
28   - buildConfigField("String", "SERVER_URL", "\"${url.server_url}\"")
29   -
  28 + buildConfigField("String", "SERVER_URL", "\"${url.server_url_online}\"")
30 29 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
31 30 }
32 31 release {
33 32 minifyEnabled false
34   - buildConfigField("String", "SERVER_URL", "\"${url.server_url}\"")
  33 + buildConfigField("String", "SERVER_URL", "\"${url.server_url_online}\"")
35 34 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
36 35 }
37 36 }
... ...
libs/common/src/main/java/com/prws/common/base/BaseFragment.java
... ... @@ -14,6 +14,8 @@ import androidx.fragment.app.Fragment;
14 14  
15 15 import org.simple.eventbus.EventBus;
16 16  
  17 +import butterknife.ButterKnife;
  18 +import butterknife.Unbinder;
17 19 import io.reactivex.disposables.CompositeDisposable;
18 20 import io.reactivex.disposables.Disposable;
19 21  
... ... @@ -21,7 +23,7 @@ public abstract class BaseFragment extends Fragment {
21 23  
22 24 protected View mRootView;
23 25  
24   -
  26 + private Unbinder unbinder;
25 27 @Override
26 28 public void onCreate(@Nullable Bundle savedInstanceState) {
27 29 super.onCreate(savedInstanceState);
... ... @@ -39,6 +41,7 @@ public abstract class BaseFragment extends Fragment {
39 41 } else {
40 42 mRootView = inflater.inflate(getLayoutRes(), container, false);
41 43 }
  44 + unbinder = ButterKnife.bind(this, mRootView);
42 45 return mRootView;
43 46 }
44 47  
... ... @@ -82,7 +85,9 @@ public abstract class BaseFragment extends Fragment {
82 85 public void onDestroy() {
83 86 super.onDestroy();
84 87 EventBus.getDefault().unregister(this);
85   -
  88 + if (unbinder != null) {
  89 + unbinder.unbind();
  90 + }
86 91 }
87 92  
88 93  
... ...
libs/common/src/main/java/com/prws/common/bean/Grade.java
... ... @@ -0,0 +1,22 @@
  1 +package com.prws.common.bean;
  2 +
  3 +public class Grade {
  4 + private int id;
  5 + private String grade;
  6 +
  7 + public void setId(int id) {
  8 + this.id = id;
  9 + }
  10 +
  11 + public void setGrade(String grade) {
  12 + this.grade = grade;
  13 + }
  14 +
  15 + public int getId() {
  16 + return id;
  17 + }
  18 +
  19 + public String getGrade() {
  20 + return grade;
  21 + }
  22 +}
... ...
libs/common/src/main/java/com/prws/common/bean/GradeAndSubject.java
... ... @@ -0,0 +1,24 @@
  1 +package com.prws.common.bean;
  2 +
  3 +import java.util.List;
  4 +
  5 +public class GradeAndSubject {
  6 + private List<Subject> subjects;
  7 + private Grade grade;
  8 +
  9 + public void setSubjects(List<Subject> subjects) {
  10 + this.subjects = subjects;
  11 + }
  12 +
  13 + public void setGrade(Grade grade) {
  14 + this.grade = grade;
  15 + }
  16 +
  17 + public List<Subject> getSubjects() {
  18 + return subjects;
  19 + }
  20 +
  21 + public Grade getGrade() {
  22 + return grade;
  23 + }
  24 +}
... ...
libs/common/src/main/java/com/prws/common/bean/ResponseResult.java
... ... @@ -0,0 +1,69 @@
  1 +package com.prws.common.bean;
  2 +
  3 +
  4 +import com.google.gson.annotations.SerializedName;
  5 +
  6 +/**
  7 + * 统一响应类
  8 + *
  9 + * @author wfs
  10 + * @version 1.0
  11 + * @date 2023/6/27 10:27
  12 + */
  13 +
  14 +public class ResponseResult<T> {
  15 +
  16 + /**
  17 + * 状态码
  18 + */
  19 + @SerializedName(value = "code", alternate = "S")
  20 + private Integer code;
  21 + /**
  22 + * 提示信息,如果有错误时,前端可以获取该字段进行提示
  23 + */
  24 + @SerializedName(value = "msg", alternate = "M")
  25 + private String msg;
  26 + /**
  27 + * 查询到的结果数据,
  28 + */
  29 + @SerializedName(value = "data", alternate = "D")
  30 + private T data;
  31 +
  32 + /**
  33 + * 成功标识
  34 + */
  35 + private Boolean success;
  36 +
  37 +
  38 + public void setCode(Integer code) {
  39 + this.code = code;
  40 + }
  41 +
  42 + public void setMsg(String msg) {
  43 + this.msg = msg;
  44 + }
  45 +
  46 + public void setData(T data) {
  47 + this.data = data;
  48 + }
  49 +
  50 + public void setSuccess(Boolean success) {
  51 + this.success = success;
  52 + }
  53 +
  54 + public Integer getCode() {
  55 + return code;
  56 + }
  57 +
  58 + public String getMsg() {
  59 + return msg;
  60 + }
  61 +
  62 + public T getData() {
  63 + return data;
  64 + }
  65 +
  66 + public Boolean getSuccess() {
  67 + return success;
  68 + }
  69 +}
... ...
libs/common/src/main/java/com/prws/common/bean/ScheduleBean.java
... ... @@ -0,0 +1,52 @@
  1 +package com.prws.common.bean;
  2 +
  3 +import java.io.Serializable;
  4 +import java.util.List;
  5 +
  6 +public class ScheduleBean implements Serializable {
  7 + private String startDate;
  8 + private String endDate;
  9 + private long totalTime;
  10 + private long studyTime;
  11 + private List<Video> list;
  12 +
  13 + public void setStartDate(String startDate) {
  14 + this.startDate = startDate;
  15 + }
  16 +
  17 + public void setEndDate(String endDate) {
  18 + this.endDate = endDate;
  19 + }
  20 +
  21 + public void setTotalTime(long totalTime) {
  22 + this.totalTime = totalTime;
  23 + }
  24 +
  25 + public void setStudyTime(long studyTime) {
  26 + this.studyTime = studyTime;
  27 + }
  28 +
  29 + public void setList(List<Video> list) {
  30 + this.list = list;
  31 + }
  32 +
  33 + public String getStartDate() {
  34 + return startDate;
  35 + }
  36 +
  37 + public String getEndDate() {
  38 + return endDate;
  39 + }
  40 +
  41 + public long getTotalTime() {
  42 + return totalTime;
  43 + }
  44 +
  45 + public long getStudyTime() {
  46 + return studyTime;
  47 + }
  48 +
  49 + public List<Video> getList() {
  50 + return list;
  51 + }
  52 +}
... ...
libs/common/src/main/java/com/prws/common/bean/Subject.java
... ... @@ -0,0 +1,24 @@
  1 +package com.prws.common.bean;
  2 +
  3 +import java.io.Serializable;
  4 +
  5 +public class Subject implements Serializable {
  6 + private int id;
  7 + private String subject;
  8 +
  9 + public void setId(int id) {
  10 + this.id = id;
  11 + }
  12 +
  13 + public void setSubject(String subject) {
  14 + this.subject = subject;
  15 + }
  16 +
  17 + public int getId() {
  18 + return id;
  19 + }
  20 +
  21 + public String getSubject() {
  22 + return subject;
  23 + }
  24 +}
... ...
libs/common/src/main/java/com/prws/common/bean/Video.java
... ... @@ -0,0 +1,170 @@
  1 +package com.prws.common.bean;
  2 +
  3 +import java.io.Serializable;
  4 +import java.util.Date;
  5 +
  6 +public class Video implements Serializable {
  7 +
  8 + private Integer chapterId;
  9 + private String chapterName;
  10 + private Integer sectionId;
  11 + private String sectionName;
  12 + private Integer sectionChildId;
  13 + private String sectionChildName;
  14 + private Integer resourceId;
  15 + private String resourceName;
  16 + private String resourceUrl;
  17 + private Long resourceTime;
  18 + private String handoutName;
  19 + private String handoutUrl;
  20 + private Integer handoutId;
  21 + private Long playTime;
  22 + private String grade;
  23 + private String subject;
  24 +
  25 + private Date studyTime;
  26 +
  27 + public void setStudyTime(Date studyTime) {
  28 + this.studyTime = studyTime;
  29 + }
  30 +
  31 + public Date getStudyTime() {
  32 + return studyTime;
  33 + }
  34 +
  35 + public void setHandoutId(Integer handoutId) {
  36 + this.handoutId = handoutId;
  37 + }
  38 +
  39 + public Integer getHandoutId() {
  40 + return handoutId;
  41 + }
  42 +
  43 + public void setSubject(String subject) {
  44 + this.subject = subject;
  45 + }
  46 +
  47 + public String getSubject() {
  48 + return subject;
  49 + }
  50 +
  51 + public void setPlayTime(Long playTime) {
  52 + this.playTime = playTime;
  53 + }
  54 +
  55 + public void setGrade(String grade) {
  56 + this.grade = grade;
  57 + }
  58 +
  59 + public String getGrade() {
  60 + return grade;
  61 + }
  62 +
  63 + public Long getPlayTime() {
  64 + return playTime;
  65 + }
  66 +
  67 + public Integer getChapterId() {
  68 + return chapterId;
  69 + }
  70 +
  71 + public void setChapterId(Integer chapterId) {
  72 + this.chapterId = chapterId;
  73 + }
  74 +
  75 + public String getChapterName() {
  76 + return chapterName;
  77 + }
  78 +
  79 + public void setChapterName(String chapterName) {
  80 + this.chapterName = chapterName;
  81 + }
  82 +
  83 + public Integer getSectionId() {
  84 + return sectionId;
  85 + }
  86 +
  87 + public void setSectionId(Integer sectionId) {
  88 + this.sectionId = sectionId;
  89 + }
  90 +
  91 + public String getSectionName() {
  92 + return sectionName;
  93 + }
  94 +
  95 + public void setSectionName(String sectionName) {
  96 + this.sectionName = sectionName;
  97 + }
  98 +
  99 + public Integer getSectionChildId() {
  100 + return sectionChildId;
  101 + }
  102 +
  103 + public void setSectionChildId(Integer sectionChildId) {
  104 + this.sectionChildId = sectionChildId;
  105 + }
  106 +
  107 + public String getSectionChildName() {
  108 + return sectionChildName;
  109 + }
  110 +
  111 + public void setSectionChildName(String sectionChildName) {
  112 + this.sectionChildName = sectionChildName;
  113 + }
  114 +
  115 + public Integer getResourceId() {
  116 + return resourceId;
  117 + }
  118 +
  119 + public void setResourceId(Integer resourceId) {
  120 + this.resourceId = resourceId;
  121 + }
  122 +
  123 + public String getResourceName() {
  124 + return resourceName;
  125 + }
  126 +
  127 + public void setResourceName(String resourceName) {
  128 + this.resourceName = resourceName;
  129 + }
  130 +
  131 + public String getResourceUrl() {
  132 + return resourceUrl;
  133 + }
  134 +
  135 + public void setResourceUrl(String resourceUrl) {
  136 + this.resourceUrl = resourceUrl;
  137 + }
  138 +
  139 + public Long getResourceTime() {
  140 + return resourceTime;
  141 + }
  142 +
  143 + public void setResourceTime(Long resourceTime) {
  144 + this.resourceTime = resourceTime;
  145 + }
  146 +
  147 + public String getHandoutName() {
  148 + return handoutName;
  149 + }
  150 +
  151 + public void setHandoutName(String handoutName) {
  152 + this.handoutName = handoutName;
  153 + }
  154 +
  155 + public String getHandoutUrl() {
  156 + return handoutUrl;
  157 + }
  158 +
  159 + public void setHandoutUrl(String handoutUrl) {
  160 + this.handoutUrl = handoutUrl;
  161 + }
  162 +
  163 + public Long getRecodeTime() {
  164 + return playTime;
  165 + }
  166 +
  167 + public void setRecodeTime(Long recodeTime) {
  168 + this.playTime = recodeTime;
  169 + }
  170 +}
... ...
libs/common/src/main/java/com/prws/common/net/NetWorks.java
1 1 package com.prws.common.net;
2 2  
3 3  
4   -
5   -
6 4 import com.google.gson.Gson;
7 5 import com.prws.common.BuildConfig;
8 6 import com.prws.common.bean.BaseEntity;
  7 +import com.prws.common.bean.GradeAndSubject;
  8 +import com.prws.common.bean.ResponseResult;
  9 +import com.prws.common.bean.ScheduleBean;
  10 +import com.prws.common.utils.SharedPreferencesUtil;
9 11  
10 12 import java.io.File;
  13 +import java.util.HashMap;
11 14 import java.util.List;
12 15 import java.util.Map;
13 16  
... ... @@ -20,15 +23,18 @@ import okhttp3.MultipartBody;
20 23 import okhttp3.RequestBody;
21 24 import okhttp3.ResponseBody;
22 25 import retrofit2.Call;
  26 +import retrofit2.Callback;
23 27 import retrofit2.http.Body;
24 28 import retrofit2.http.DELETE;
25 29 import retrofit2.http.FieldMap;
26 30 import retrofit2.http.FormUrlEncoded;
27 31 import retrofit2.http.GET;
  32 +import retrofit2.http.Header;
28 33 import retrofit2.http.Headers;
29 34 import retrofit2.http.Multipart;
30 35 import retrofit2.http.POST;
31 36 import retrofit2.http.Part;
  37 +import retrofit2.http.PartMap;
32 38 import retrofit2.http.Path;
33 39 import retrofit2.http.Query;
34 40 import retrofit2.http.QueryMap;
... ... @@ -38,7 +44,7 @@ import retrofit2.http.Url;
38 44 /**
39 45 * 类名称:NetWorks
40 46 * 创建人:
41   - *
  47 + * <p>
42 48 * 类描述:网络请求的操作类
43 49 */
44 50 public class NetWorks extends RetrofitUtils {
... ... @@ -53,7 +59,7 @@ public class NetWorks extends RetrofitUtils {
53 59 protected static final String CACHE_CONTROL_NETWORK = "max-age=0";
54 60  
55 61  
56   - private interface NetService{
  62 + private interface NetService {
57 63  
58 64  
59 65 @GET("/api/v1/user/logout")
... ... @@ -61,20 +67,20 @@ public class NetWorks extends RetrofitUtils {
61 67  
62 68 @Multipart
63 69 @POST("/api/v1/user/upLoadAvatar")
64   - Observable<ResponseBody> upLoadAvatar(@Part List<MultipartBody.Part> partLis);
  70 + Observable<ResponseBody> upLoadAvatar(@Header("Authorization") String token, @Part List<MultipartBody.Part> partLis);
65 71  
66 72  
67 73 @Headers("Content-Type: application/json")
68 74 @POST("/api/v1/user/editUser")
69   - Observable<ResponseBody> editUser(@Body RequestBody body);
  75 + Observable<ResponseBody> editUser(@Header("Authorization") String token, @Body RequestBody body);
70 76  
71 77 @Headers("Content-Type: application/json")
72 78 @POST("/api/v1/user/changePassword")
73   - Observable<ResponseBody> changePassword(@Body RequestBody body);
  79 + Observable<ResponseBody> changePassword(@Header("Authorization") String token, @Body RequestBody body);
74 80  
75 81  
76   - @GET("/api/v1/user/searchById?")
77   - Observable<ResponseBody> searchById(@Query("userId") String userId);
  82 + @GET("/api/v1/user/searchById")
  83 + Observable<ResponseBody> searchById(@Header("Authorization") String token, @Query("userId") String userId);
78 84  
79 85  
80 86 @Headers("Content-Type: application/json")
... ... @@ -82,17 +88,17 @@ public class NetWorks extends RetrofitUtils {
82 88 Observable<ResponseBody> login(@Body RequestBody body);
83 89  
84 90 @GET("/api/v1/resource/listGradeAndSubject")
85   - Observable<ResponseBody> listGradeAndSubject();
  91 + Observable<ResponseResult<List<GradeAndSubject>>> listGradeAndSubject(@Header("Authorization") String token);
86 92  
87 93  
88 94 @GET("/api/v1/manager/generalQrCode")
89 95 Observable<ResponseBody> generalQrCode();
90 96  
91 97 @GET("/api/v1/parent/scanAndLogin?")
92   - Observable<ResponseBody> scanAndLogin(@Query("code") String code);
  98 + Observable<ResponseBody> scanAndLogin(@Header("Authorization") String token, @Query("code") String code);
93 99  
94 100 @GET("/api/v1/parent/getChildrenList")
95   - Observable<ResponseBody> getChildrenList();
  101 + Observable<ResponseBody> getChildrenList(@Header("Authorization") String token);
96 102  
97 103  
98 104 @Headers("Content-Type: application/json")
... ... @@ -101,84 +107,118 @@ public class NetWorks extends RetrofitUtils {
101 107  
102 108  
103 109 @GET("/api/v1/parent/listChildren")
104   - Observable<ResponseBody> listChildren();
  110 + Observable<ResponseBody> listChildren(@Header("Authorization") String token);
105 111  
106 112  
107 113 @Headers("Content-Type: application/json")
108 114 @POST("/api/v1/parent/registerStudent")
109   - Observable<ResponseBody> registerStudent(@Body RequestBody body);
  115 + Observable<ResponseBody> registerStudent(@Header("Authorization") String token, @Body RequestBody body);
110 116  
111 117 @Headers("Content-Type: application/json")
112 118 @POST("/api/v1/parent/bindTeacher")
113   - Observable<ResponseBody> bindTeacher(@Body RequestBody body);
  119 + Observable<ResponseBody> bindTeacher(@Header("Authorization") String token, @Body RequestBody body);
114 120  
  121 + @Multipart
  122 + @POST("/api/v1/user/upLoadAvatar")
  123 + Observable<ResponseResult<Map<String, String>>> uploadAvatar(@Header("Authorization") String token, @Part() MultipartBody.Part file);
115 124  
116 125  
  126 + @Multipart
  127 + @POST("/api/v1/student/editStudentAvatar")
  128 + Observable<ResponseResult<Map<String, String>>> uploadAvatar(@Header("Authorization") String token, @Part() MultipartBody.Part file, @PartMap Map<String, Object> map);
117 129  
  130 + @Headers("Content-Type: application/json")
  131 + @POST("/api/v1/parent/editChild")
  132 + Observable<ResponseResult> editStudent(@Header("Authorization") String token, @Body RequestBody body);
118 133  
  134 + @GET("/api/v1/student/getStudyPlanForThisWeek")
  135 + Observable<ResponseResult<ScheduleBean>> getWeekPlan(@Header("Authorization") String token, @Query("stuId") String stuId);
119 136 }
120 137  
121 138  
  139 + public static String getHeader() {
  140 + return (String) SharedPreferencesUtil.getData("token", "");
  141 + }
122 142  
123 143 public static void logout(Observer<ResponseBody> observer) {
124   - setSubscribe(service_url.logout(),observer);
  144 + setSubscribe(service_url.logout(), observer);
125 145 }
126 146  
  147 + public static void editStudent(RequestBody body, Observer<ResponseResult> observable) {
  148 + setSubscribe(service_url.editStudent(getHeader(), body), observable);
  149 + }
127 150  
  151 + public static void getWeekPlan(String id, Observer<ResponseResult<ScheduleBean>> observer) {
  152 + setSubscribe(service_url.getWeekPlan(getHeader(), id), observer);
  153 + }
128 154  
129   - public static void upLoadAvatar(List<MultipartBody.Part> partLis,Observer<ResponseBody> observer) {
130   - setSubscribe(service_url.upLoadAvatar(partLis),observer);
  155 + public static void uploadStudentAvatar(File file, String stuId, Observer<ResponseResult<Map<String, String>>> observer) {
  156 + RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
  157 + MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
  158 + Map<String, Object> map = new HashMap<>();
  159 + map.put("stuId", stuId);
  160 + setSubscribe(service_url.uploadAvatar(getHeader(), part, map), observer);
131 161 }
132 162  
  163 + public static void uploadAvatar(File file, Observer<ResponseResult<Map<String, String>>> observer) {
  164 + RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
  165 + MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
  166 + setSubscribe(service_url.uploadAvatar(getHeader(), part), observer);
  167 + }
133 168  
134   - public static void editUser(RequestBody body,Observer<ResponseBody> observer) {
135   - setSubscribe(service_url.editUser(body),observer);
  169 + public static void upLoadAvatar(List<MultipartBody.Part> partLis, Observer<ResponseBody> observer) {
  170 + setSubscribe(service_url.upLoadAvatar(getHeader(), partLis), observer);
136 171 }
137 172  
138   - public static void changePassword(RequestBody body,Observer<ResponseBody> observer) {
139   - setSubscribe(service_url.changePassword(body),observer);
  173 +
  174 + public static void editUser(RequestBody body, Observer<ResponseBody> observer) {
  175 + setSubscribe(service_url.editUser(getHeader(), body), observer);
140 176 }
141 177  
  178 + public static void changePassword(RequestBody body, Observer<ResponseBody> observer) {
  179 + setSubscribe(service_url.changePassword(getHeader(), body), observer);
  180 + }
142 181  
143   - public static void searchById(String userId,Observer<ResponseBody> observer) {
144   - setSubscribe(service_url.searchById(userId),observer);
  182 +
  183 + public static void searchById(String userId, Observer<ResponseBody> observer) {
  184 + setSubscribe(service_url.searchById(getHeader(), userId), observer);
145 185 }
146 186  
147 187  
148   - public static void login(RequestBody body,Observer<ResponseBody> observer) {
149   - setSubscribe(service_url.login(body),observer);
  188 + public static void login(RequestBody body, Observer<ResponseBody> observer) {
  189 + setSubscribe(service_url.login(body), observer);
150 190 }
151 191  
152   - public static void listGradeAndSubject(Observer<ResponseBody> observer) {
153   - setSubscribe(service_url.listGradeAndSubject(),observer);
  192 + public static void listGradeAndSubject(Observer<ResponseResult<List<GradeAndSubject>>> observer) {
  193 + setSubscribe(service_url.listGradeAndSubject(getHeader()), observer);
154 194 }
155 195  
156 196  
157   - public static void scanAndLogin(String code,Observer<ResponseBody> observer) {
158   - setSubscribe(service_url.scanAndLogin(code),observer);
  197 + public static void scanAndLogin(String code, Observer<ResponseBody> observer) {
  198 + setSubscribe(service_url.scanAndLogin(getHeader(), code), observer);
159 199 }
160 200  
161 201 public static void getChildrenList(Observer<ResponseBody> observer) {
162   - setSubscribe(service_url.getChildrenList(),observer);
  202 + setSubscribe(service_url.getChildrenList(getHeader()), observer);
163 203 }
164 204  
165 205  
166   - public static void registerParent(RequestBody body,Observer<ResponseBody> observer) {
167   - setSubscribe(service_url.registerParent(body),observer);
  206 + public static void registerParent(RequestBody body, Observer<ResponseBody> observer) {
  207 + setSubscribe(service_url.registerParent(body), observer);
168 208 }
169 209  
170 210  
171 211 public static void listChildren(Observer<ResponseBody> observer) {
172   - setSubscribe(service_url.listChildren(),observer);
  212 + setSubscribe(service_url.listChildren(getHeader()), observer);
173 213 }
174 214  
175 215  
176   - public static void registerStudent(RequestBody body,Observer<ResponseBody> observer) {
177   - setSubscribe(service_url.registerStudent(body),observer);
  216 + public static void registerStudent(RequestBody body, Observer<ResponseBody> observer) {
  217 + setSubscribe(service_url.registerStudent(getHeader(), body), observer);
178 218 }
179 219  
180   - public static void bindTeacher(RequestBody body,Observer<ResponseBody> observer) {
181   - setSubscribe(service_url.bindTeacher(body),observer);
  220 + public static void bindTeacher(RequestBody body, Observer<ResponseBody> observer) {
  221 + setSubscribe(service_url.bindTeacher(getHeader(), body), observer);
182 222 }
183 223  
184 224  
... ... @@ -186,13 +226,14 @@ public class NetWorks extends RetrofitUtils {
186 226 return RequestBody.create(MediaType.parse("text/plain"), new Gson().toJson(map));
187 227 }
188 228  
189   - public static RequestBody getArrayRequestBody(List list){
  229 + public static RequestBody getArrayRequestBody(List list) {
190 230 return RequestBody.create(MediaType.parse("text/plain"), new Gson().toJson(list));
191 231 }
192 232  
193 233 public static RequestBody getFileRequestBody(File file) {
194 234 return RequestBody.create(MediaType.parse("application/octet-stream"), file);
195 235 }
  236 +
196 237 public static RequestBody getFileRequestBody(byte[] bytes) {
197 238 return RequestBody.create(MediaType.parse("multipart/form-data"), bytes);
198 239 }
... ... @@ -200,6 +241,7 @@ public class NetWorks extends RetrofitUtils {
200 241 public static RequestBody getObjectRequestBody(Object obj) {
201 242 return RequestBody.create(MediaType.parse("text/plain"), new Gson().toJson(obj));
202 243 }
  244 +
203 245 public static RequestBody getStringRequestBody(String str) {
204 246 return RequestBody.create(MediaType.parse("text/plain"), str);
205 247 }
... ...
libs/common/src/main/java/com/prws/common/utils/GlideHelper.java
... ... @@ -27,11 +27,8 @@ public class GlideHelper {
27 27 .load(url)
28 28 // .format(DecodeFormat.PREFER_RGB_565)
29 29 // 取消动画,防止第一次加载不出来
30   - .dontAnimate()
31 30 //加载缩略图
32 31 .thumbnail(0.3f)
33   - .skipMemoryCache(true)
34   - .diskCacheStrategy(DiskCacheStrategy.ALL)
35 32 .into(imageView);
36 33 }
37 34 }
... ... @@ -49,11 +46,8 @@ public class GlideHelper {
49 46 .load(resourceId)
50 47 // .format(DecodeFormat.PREFER_RGB_565)
51 48 // 取消动画,防止第一次加载不出来
52   - .dontAnimate()
53 49 //加载缩略图
54 50 .thumbnail(0.3f)
55   - .skipMemoryCache(true)
56   - .diskCacheStrategy(DiskCacheStrategy.ALL)
57 51 .into(imageView);
58 52 }
59 53 }
... ... @@ -71,14 +65,10 @@ public class GlideHelper {
71 65 if (mContext != null) {
72 66 Glide.with(mContext.getApplicationContext())
73 67 .load(url)
74   - .override(w, h)
75 68 // .format(DecodeFormat.PREFER_RGB_565)
76 69 // 取消动画,防止第一次加载不出来
77   - .dontAnimate()
78 70 //加载缩略图
79 71 .thumbnail(0.3f)
80   - .skipMemoryCache(true)
81   - .diskCacheStrategy(DiskCacheStrategy.ALL)
82 72 .into(imageView);
83 73 }
84 74 }
... ... @@ -95,11 +85,8 @@ public class GlideHelper {
95 85 Glide.with(mContext.getApplicationContext())
96 86 .load(file)
97 87 // 取消动画,防止第一次加载不出来
98   - .dontAnimate()
99 88 //加载缩略图
100 89 .thumbnail(0.3f)
101   - .skipMemoryCache(true)
102   - .diskCacheStrategy(DiskCacheStrategy.ALL)
103 90 .into(imageView);
104 91 }
105 92 }
... ...
libs/common/src/main/java/com/prws/common/utils/ScreenUtils.java
... ... @@ -2,6 +2,7 @@ package com.prws.common.utils;
2 2  
3 3 import android.app.Activity;
4 4 import android.app.Dialog;
  5 +import android.content.Context;
5 6 import android.view.View;
6 7 import android.view.Window;
7 8 import android.view.WindowManager;
... ... @@ -117,4 +118,9 @@ public class ScreenUtils {
117 118 // | SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED;
118 119 window.getDecorView().setSystemUiVisibility(uiOptions);
119 120 }
  121 +
  122 + public static int dpToPx(Context context, int dpValue) {
  123 + float scale = context.getResources().getDisplayMetrics().density;
  124 + return Math.round(dpValue * scale);
  125 + }
120 126 }
... ...
libs/common/src/main/java/com/prws/common/utils/SharedPreferencesUtil.java
... ... @@ -262,4 +262,11 @@ public class SharedPreferencesUtil {
262 262  
263 263 }
264 264  
  265 + public static void clear(Context context) {
  266 + SharedPreferences preferences = context.getSharedPreferences("config", Context.MODE_PRIVATE);
  267 + SharedPreferences.Editor editor = preferences.edit();
  268 + editor.clear();
  269 + editor.commit();
  270 + }
  271 +
265 272 }
... ...
libs/common/src/main/res/drawable/shape_bottom_sheet_dialog.xml
... ... @@ -0,0 +1,9 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:shape="rectangle">
  4 +
  5 + <corners android:topLeftRadius="20dp"
  6 + android:topRightRadius="20dp"/>
  7 + <solid android:color="@color/white"/>
  8 +
  9 +</shape>
0 10 \ No newline at end of file
... ...