using Android.Content.PM; using Android.OS; using Android.Runtime; using Android.Views; using Android.Webkit; using AndroidX.AppCompat.App; namespace System.Application.UI.Activities { /// /// 当前应用的 基类 /// public abstract partial class BaseActivity : AppCompatActivity, View.IOnClickListener { /// /// 当前 指定布局资源 /// protected abstract int? LayoutResource { get; } protected virtual void ViewBinding() { } protected override void OnCreate(Bundle? savedInstanceState) { base.OnCreate(savedInstanceState); if (LayoutResource.HasValue) { // 如果此处抛异常,绑定 xxx BottomNavigationView xx XML,解决方案:清理项目,重新生成 SetContentView(LayoutResource.Value); var isDarkModeQ = DarkModeUtil.IsDarkModeQ; if (isDarkModeQ) { // 安卓10深色模式,使用全局浅色状态栏 StatusBarUtil.SetWindowLightStatusBar(this, false); } ViewBinding(); BindingToolbar(); BindingBtnBack(); } } /// /// 按 Back 键是否模拟 Home 键按下效果,也就是回到 Launcher,默认值 /// protected virtual bool BackToHome { get; } protected bool mIsLoading; protected virtual View? LoadingView { get; } public virtual bool IsLoading { get => mIsLoading; set { mIsLoading = value; var loadingView = LoadingView; if (loadingView != null) { loadingView.Visibility = value ? ViewStates.Visible : ViewStates.Gone; } } } public override void OnBackPressed() { if (mIsLoading) { return; } if (BackToHome) { GoToPlatformPages.MockHomePressed(this); return; } base.OnBackPressed(); } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } protected virtual WebView? WebView { get; set; } protected override void OnDestroy() { base.OnDestroy(); if (WebView.Destroy_()) WebView = null; } /// /// 控件的点击事件 /// /// protected virtual void OnClick(View view) { } void View.IOnClickListener.OnClick(View? view) { if (view != null) OnClick(view); } protected View GetContentView() { var content = FindViewById(Android.Resource.Id.Content); if (content == null) throw new NullReferenceException(nameof(content)); var contentChild0 = ((ViewGroup)content).GetChildAt(0); if (contentChild0 == null) throw new NullReferenceException(nameof(contentChild0)); return contentChild0; } } /// public abstract class BaseActivity : BaseActivity { } }