From cce03a09b4d68a7d273fc31882001cfbac8e126e Mon Sep 17 00:00:00 2001 From: fanhuitong <981964879@qq.com> Date: Wed, 14 Sep 2022 20:35:53 +0800 Subject: [PATCH] =?UTF-8?q?version:3.1=20fix:=20update:=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=E4=B8=BB=E9=A1=B5=E6=A0=B7=E5=BC=8F=EF=BC=8C=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E9=97=B9=E9=92=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../uiui/aios/activity/main/MainActivity.java | 2 +- .../aios/adapter/NotificationAdapter.java | 27 ++++- .../java/com/uiui/aios/alarm/AlarmUtils.java | 111 ++++++++++++++---- .../uiui/aios/fragment/CustomFragment.java | 57 +++++++-- .../aios/network/NetInterfaceManager.java | 18 +-- .../aios/service/main/MainSPresenter.java | 39 +++--- .../uiui/aios/service/main/MainService.java | 35 +++++- .../drawable-hdpi/home_clinical_detection.png | Bin 6961 -> 4950 bytes .../main/res/layout-land/fragment_custom.xml | 55 ++++----- .../main/res/layout-port/fragment_custom.xml | 2 +- app/src/main/res/layout/item_actions.xml | 5 +- app/src/main/res/layout/item_notification.xml | 18 ++- 13 files changed, 262 insertions(+), 111 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c0c1be2..f402b98 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.uiui.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 21 - versionName "3.0" + versionCode 22 + versionName "3.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java b/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java index 88d9729..fac2931 100644 --- a/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java @@ -89,7 +89,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { mMainPresenter.setLifecycle(lifecycleSubject); if (BuildConfig.DEBUG) { - SystemClock.setCurrentTimeMillis(1662123600000L);//09-02 +// SystemClock.setCurrentTimeMillis(1662123600000L);//09-02 // SystemClock.setCurrentTimeMillis(1662210000000L);//09-03 } diff --git a/app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java b/app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java index 237dc2d..c13e947 100644 --- a/app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java +++ b/app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java @@ -1,5 +1,7 @@ package com.uiui.aios.adapter; +import android.content.Context; +import android.content.Intent; import android.media.AudioAttributes; import android.media.MediaPlayer; import android.text.TextUtils; @@ -24,25 +26,44 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class NotificationAdapter extends RecyclerView.Adapter { + private Context mContext; private List dataList; + private OnClickListener mOnClickListener; public void setDataList(List data) { this.dataList = data; notifyDataSetChanged(); } + public void setOnClickListener(OnClickListener listener) { + this.mOnClickListener = listener; + } + + public interface OnClickListener { + void onClick(); + } + @NonNull @Override public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new Holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notification, parent, false)); + mContext = parent.getContext(); + return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_notification, parent, false)); } @Override public void onBindViewHolder(@NonNull Holder holder, int position) { AlarmClockData alarmClockData = dataList.get(position); holder.tv_title.setText("提醒事件:" + alarmClockData.getTitle()); - holder.tv_time.setText("提醒时间:" + alarmClockData.getTime()); + holder.tv_time.setText(alarmClockData.getTime()); String voice = alarmClockData.getVoice(); + holder.root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (mOnClickListener != null) { + mOnClickListener.onClick(); + } + } + }); if (TextUtils.isEmpty(voice)) { holder.cl_voice.setVisibility(View.GONE); } else { @@ -104,9 +125,11 @@ public class NotificationAdapter extends RecyclerView.Adapter 0; } + public void deleteAllAlarmClock() { + HashSet pendingIntents = getOldPendingIntents(); + Iterator pendingIntentIterator = pendingIntents.iterator(); + while (pendingIntentIterator.hasNext()) { + PendingIntent pendingIntent = pendingIntentIterator.next(); + alarmManager.cancel(pendingIntent); + pendingIntentIterator.remove(); + } + List alarmClockData = getAllAlarms(); + for (AlarmClockData data : alarmClockData) { + deleteAlarmClock(data.getId()); + } + } /** * 获取所有Alarm @@ -258,9 +272,15 @@ public class AlarmUtils { if (pendingIntents == null) { pendingIntents = getOldPendingIntents(); } - for (PendingIntent pendingIntent : pendingIntents) { + Iterator pendingIntentIterator = pendingIntents.iterator(); + while (pendingIntentIterator.hasNext()) { + PendingIntent pendingIntent = pendingIntentIterator.next(); alarmManager.cancel(pendingIntent); + pendingIntentIterator.remove(); } +// for (PendingIntent pendingIntent : pendingIntents) { +// +// } List newData = mergeData(data); for (AlarmClockData clockData : newData) { setAlarm(clockData); @@ -276,8 +296,10 @@ public class AlarmUtils { */ private List mergeData(List alarmClockDataList) { HashMap alarmClockDataMap = new HashMap<>(); - for (AlarmClockData alarmClockData : alarmClockDataList) { - alarmClockDataMap.put(alarmClockData.getId(), alarmClockData); + if (alarmClockDataList != null) { + for (AlarmClockData alarmClockData : alarmClockDataList) { + alarmClockDataMap.put(alarmClockData.getId(), alarmClockData); + } } HashMap oldData = getOldData(); List deleteData = new ArrayList<>(); @@ -291,6 +313,9 @@ public class AlarmUtils { } List newData = new ArrayList<>(); + if (alarmClockDataList == null) { + return newData; + } for (AlarmClockData alarm : alarmClockDataList) { AlarmClockData oldAlarm = oldData.get(alarm.getId()); if (oldAlarm == null) { @@ -403,12 +428,14 @@ public class AlarmUtils { int hour = Integer.parseInt(timeSplit[0]); int minute = Integer.parseInt(timeSplit[1]); Calendar c = Calendar.getInstance(); - c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), - c.get(Calendar.DAY_OF_MONTH), hour, minute, 0); + int year = c.get(Calendar.YEAR); + int month = c.get(Calendar.MONTH); + int day = c.get(Calendar.DAY_OF_MONTH); + c.set(year, month, day, hour, minute, 0); long mTimeInfo = c.getTimeInMillis(); Log.e(TAG, "getTimestamp: " + mTimeInfo); - long actualTime = mTimeInfo > System.currentTimeMillis() ? mTimeInfo : mTimeInfo + ONE_DAY_TIME; - return actualTime; +// long actualTime = mTimeInfo > System.currentTimeMillis() ? mTimeInfo : mTimeInfo + ONE_DAY_TIME; + return mTimeInfo; } else { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try { @@ -434,13 +461,13 @@ public class AlarmUtils { } /*一次性*/ - private static final int ONCE = 1; + public static final int ONCE = 1; /*每天*/ - private static final int LOOP = 2; + public static final int LOOP = 2; /*周一到周五*/ - private static final int WORKING_DAY = 3; + public static final int WORKING_DAY = 3; /*休息日*/ - private static final int OFF_DAY = 4; + public static final int OFF_DAY = 4; /** * 设置闹钟 @@ -475,13 +502,13 @@ public class AlarmUtils { } break; case LOOP: - setDayLoopAlarm(MainService.ALARMWAKEUP, title, id, timeStamp); + setDayLoopAlarm(MainService.ALARMWAKEUP, title, id, timeString); break; case WORKING_DAY: - + setWorkDayAlarm(MainService.ALARMWAKEUP, title, id, timeString); break; case OFF_DAY: - + setOffDayAlarm(MainService.ALARMWAKEUP, title, id, timeString); break; default: } @@ -498,17 +525,28 @@ public class AlarmUtils { intent.putExtra("id", requestCode); PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT); pendingIntents.add(startPendingIntent); - alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent); + alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent); Log.e(TAG, "setOnceAlarm: " + "id: " + requestCode + " title: " + extra + " timeString: " + timestamp); } /** * @param action * @param requestCode - * @param timestamp 设置循环周期为一天的闹钟 + * @param timeString 设置循环周期为一天的闹钟 */ - public void setDayLoopAlarm(String action, String extra, int requestCode, long timestamp) { - setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_DAY, timestamp); + public void setDayLoopAlarm(String action, String extra, int requestCode, String timeString) { + long timestamp = getTimestamp(timeString); + if (System.currentTimeMillis() > timestamp) { + timestamp += AlarmManager.INTERVAL_DAY; + } + Intent intent = new Intent(action); + intent.putExtra("title", extra); + intent.putExtra("id", requestCode); + PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT); + pendingIntents.add(startPendingIntent); + alarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent); + Log.e(TAG, "setDayLoopAlarm: " + "title: " + extra + " timeString: " + timestamp); +// setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_DAY, timestamp); } /** @@ -536,24 +574,49 @@ public class AlarmUtils { Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp); } - public void setWorkDayAlarm(String action, String extra, int requestCode, long intervalMillis, long timestamp) { + public void setWorkDayAlarm(String action, String extra, int requestCode, String timeString) { + long timestamp = getTimestamp(timeString); + Calendar calendar = Calendar.getInstance(); + int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; + switch (day_of_week) { + case 6: + case 7: + timestamp += (8 - day_of_week) * AlarmManager.INTERVAL_DAY; + break; + default: + } Intent intent = new Intent(action); intent.putExtra("title", extra); intent.putExtra("id", requestCode); PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT); pendingIntents.add(startPendingIntent); - alarmManager.setWindow(AlarmManager.RTC_WAKEUP, timestamp, intervalMillis, startPendingIntent); - Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp); + alarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent); + Log.e(TAG, "setWorkDayAlarm: " + "title: " + extra + " timeString: " + timestamp); } - public void setOffDayAlarm(String action, String extra, int requestCode, long intervalMillis, long timestamp) { + public void setOffDayAlarm(String action, String extra, int requestCode, String timeString) { + long timestamp = getTimestamp(timeString); + Calendar calendar = Calendar.getInstance(); + int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; + switch (day_of_week) { + case 6: + if (System.currentTimeMillis() > timestamp) { + timestamp += AlarmManager.INTERVAL_DAY; + } + break; + case 7: + break; + default: + timestamp += (6 - day_of_week) * AlarmManager.INTERVAL_DAY; + break; + } Intent intent = new Intent(action); intent.putExtra("title", extra); intent.putExtra("id", requestCode); PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT); pendingIntents.add(startPendingIntent); - alarmManager.setWindow(AlarmManager.RTC_WAKEUP, timestamp, intervalMillis, startPendingIntent); - Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp); + alarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent); + Log.e(TAG, "setOffDayAlarm: " + "title: " + extra + " timeString: " + timestamp); } diff --git a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java b/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java index 3a2bdaf..c493612 100644 --- a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java +++ b/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java @@ -311,6 +311,12 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt } }); notificationAdapter = new NotificationAdapter(); + notificationAdapter.setOnClickListener(new NotificationAdapter.OnClickListener() { + @Override + public void onClick() { + getAlarm(); + } + }); rv_noti.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -416,10 +422,21 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt getAlarmClock(); } + @Override + public void onStart() { + super.onStart(); + } + + @Override + public void onPause() { + super.onPause(); + } + @Override public void onResume() { super.onResume(); // setAlarm(); + getAlarmClock(); setSosNumber(); } @@ -506,6 +523,8 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt @Override public void setAlarmClockEmpty() { showNoData("温馨提示", "当前没有数据"); + rv_noti.setVisibility(View.GONE); + iv_note_nodata.setVisibility(View.VISIBLE); } @Override @@ -516,17 +535,33 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt } private void getAlarmClock() { - AlarmClockData alarmClockData = AlarmUtils.getInstance().getRecentAlarmClock(); - List data = new ArrayList<>(); - if (alarmClockData != null) { - data.add(alarmClockData); - notificationAdapter.setDataList(data); - rv_noti.setVisibility(View.VISIBLE); - iv_note_nodata.setVisibility(View.GONE); - } else { - rv_noti.setVisibility(View.GONE); - iv_note_nodata.setVisibility(View.VISIBLE); - } + NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() { + @Override + public void setAlarmClock(List alarmClockList) { + AlarmClockData alarmClockData = AlarmUtils.getInstance().getRecentAlarmClock(); + List data = new ArrayList<>(); + if (alarmClockData != null) { + data.add(alarmClockData); + notificationAdapter.setDataList(data); + rv_noti.setVisibility(View.VISIBLE); + iv_note_nodata.setVisibility(View.GONE); + } else { + rv_noti.setVisibility(View.GONE); + iv_note_nodata.setVisibility(View.VISIBLE); + } + } + + @Override + public void setAlarmClockEmpty() { + rv_noti.setVisibility(View.GONE); + iv_note_nodata.setVisibility(View.VISIBLE); + } + + @Override + public void onError() { + + } + }); } private void showNoData(String title, String msg) { diff --git a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java index 95886b7..f057f51 100644 --- a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java @@ -646,15 +646,15 @@ public class NetInterfaceManager { } public void getAlarmClock(boolean refresh, BehaviorSubject lifecycle, AlarmClockCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ALARM_CLOCK, connectMode)) { - getAlarmClock(lifecycle, callback); - } else { - getAlarmClockCache(lifecycle, callback); - } +// ConnectMode connectMode = ConnectMode.DEFAULT; +// if (refresh) { +// connectMode = ConnectMode.DEFAULT; +// } +// if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ALARM_CLOCK, connectMode)) { + getAlarmClock(lifecycle, callback); +// } else { +// getAlarmClockCache(lifecycle, callback); +// } } public void getAlarmClockCache(BehaviorSubject lifecycle, AlarmClockCallback callback) { diff --git a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java b/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java index 7dff0fa..669267d 100644 --- a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java +++ b/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java @@ -57,34 +57,23 @@ public class MainSPresenter implements MainSContact.Presenter { @Override public void getAlarmClock() { - NetInterfaceManager.getInstance().getAlarmClockObservable() - .subscribe(new Observer>>() { - @Override - public void onSubscribe(Disposable d) { - Log.e("getAlarmClock", "onSubscribe: "); - } + NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { + @Override + public void setAlarmClock(List alarmClockList) { + AlarmUtils.getInstance().setAlarmClockData(alarmClockList); + } - @Override - public void onNext(BaseResponse> listBaseResponse) { - Log.e("getAlarmClock", "onNext: "+listBaseResponse); - if (listBaseResponse.code == 200) { - List data = listBaseResponse.data; - AlarmUtils.getInstance().setAlarmClockData(data); - } else { + @Override + public void setAlarmClockEmpty() { + AlarmUtils.getInstance().deleteAllAlarmClock(); + AlarmUtils.getInstance().setAlarmClockData(null); + } - } - } + @Override + public void onError() { - @Override - public void onError(Throwable e) { - Log.e("getAlarmClock", "onError: " + e.getMessage()); - onComplete(); - } + } + }); - @Override - public void onComplete() { - Log.e("getAlarmClock", "onComplete: "); - } - }); } } diff --git a/app/src/main/java/com/uiui/aios/service/main/MainService.java b/app/src/main/java/com/uiui/aios/service/main/MainService.java index 57215c4..d00b6ae 100644 --- a/app/src/main/java/com/uiui/aios/service/main/MainService.java +++ b/app/src/main/java/com/uiui/aios/service/main/MainService.java @@ -17,6 +17,7 @@ import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.NetworkUtils; import com.uiui.aios.BuildConfig; import com.uiui.aios.activity.NoticeActivity; +import com.uiui.aios.alarm.AlarmUtils; import com.uiui.aios.base.BaseService; import com.uiui.aios.bean.AlarmClockData; import com.uiui.aios.bean.BaseResponse; @@ -30,6 +31,8 @@ import com.uiui.aios.utils.Utils; import java.io.File; import java.io.FileNotFoundException; +import java.util.Calendar; +import java.util.HashMap; import java.util.List; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; @@ -131,12 +134,14 @@ public class MainService extends BaseService implements MainSContact.MainSView, private class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + Log.e(TAG, "onReceive: " + System.currentTimeMillis()); String action = intent.getAction(); if (TextUtils.isEmpty(action)) return; Log.e(TAG, "onReceive: " + action); String title = intent.getStringExtra("title"); int code = intent.getIntExtra("id", -1); Log.e(TAG, "onReceive: title = " + title); + setNextAlarm(code); if (ALARMWAKEUP.equals(action)) { Intent noticeIntent = new Intent(); noticeIntent.putExtra("id", code); @@ -147,6 +152,32 @@ public class MainService extends BaseService implements MainSContact.MainSView, } } + public void setNextAlarm(int code) { + HashMap clockDataHashMap = AlarmUtils.getInstance().getOldData(); + AlarmClockData alarmClockData = clockDataHashMap.get(code); + Log.e(TAG, "setNextAlarm: " + alarmClockData); + if (alarmClockData != null) { + Calendar calendar = Calendar.getInstance(); + int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; + Log.e(TAG, "setNextAlarm: " + day_of_week); + switch (alarmClockData.getType()) { + case AlarmUtils.ONCE: + break; + case AlarmUtils.LOOP: + AlarmUtils.getInstance().setDayLoopAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime()); + break; + case AlarmUtils.WORKING_DAY: + if (day_of_week < 5 || day_of_week == 7) { + AlarmUtils.getInstance().setDayLoopAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime()); + } + break; + case AlarmUtils.OFF_DAY: + AlarmUtils.getInstance().setOffDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime()); + default: + } + } + } + //监听时间和日期变化 public void registerTimeReceiver() { mTimeChangedReceiver = new TimeChangedReceiver(); @@ -173,7 +204,7 @@ public class MainService extends BaseService implements MainSContact.MainSView, Log.e(TAG, "TimeChangedReceiver:" + "timezone changed"); } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) { Log.e(TAG, "TimeChangedReceiver:" + "time tick"); - isScreenshot(); +// isScreenshot(); } } } @@ -189,7 +220,7 @@ public class MainService extends BaseService implements MainSContact.MainSView, String topPackageName = ForegroundAppUtil.getForegroundPackageName(MainService.this); Log.e(TAG, "isScreenshot: " + topPackageName); String pkg = AppUsedTimeUtils.getInstance().getAppPackageName(); - if (TextUtils.isEmpty(pkg)|| BuildConfig.APPLICATION_ID.equals(pkg)) { + if (TextUtils.isEmpty(pkg) || BuildConfig.APPLICATION_ID.equals(pkg)) { return; } diff --git a/app/src/main/res/drawable-hdpi/home_clinical_detection.png b/app/src/main/res/drawable-hdpi/home_clinical_detection.png index bffb8ee428b08c45bbd3d02dfbfe745353349ae8..3e60edefd78ac5a156bd911ef068791e6441840e 100644 GIT binary patch delta 4339 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 V&{^L(eEP8fD9WnAs-@os{|_BH*5&{J diff --git a/app/src/main/res/layout-land/fragment_custom.xml b/app/src/main/res/layout-land/fragment_custom.xml index 8fe7acf..48a5a07 100644 --- a/app/src/main/res/layout-land/fragment_custom.xml +++ b/app/src/main/res/layout-land/fragment_custom.xml @@ -79,7 +79,7 @@ + android:background="@drawable/custom_background" + tools:ignore="NestedWeights"> - --> - + android:background="@drawable/custom_background"> + + @@ -48,8 +48,9 @@ android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/dp_2" android:textColor="@color/white" - android:textSize="@dimen/sp_15" + android:textSize="@dimen/sp_12" app:layout_constraintEnd_toEndOf="@+id/iv" app:layout_constraintStart_toStartOf="@+id/iv" app:layout_constraintTop_toBottomOf="@+id/iv" /> diff --git a/app/src/main/res/layout/item_notification.xml b/app/src/main/res/layout/item_notification.xml index c30236e..d262ad6 100644 --- a/app/src/main/res/layout/item_notification.xml +++ b/app/src/main/res/layout/item_notification.xml @@ -6,10 +6,10 @@ android:layout_height="wrap_content"> @@ -29,11 +30,17 @@ android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dp" + android:background="@drawable/tv_background" + android:maxLines="1" + android:singleLine="true" android:text="提醒时间" - android:textColor="@color/black" - app:layout_constraintStart_toStartOf="@+id/tv_title" - app:layout_constraintTop_toBottomOf="@+id/tv_title" /> + android:layout_margin="@dimen/dp_4" + android:textColor="@color/white" + android:textSize="@dimen/sp_14" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" />