From 8bf69e3fe8774b0228aa8667b03be0f7dabaa4f6 Mon Sep 17 00:00:00 2001
From: nilupeng <qingingrunt2010@qq.com>
Date: Sat, 29 Jan 2022 03:57:55 +0000
Subject: [PATCH] 弹框 部分框架代码优化
---
app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java | 64 +++++++
app/src/main/java/com/runt/open/mvvm/ui/main/notifications/NotificationsFragment.java | 11
app/src/main/res/color/text_normal.xml | 12 +
app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java | 11 +
app/src/main/java/com/runt/open/mvvm/MainActivity.java | 50 ++++-
app/src/main/java/com/runt/open/mvvm/base/fragments/BaseLoadPageFragment.java | 1
app/src/main/java/com/runt/open/mvvm/data/PhoneDevice.java | 98 ++++++++++
app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java | 28 +++
app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java | 42 +++-
app/src/main/java/com/runt/open/mvvm/data/LoadingCmd.java | 21 ++
app/src/main/res/layout/layout_dialog.xml | 78 ++++++++
app/src/main/res/drawable-v21/edit_dialog_bg_white_border.xml | 28 +++
app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeFragment.java | 23 -
app/src/main/res/layout/activity_main.xml | 12 +
app/src/main/java/com/runt/open/mvvm/listener/ResPonse.java | 14 +
app/build.gradle | 2
app/src/main/java/com/runt/open/mvvm/ui/main/dashboard/DashboardFragment.java | 11
17 files changed, 452 insertions(+), 54 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 3633f0b..f46abb5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -74,7 +74,7 @@
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0' //RXjava和retrofit结合
- implementation 'com.permissionx.guolindev:permissionx:1.2.2' //权限依赖让你推广你就发群里?没有别的群了?
+ implementation 'com.guolindev.permissionx:permissionx:1.6.0' //权限依赖
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.pangle.cn:ads-sdk-pro:4.0.2.2'//字节跳动 穿山甲广告
diff --git a/app/src/main/java/com/runt/open/mvvm/MainActivity.java b/app/src/main/java/com/runt/open/mvvm/MainActivity.java
index b180224..6871cf3 100644
--- a/app/src/main/java/com/runt/open/mvvm/MainActivity.java
+++ b/app/src/main/java/com/runt/open/mvvm/MainActivity.java
@@ -1,30 +1,52 @@
package com.runt.open.mvvm;
-import android.os.Bundle;
+import android.Manifest;
-import com.google.android.material.bottomnavigation.BottomNavigationView;
-
-import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
-import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
+import com.permissionx.guolindev.PermissionX;
+import com.runt.open.mvvm.base.activities.BaseActivity;
+import com.runt.open.mvvm.data.PhoneDevice;
import com.runt.open.mvvm.databinding.ActivityMainBinding;
+import com.runt.open.mvvm.listener.ResPonse;
+import com.runt.open.mvvm.ui.main.MainViewModel;
-public class MainActivity extends AppCompatActivity {
-
- private ActivityMainBinding binding;
+public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> {
@Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- binding = ActivityMainBinding.inflate(getLayoutInflater());
- setContentView(binding.getRoot());
-
+ public void initViews() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupWithNavController(binding.navView, navController);
+ checkPermission();
}
+ private void showPermissionDialog(){
+
+ showDialog("警告", "软件需要权限才能运行", "申请权限", "退出", new ResPonse() {
+ @Override
+ public void doSuccess(Object obj) {
+ checkPermission();
+ }
+
+ @Override
+ public void doError(Object obj) {
+ finish();
+ System.exit(0);
+ }
+ });
+ }
+ private void checkPermission(){
+ PermissionX.init(MainActivity.this)
+ .permissions(Manifest.permission.READ_PHONE_STATE)
+ .request((allGranted, grantedList, deniedList) -> {
+ if(allGranted){
+ PhoneDevice.setDevice(mContext);
+ }else{
+ showPermissionDialog();
+ }
+
+ });
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java b/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
index ffe24f5..5d775df 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
@@ -13,6 +13,7 @@
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
+import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.ColorRes;
@@ -26,6 +27,7 @@
import com.runt.open.mvvm.R;
import com.runt.open.mvvm.base.model.BaseViewModel;
import com.runt.open.mvvm.base.model.ViewModelFactory;
+import com.runt.open.mvvm.listener.ResPonse;
import java.io.File;
import java.lang.reflect.Method;
@@ -113,6 +115,66 @@
}
+ AlertDialog dialog;
+ /**
+ * 显示弹框
+ * @param title
+ * @param msg
+ * @param btnOk
+ * @param btnCancel
+ * @param resPonse
+ */
+ public void showDialog(String title, String msg, String btnOk,String btnCancel,final ResPonse resPonse){
+ showDialog(title,msg,null,btnOk,btnCancel,resPonse,false);
+ }
+
+ private void showDialog(String title, String msg, String hint,String btnOk,String btnCancel,final ResPonse resPonse,boolean isEdit){
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.TransparentDialog);
+ builder.setCancelable(false);
+ final View view = LayoutInflater.from(this).inflate(R.layout.layout_dialog,null);
+ TextView titleView = view.findViewById(R.id.txt_title);
+ TextView cancelView = view.findViewById(R.id.txt_cancel);
+ final TextView textView = view.findViewById(R.id.msg);
+ if(isEdit){
+ textView.setEnabled(true);
+ }else{
+ textView.setBackground(null);
+ }
+ cancelView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ if(resPonse !=null){
+ resPonse.doError(null);
+ }
+ }
+ });
+ cancelView.setText(btnCancel);
+ TextView confirmView = view.findViewById(R.id.txt_confirm);
+ confirmView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ if(resPonse !=null){
+ resPonse.doSuccess(textView.getText().toString());
+ }
+ }
+ });
+ confirmView.setText(btnOk);
+ confirmView.requestFocus();
+ if(hint != null){
+ textView.setHint(hint);
+ }
+ if(msg != null){
+ textView.setText(msg);
+ }
+ titleView.setText(title);
+ builder.setView(view);
+ dialog = builder.create();
+ dialog.show();
+ }
+
AlertDialog loadingDialog;
/**
* 显示加载弹框
@@ -146,6 +208,8 @@
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+
+ setStatusBarTextColor(isBlack);
}
/**
diff --git a/app/src/main/java/com/runt/open/mvvm/base/fragments/BaseLoadPageFragment.java b/app/src/main/java/com/runt/open/mvvm/base/fragments/BaseLoadPageFragment.java
index 4d691b0..71cb4f2 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/fragments/BaseLoadPageFragment.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/fragments/BaseLoadPageFragment.java
@@ -99,6 +99,7 @@
smartRefresh.finishLoadMore();
}
}
+
public A getAdapter() {
return adapter;
}
diff --git a/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java b/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java
index a50ff27..3c172a9 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java
@@ -1,9 +1,11 @@
package com.runt.open.mvvm.base.model;
+import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
-import com.runt.open.mvvm.retrofit.observable.HttpObserver;
+import com.runt.open.mvvm.data.LoadingCmd;
import com.runt.open.mvvm.retrofit.AndroidScheduler;
+import com.runt.open.mvvm.retrofit.observable.HttpObserver;
import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;
@@ -13,6 +15,11 @@
*/
public class BaseViewModel extends ViewModel {
+ MutableLiveData<LoadingCmd> loadLive = new MutableLiveData<>();
+
+ public MutableLiveData<LoadingCmd> getLoadLive() {
+ return loadLive;
+ }
/**
* 网络请求观察
@@ -27,5 +34,24 @@
}
+ /**
+ * 网络请求观察
+ * @param observable
+ * @param <T>
+ * @return
+ */
+ public <T> void httpObserverOnLoading(Observable<T> observable, HttpObserver observer){
+ observable.subscribeOn(Schedulers.io())//指定网络请求在io后台线程中进行
+ .doOnSubscribe(disposable -> {
+ loadLive.setValue(new LoadingCmd(LoadingCmd.CMD.LOADING,"请求数据中..."));
+ })
+ .observeOn(AndroidScheduler.mainThread())
+ .doOnComplete(() -> {
+ loadLive.postValue(new LoadingCmd(LoadingCmd.CMD.DISSMISS));
+ })
+ .subscribe(observer);
+ }
+
+
}
diff --git a/app/src/main/java/com/runt/open/mvvm/data/LoadingCmd.java b/app/src/main/java/com/runt/open/mvvm/data/LoadingCmd.java
new file mode 100644
index 0000000..1752dea
--- /dev/null
+++ b/app/src/main/java/com/runt/open/mvvm/data/LoadingCmd.java
@@ -0,0 +1,21 @@
+package com.runt.open.mvvm.data;
+
+/**
+ * My father is Object, ites purpose of
+ *
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/1/28.
+ */
+public class LoadingCmd {
+ public CMD code;public String msg;
+
+ public LoadingCmd(CMD code) {
+ this(code,"");
+ }
+
+ public LoadingCmd(CMD code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ public enum CMD{LOADING,DISSMISS}
+}
diff --git a/app/src/main/java/com/runt/open/mvvm/data/PhoneDevice.java b/app/src/main/java/com/runt/open/mvvm/data/PhoneDevice.java
new file mode 100644
index 0000000..73ca7bb
--- /dev/null
+++ b/app/src/main/java/com/runt/open/mvvm/data/PhoneDevice.java
@@ -0,0 +1,98 @@
+package com.runt.open.mvvm.data;
+
+import android.content.Context;
+import android.os.Build;
+
+import com.runt.open.mvvm.util.DeviceUtil;
+import com.runt.open.mvvm.util.NetWorkUtils;
+
+/**
+ * My father is Object, ites purpose of
+ *
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-10-7.
+ */
+
+public class PhoneDevice {
+
+ private String brand,model,androidVersion,androidCode,seriaNo,netIp;
+
+ static PhoneDevice device;
+
+ public static void setDevice(Context context) {
+ device = new PhoneDevice(Build.BRAND,Build.MODEL,Build.VERSION.SDK_INT+"",Build.VERSION.RELEASE, DeviceUtil.getSerialNumber(context), NetWorkUtils.getNetIp());
+ }
+
+ public static PhoneDevice getDevice() {
+ return device;
+ }
+
+ public PhoneDevice(String brand, String model, String androidVersion, String androidCode, String seriaNo, String netIp) {
+ this.brand = brand;
+ this.model = model;
+ this.androidVersion = androidVersion;
+ this.androidCode = androidCode;
+ this.seriaNo = seriaNo;
+ this.netIp = netIp;
+ }
+
+ public String getBrand() {
+ return brand;
+ }
+
+ public void setBrand(String brand) {
+ this.brand = brand;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getAndroidVersion() {
+ return androidVersion;
+ }
+
+ public void setAndroidVersion(String androidVersion) {
+ this.androidVersion = androidVersion;
+ }
+
+ public String getAndroidCode() {
+ return androidCode;
+ }
+
+ public void setAndroidCode(String androidCode) {
+ this.androidCode = androidCode;
+ }
+
+ public String getSeriaNo() {
+ return seriaNo;
+ }
+
+ public void setSeriaNo(String seriaNo) {
+ this.seriaNo = seriaNo;
+ }
+
+ public String getNetIp() {
+ return netIp;
+ }
+
+ public void setNetIp(String netIp) {
+ this.netIp = netIp;
+ }
+
+
+ @Override
+ public String toString() {
+ return "PhoneDevice{" +
+ "brand='" + brand + '\'' +
+ ", model='" + model + '\'' +
+ ", androidVersion='" + androidVersion + '\'' +
+ ", androidCode='" + androidCode + '\'' +
+ ", seriaNo='" + seriaNo + '\'' +
+ ", netIp='" + netIp + '\'' +
+ '}';
+ }
+}
diff --git a/app/src/main/java/com/runt/open/mvvm/listener/ResPonse.java b/app/src/main/java/com/runt/open/mvvm/listener/ResPonse.java
new file mode 100644
index 0000000..8e94f93
--- /dev/null
+++ b/app/src/main/java/com/runt/open/mvvm/listener/ResPonse.java
@@ -0,0 +1,14 @@
+package com.runt.open.mvvm.listener;
+
+import java.io.Serializable;
+
+/**
+ * Created by Administrator on 2018/5/25.
+ */
+public abstract class ResPonse<T> implements Serializable {
+
+ public abstract void doSuccess(T obj);
+
+ public void doError(T obj){};
+
+}
diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java b/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java
index b02e526..7024299 100644
--- a/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java
+++ b/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java
@@ -2,34 +2,38 @@
import android.util.Log;
+import androidx.annotation.NonNull;
import androidx.lifecycle.MutableLiveData;
import com.runt.open.mvvm.data.BaseApiResult;
+import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.net.SocketTimeoutException;
+import io.reactivex.SingleObserver;
import io.reactivex.observers.DisposableObserver;
+import retrofit2.Response;
/**
* 网络请求观察
* Created by Administrator on 2021/11/11 0011.
*/
-public abstract class HttpObserver<T extends BaseApiResult> extends DisposableObserver<T>{
+public abstract class HttpObserver<M extends BaseApiResult> extends DisposableObserver<Response<M>> implements SingleObserver<Response<M>> {
final String TAG = "HttpObserver";
- MutableLiveData<T> resultLive;
+ MutableLiveData<M> resultLive;
- public HttpObserver(MutableLiveData<T> resultLive) {
+ public HttpObserver(MutableLiveData<M> resultLive) {
this.resultLive = resultLive;
}
@Override
- public void onNext(T value) {
- resultLive.setValue(value);
+ public void onNext(Response<M> response) {
+ onExcuted(response);
}
@Override
@@ -38,8 +42,8 @@
try {
Log.e(TAG,this.getClass().getSimpleName()+" "+throwable.getMessage());
- Class<T> entityClass = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
- T t = entityClass.newInstance();//实例化一个泛型
+ Class<M> entityClass = (Class<M>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+ M t = entityClass.newInstance();//实例化一个泛型
t.code = 410;
if( throwable instanceof SocketTimeoutException){
t.msg = "服务请求超时,请稍候再试";//设置错误信息
@@ -49,13 +53,13 @@
resultLive.setValue(t);
} catch (ClassCastException e) {
e.printStackTrace();
- T t = (T) new BaseApiResult<String>();
+ M t = (M) new BaseApiResult<String>();
t.code = 409;
t.msg = "实例化对象未指定泛型实体类";
resultLive.setValue(t);
} catch (Exception e) {
e.printStackTrace();
- T t = (T) new BaseApiResult<String>();
+ M t = (M) new BaseApiResult<String>();
t.code = 409;
t.msg = e.getMessage();
resultLive.setValue(t);
@@ -63,7 +67,27 @@
}
@Override
+ public void onSuccess(Response<M> response) {
+ onExcuted(response);
+ }
+
+ private void onExcuted(@NonNull Response<M> response){
+
+ if(response.body() != null){
+ resultLive.setValue(response.body());
+ }else{
+ try {
+ String error = response.errorBody().string();
+ Log.i("subscribe","onExcuted "+error);
+ onError(new Throwable(error));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ @Override
public void onComplete() {
Log.i("subscribe","onComplete");
}
+
}
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java b/app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java
new file mode 100644
index 0000000..72f198b
--- /dev/null
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java
@@ -0,0 +1,11 @@
+package com.runt.open.mvvm.ui.main;
+
+import com.runt.open.mvvm.base.model.BaseViewModel;
+
+/**
+ * My father is Object, ites purpose of
+ *
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/1/28.
+ */
+public class MainViewModel extends BaseViewModel {
+}
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/dashboard/DashboardFragment.java b/app/src/main/java/com/runt/open/mvvm/ui/main/dashboard/DashboardFragment.java
index 75b9a1e..5f93e54 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/dashboard/DashboardFragment.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/dashboard/DashboardFragment.java
@@ -5,6 +5,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
@@ -16,15 +17,15 @@
public class DashboardFragment extends Fragment {
private DashboardViewModel dashboardViewModel;
-private FragmentDashboardBinding binding;
+ private FragmentDashboardBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
- ViewGroup container, Bundle savedInstanceState) {
+ ViewGroup container, Bundle savedInstanceState) {
dashboardViewModel =
new ViewModelProvider(this).get(DashboardViewModel.class);
- binding = FragmentDashboardBinding.inflate(inflater, container, false);
- View root = binding.getRoot();
+ binding = FragmentDashboardBinding.inflate(inflater, container, false);
+ View root = binding.getRoot();
final TextView textView = binding.textDashboard;
dashboardViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@@ -36,7 +37,7 @@
return root;
}
-@Override
+ @Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeFragment.java b/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeFragment.java
index 4e34a2b..2a93b5b 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeFragment.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeFragment.java
@@ -5,40 +5,29 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
+import com.runt.open.mvvm.base.fragments.BaseFragment;
import com.runt.open.mvvm.databinding.FragmentHomeBinding;
-public class HomeFragment extends Fragment {
+public class HomeFragment extends BaseFragment<FragmentHomeBinding,HomeViewModel> {
- private HomeViewModel homeViewModel;
-private FragmentHomeBinding binding;
- public View onCreateView(@NonNull LayoutInflater inflater,
- ViewGroup container, Bundle savedInstanceState) {
- homeViewModel =
- new ViewModelProvider(this).get(HomeViewModel.class);
- binding = FragmentHomeBinding.inflate(inflater, container, false);
- View root = binding.getRoot();
-
+ @Override
+ public void initViews() {
final TextView textView = binding.textHome;
- homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
+ viewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
- return root;
}
-@Override
- public void onDestroyView() {
- super.onDestroyView();
- binding = null;
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/notifications/NotificationsFragment.java b/app/src/main/java/com/runt/open/mvvm/ui/main/notifications/NotificationsFragment.java
index 72d952c..29970e8 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/notifications/NotificationsFragment.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/notifications/NotificationsFragment.java
@@ -5,6 +5,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
@@ -16,15 +17,15 @@
public class NotificationsFragment extends Fragment {
private NotificationsViewModel notificationsViewModel;
-private FragmentNotificationsBinding binding;
+ private FragmentNotificationsBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
- ViewGroup container, Bundle savedInstanceState) {
+ ViewGroup container, Bundle savedInstanceState) {
notificationsViewModel =
new ViewModelProvider(this).get(NotificationsViewModel.class);
- binding = FragmentNotificationsBinding.inflate(inflater, container, false);
- View root = binding.getRoot();
+ binding = FragmentNotificationsBinding.inflate(inflater, container, false);
+ View root = binding.getRoot();
final TextView textView = binding.textNotifications;
notificationsViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@@ -36,7 +37,7 @@
return root;
}
-@Override
+ @Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
diff --git a/app/src/main/res/color/text_normal.xml b/app/src/main/res/color/text_normal.xml
new file mode 100644
index 0000000..71b5c1c
--- /dev/null
+++ b/app/src/main/res/color/text_normal.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <item android:state_enabled="false" android:color="@color/enable_txt_color"/> <!-- pressed -->
+
+ <item android:state_pressed="true" android:color="@color/white"/> <!-- pressed -->
+
+ <item android:state_focused="true" android:color="@color/white"/> <!-- focused -->
+
+ <item android:color="@color/txt_color"/> <!-- default -->
+
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/edit_dialog_bg_white_border.xml b/app/src/main/res/drawable-v21/edit_dialog_bg_white_border.xml
new file mode 100644
index 0000000..5a0a7d2
--- /dev/null
+++ b/app/src/main/res/drawable-v21/edit_dialog_bg_white_border.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/color_gray" >
+ <item>
+ <selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false">
+ <shape>
+ <solid android:color="@color/transparent" />
+ </shape>
+ </item>
+ <item android:state_focused="true">
+ <shape>
+ <solid android:color="@color/white" />
+ <stroke android:width="0.5dp" android:color="@color/txt_normal" />
+ <corners android:radius="@dimen/edit_corner" />
+ </shape>
+ </item>
+ <item>
+ <shape>
+ <solid android:color="@color/white" />
+ <stroke android:width="0.5dp" android:color="@color/gray_normal" />
+ <corners android:radius="@dimen/edit_corner" />
+ </shape>
+ </item>
+ </selector>
+ </item>
+
+</ripple>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index a57477b..964ea3f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,8 +4,16 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="?attr/actionBarSize" >
+ android:layout_height="match_parent" >
+
+ <com.runt.open.mvvm.widgets.TitleBarView
+ android:id="@+id/title_bar"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize"
+ android:background="@color/white"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
diff --git a/app/src/main/res/layout/layout_dialog.xml b/app/src/main/res/layout/layout_dialog.xml
new file mode 100644
index 0000000..ffa52df
--- /dev/null
+++ b/app/src/main/res/layout/layout_dialog.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/bg_white_corner_8"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/txt_title"
+ android:gravity="center"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="20dp"
+ android:text="标题"
+ android:textSize="18sp"
+ android:textColor="@color/black" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="0.5dp"
+ android:background="@color/black_20" />
+
+ <EditText
+ android:id="@+id/msg"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="10dp"
+ android:layout_margin="30dp"
+ android:background="@drawable/edit_dialog_bg_white_border"
+ android:enabled="false"
+ android:textColor="@color/txt_normal"
+ android:text="" />
+
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="0.5dp"
+ android:background="@color/black_20" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/txt_cancel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="20dp"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:text="取消"
+ android:textSize="14sp"
+ android:focusable="true"
+ android:textColor="@color/text_normal"
+ android:background="@drawable/btn_white_lb_corner" />
+
+ <View
+ android:layout_width="0.5dp"
+ android:layout_height="match_parent"
+ android:background="@color/black_20" />
+ <TextView
+ android:id="@+id/txt_confirm"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="20dp"
+ android:focusable="true"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:textSize="14sp"
+ android:text="确认"
+ android:textColor="@color/text_normal"
+ android:background="@drawable/btn_white_rb_corner" />
+
+
+ </LinearLayout>
+
+
+</LinearLayout>
\ No newline at end of file
--
Gitblit v1.9.1