From c1054c0fa5fb4da06b2e8ea79344fb140d2c80d8 Mon Sep 17 00:00:00 2001 From: Aigio Liu Date: Wed, 11 Aug 2021 14:27:36 +0800 Subject: [PATCH] Convert Java Code to Kotlin Code --- README.en.md | 2 +- README.md | 2 +- .../app/build.gradle | 2 +- .../net/steampp/app/ui/MainApplication.java | 18 --- .../net/steampp/app/ui/MainApplication.kt | 15 +++ .../app/ui/activities/MainActivity.java | 47 -------- .../steampp/app/ui/activities/MainActivity.kt | 40 +++++++ .../app/ui/activities/SplashActivity.java | 23 ---- .../app/ui/activities/SplashActivity.kt | 15 +++ .../app/ui/fragments/ASFPlusFragment.java | 46 ------- .../app/ui/fragments/ASFPlusFragment.kt | 32 +++++ .../ui/fragments/CommunityFixFragment.java | 46 ------- .../app/ui/fragments/CommunityFixFragment.kt | 32 +++++ .../app/ui/fragments/GameListFragment.java | 46 ------- .../app/ui/fragments/GameListFragment.kt | 32 +++++ .../app/ui/fragments/LocalAuthFragment.java | 38 ------ .../app/ui/fragments/LocalAuthFragment.kt | 25 ++++ .../steampp/app/ui/fragments/MyFragment.java | 46 ------- .../steampp/app/ui/fragments/MyFragment.kt | 37 ++++++ .../ui/viewmodels/CommunityFixViewModel.java | 26 ---- .../ui/viewmodels/CommunityFixViewModel.kt | 28 +++++ .../app/ui/viewmodels/GameListViewModel.java | 24 ---- .../app/ui/viewmodels/GameListViewModel.kt | 28 +++++ .../app/ui/viewmodels/LocalAuthViewModel.java | 24 ---- .../app/ui/viewmodels/LocalAuthViewModel.kt | 28 +++++ .../app/ui/viewmodels/MyViewModel.java | 24 ---- .../steampp/app/ui/viewmodels/MyViewModel.kt | 28 +++++ .../nospacetextview/NoSpaceTextView.java | 112 ------------------ .../nospacetextview/NoSpaceTextView.kt | 92 ++++++++++++++ src/ST.Client.Mobile.Droid/UI/ImageLoader.cs | 2 +- 30 files changed, 436 insertions(+), 524 deletions(-) delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.java create mode 100644 src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.kt delete mode 100644 src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.java create mode 100644 src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.kt diff --git a/README.en.md b/README.en.md index 0a464a5a3..3d74784f6 100644 --- a/README.en.md +++ b/README.en.md @@ -11,7 +11,7 @@ [![GitHub Fork](https://img.shields.io/github/forks/rmbadmin/SteamTools?style=flat-square)](https://github.com/rmbadmin/SteamTools/network/members) ![GitHub Repo size](https://img.shields.io/github/repo-size/rmbadmin/SteamTools?style=flat-square&color=3cb371) [![GitHub Repo Languages](https://img.shields.io/github/languages/top/SteamTools-Team/SteamTools?style=flat-square)](https://github.com/SteamTools-Team/SteamTools/search?l=c%23) -[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-6) +[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-7) [![C# 10.0](https://img.shields.io/badge/c%23-10.0-green.svg?style=flat-square&color=6da86a)](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10) [![Desktop UI](https://img.shields.io/badge/ui@desktop-AvaloniaUI-purple.svg?style=flat-square&color=8c45ab)](https://github.com/AvaloniaUI/Avalonia) diff --git a/README.md b/README.md index d6aa4bef3..45528ad7b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ [![GitHub Fork](https://img.shields.io/github/forks/rmbadmin/SteamTools?style=flat-square)](https://github.com/rmbadmin/SteamTools/network/members) ![GitHub Repo size](https://img.shields.io/github/repo-size/rmbadmin/SteamTools?style=flat-square&color=3cb371) [![GitHub Repo Languages](https://img.shields.io/github/languages/top/SteamTools-Team/SteamTools?style=flat-square)](https://github.com/SteamTools-Team/SteamTools/search?l=c%23) -[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-6) +[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-7) [![C# 10.0](https://img.shields.io/badge/c%23-10.0-brightgreen.svg?style=flat-square&color=6da86a)](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10) [![Desktop UI](https://img.shields.io/badge/ui@desktop-AvaloniaUI-purple.svg?style=flat-square&color=8c45ab)](https://github.com/AvaloniaUI/Avalonia) diff --git a/src/ST.Client.Mobile.Droid.Design/app/build.gradle b/src/ST.Client.Mobile.Droid.Design/app/build.gradle index 743dee9f2..4f33f334e 100644 --- a/src/ST.Client.Mobile.Droid.Design/app/build.gradle +++ b/src/ST.Client.Mobile.Droid.Design/app/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { applicationId "net.steampp.app.design" - minSdkVersion 21 + minSdkVersion 24 targetSdkVersion 30 versionCode 1 versionName "1.0" diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.java deleted file mode 100644 index 8898f37c2..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.steampp.app.ui; - -import android.app.Application; -import android.content.Context; - -public class MainApplication extends Application { - static Context _context; - - public static Context getContext() { - return _context; - } - - @Override - public void onCreate() { - super.onCreate(); - _context = this; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.kt new file mode 100644 index 000000000..43ff334b5 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/MainApplication.kt @@ -0,0 +1,15 @@ +package net.steampp.app.ui + +import android.app.Application +import android.content.Context + +class MainApplication : Application() { + override fun onCreate() { + super.onCreate() + context = this + } + + companion object { + var context: Context? = null + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.java deleted file mode 100644 index 5af99b835..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.steampp.app.ui.activities; - -import android.os.Bundle; - -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 net.steampp.app.design.R; -import net.steampp.app.ui.databinding.ActivityMainBinding; - -public class MainActivity extends AppCompatActivity { - - private ActivityMainBinding binding; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - binding = ActivityMainBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - // 底部导航(https://material.io/components/bottom-navigation) - // - 需要从应用程序中的任何地方访问的顶级目的地 - // - 三到五个目的地 - // - 仅限移动或平板电脑 - // 导航抽屉(https://material.io/components/navigation-drawer) - // - 具有五个或更多顶级目的地的应用 - // - 具有两个或两个以上级别的导航等级的应用程序 - // - 不相关的目的地之间的快速导航 - - BottomNavigationView navView = findViewById(R.id.nav_view); - // Passing each menu ID as a set of Ids because each - // menu should be considered as top level destinations. - AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( - R.id.navigation_local_auth, R.id.navigation_community_fix, R.id.navigation_game_list, R.id.navigation_my) - .build(); - NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main); - NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); - NavigationUI.setupWithNavController(binding.navView, navController); - } - -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.kt new file mode 100644 index 000000000..37680f2f0 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/MainActivity.kt @@ -0,0 +1,40 @@ +package net.steampp.app.ui.activities + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import androidx.navigation.ui.AppBarConfiguration +import net.steampp.app.design.R +import androidx.navigation.Navigation +import androidx.navigation.ui.NavigationUI +import net.steampp.app.ui.databinding.ActivityMainBinding + +class MainActivity : AppCompatActivity() { + private var binding: ActivityMainBinding? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding!!.root) + + // 底部导航(https://material.io/components/bottom-navigation) + // - 需要从应用程序中的任何地方访问的顶级目的地 + // - 三到五个目的地 + // - 仅限移动或平板电脑 + // 导航抽屉(https://material.io/components/navigation-drawer) + // - 具有五个或更多顶级目的地的应用 + // - 具有两个或两个以上级别的导航等级的应用程序 + // - 不相关的目的地之间的快速导航 + + // Passing each menu ID as a set of Ids because each + // menu should be considered as top level destinations. + val appBarConfiguration = AppBarConfiguration.Builder( + R.id.navigation_local_auth, + R.id.navigation_community_fix, + R.id.navigation_game_list, + R.id.navigation_my + ) + .build() + val navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main) + NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration) + NavigationUI.setupWithNavController(binding!!.navView, navController) + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.java deleted file mode 100644 index aff7ac292..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.steampp.app.ui.activities; - -import android.content.Intent; -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -public class SplashActivity extends AppCompatActivity { - - @Override - protected void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Intent intent = new Intent(this, MainActivity.class); - startActivity(intent); - } - - @Override - public void onBackPressed() { - - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.kt new file mode 100644 index 000000000..00073c31a --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/activities/SplashActivity.kt @@ -0,0 +1,15 @@ +package net.steampp.app.ui.activities + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.content.Intent + +class SplashActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val intent = Intent(this, MainActivity::class.java) + startActivity(intent) + } + + override fun onBackPressed() {} +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.java deleted file mode 100644 index 6d929df5b..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.steampp.app.ui.fragments; - -import android.os.Bundle; -import android.view.LayoutInflater; -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 net.steampp.app.ui.databinding.FragmentGameListBinding; -import net.steampp.app.ui.viewmodels.GameListViewModel; - -public class ASFPlusFragment extends Fragment { - - private GameListViewModel viewModel; - private FragmentGameListBinding binding; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - viewModel = - new ViewModelProvider(this).get(GameListViewModel.class); - - binding = FragmentGameListBinding.inflate(inflater, container, false); - View root = binding.getRoot(); - - final TextView textView = binding.textView; - viewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - binding = null; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.kt new file mode 100644 index 000000000..bc9a638f2 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/ASFPlusFragment.kt @@ -0,0 +1,32 @@ +package net.steampp.app.ui.fragments + +import net.steampp.app.ui.viewmodels.GameListViewModel +import android.view.LayoutInflater +import android.view.ViewGroup +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import android.widget.TextView +import androidx.fragment.app.Fragment +import net.steampp.app.ui.databinding.FragmentGameListBinding + +class ASFPlusFragment : Fragment() { + private var viewModel: GameListViewModel? = null + private var binding: FragmentGameListBinding? = null + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + viewModel = ViewModelProvider(this).get(GameListViewModel::class.java) + binding = FragmentGameListBinding.inflate(inflater, container, false) + val root: View = binding!!.root + val textView: TextView = binding!!.textView + viewModel!!.text.observe(viewLifecycleOwner, { s -> textView.text = s }) + return root + } + + override fun onDestroyView() { + super.onDestroyView() + binding = null + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.java deleted file mode 100644 index 68ec315ad..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.steampp.app.ui.fragments; - -import android.os.Bundle; -import android.view.LayoutInflater; -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 net.steampp.app.ui.databinding.FragmentCommunityFixBinding; -import net.steampp.app.ui.viewmodels.CommunityFixViewModel; - -public class CommunityFixFragment extends Fragment { - - private CommunityFixViewModel viewModel; - private FragmentCommunityFixBinding binding; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - viewModel = - new ViewModelProvider(this).get(CommunityFixViewModel.class); - - binding = FragmentCommunityFixBinding.inflate(inflater, container, false); - View root = binding.getRoot(); - - final TextView textView = binding.textView; - viewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - binding = null; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.kt new file mode 100644 index 000000000..264a85eed --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/CommunityFixFragment.kt @@ -0,0 +1,32 @@ +package net.steampp.app.ui.fragments + +import net.steampp.app.ui.viewmodels.CommunityFixViewModel +import android.view.LayoutInflater +import android.view.ViewGroup +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import android.widget.TextView +import androidx.fragment.app.Fragment +import net.steampp.app.ui.databinding.FragmentCommunityFixBinding + +class CommunityFixFragment : Fragment() { + private var viewModel: CommunityFixViewModel? = null + private var binding: FragmentCommunityFixBinding? = null + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + viewModel = ViewModelProvider(this).get(CommunityFixViewModel::class.java) + binding = FragmentCommunityFixBinding.inflate(inflater, container, false) + val root: View = binding!!.root + val textView: TextView = binding!!.textView + viewModel!!.text.observe(viewLifecycleOwner, { s -> textView.text = s }) + return root + } + + override fun onDestroyView() { + super.onDestroyView() + binding = null + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.java deleted file mode 100644 index 6999c9ed9..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.steampp.app.ui.fragments; - -import android.os.Bundle; -import android.view.LayoutInflater; -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 net.steampp.app.ui.databinding.FragmentGameListBinding; -import net.steampp.app.ui.viewmodels.GameListViewModel; - -public class GameListFragment extends Fragment { - - private GameListViewModel viewModel; - private FragmentGameListBinding binding; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - viewModel = - new ViewModelProvider(this).get(GameListViewModel.class); - - binding = FragmentGameListBinding.inflate(inflater, container, false); - View root = binding.getRoot(); - - final TextView textView = binding.textView; - viewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - binding = null; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.kt new file mode 100644 index 000000000..45de2e599 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/GameListFragment.kt @@ -0,0 +1,32 @@ +package net.steampp.app.ui.fragments + +import net.steampp.app.ui.viewmodels.GameListViewModel +import android.view.LayoutInflater +import android.view.ViewGroup +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import android.widget.TextView +import androidx.fragment.app.Fragment +import net.steampp.app.ui.databinding.FragmentGameListBinding + +class GameListFragment : Fragment() { + private var viewModel: GameListViewModel? = null + private var binding: FragmentGameListBinding? = null + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + viewModel = ViewModelProvider(this).get(GameListViewModel::class.java) + binding = FragmentGameListBinding.inflate(inflater, container, false) + val root: View = binding!!.root + val textView: TextView = binding!!.textView + viewModel!!.text.observe(viewLifecycleOwner, { s -> textView.text = s }) + return root + } + + override fun onDestroyView() { + super.onDestroyView() + binding = null + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.java deleted file mode 100644 index fd3c00b35..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.steampp.app.ui.fragments; - -import android.os.Bundle; -import android.view.LayoutInflater; -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 net.steampp.app.design.R; -import net.steampp.app.ui.viewmodels.LocalAuthViewModel; - -public class LocalAuthFragment extends Fragment { - - private LocalAuthViewModel viewModel; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - viewModel = - new ViewModelProvider(this).get(LocalAuthViewModel.class); - - View root = inflater.inflate(R.layout.fragment_local_auth_test, container, false); - - final TextView textView = root.findViewById(R.id.textView); - viewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.kt new file mode 100644 index 000000000..59ac29fb6 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/LocalAuthFragment.kt @@ -0,0 +1,25 @@ +package net.steampp.app.ui.fragments + +import net.steampp.app.ui.viewmodels.LocalAuthViewModel +import android.view.LayoutInflater +import android.view.ViewGroup +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import net.steampp.app.design.R +import android.widget.TextView +import androidx.fragment.app.Fragment + +class LocalAuthFragment : Fragment() { + private var viewModel: LocalAuthViewModel? = null + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + viewModel = ViewModelProvider(this).get(LocalAuthViewModel::class.java) + val root = inflater.inflate(R.layout.fragment_local_auth_test, container, false) + val textView = root.findViewById(R.id.textView) + viewModel!!.text.observe(viewLifecycleOwner, { s -> textView.text = s }) + return root + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.java deleted file mode 100644 index cd53cfbb7..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.steampp.app.ui.fragments; - -import android.os.Bundle; -import android.view.LayoutInflater; -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 net.steampp.app.ui.databinding.FragmentMyBinding; -import net.steampp.app.ui.viewmodels.MyViewModel; - -public class MyFragment extends Fragment { - - private MyViewModel viewModel; - private FragmentMyBinding binding; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - viewModel = - new ViewModelProvider(this).get(MyViewModel.class); - - binding = FragmentMyBinding.inflate(inflater, container, false); - View root = binding.getRoot(); - -// final TextView textView = binding.textView; -// viewModel.getText().observe(getViewLifecycleOwner(), new Observer() { -// @Override -// public void onChanged(@Nullable String s) { -// textView.setText(s); -// } -// }); - return root; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - binding = null; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.kt new file mode 100644 index 000000000..dce0c0aa0 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/fragments/MyFragment.kt @@ -0,0 +1,37 @@ +package net.steampp.app.ui.fragments + +import net.steampp.app.ui.viewmodels.MyViewModel +import android.view.LayoutInflater +import android.view.ViewGroup +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import net.steampp.app.ui.databinding.FragmentMyBinding + +class MyFragment : Fragment() { + private var viewModel: MyViewModel? = null + private var binding: FragmentMyBinding? = null + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + viewModel = ViewModelProvider(this).get(MyViewModel::class.java) + binding = + FragmentMyBinding.inflate(inflater, container, false) + +// final TextView textView = binding.textView; +// viewModel.getText().observe(getViewLifecycleOwner(), new Observer() { +// @Override +// public void onChanged(@Nullable String s) { +// textView.setText(s); +// } +// }); + return binding!!.root + } + + override fun onDestroyView() { + super.onDestroyView() + binding = null + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.java deleted file mode 100644 index 47654a6f5..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.steampp.app.ui.viewmodels; - -import android.app.Application; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -import net.steampp.app.design.R; -import net.steampp.app.ui.MainApplication; - -import java.util.Arrays; - -public class CommunityFixViewModel extends ViewModel { - - private MutableLiveData mText; - - public CommunityFixViewModel() { - mText = new MutableLiveData<>(); - mText.setValue(Arrays.stream(this.getClass().getName().split("\\.")).reduce((first, second) -> second).orElse("").replace("ViewModel","") + "\n" + MainApplication.getContext().getString(R.string.under_construction)); - } - - public LiveData getText() { - return mText; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.kt new file mode 100644 index 000000000..e53a12e48 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/CommunityFixViewModel.kt @@ -0,0 +1,28 @@ +package net.steampp.app.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.LiveData +import net.steampp.app.ui.MainApplication +import net.steampp.app.design.R +import java.util.* + +class CommunityFixViewModel : ViewModel() { + private val mText: MutableLiveData + val text: LiveData + get() = mText + + init { + mText = MutableLiveData() + mText.setValue( + """ + ${ + Arrays.stream(this.javaClass.name.split("\\.").toTypedArray()) + .reduce { first: String?, second: String -> second }.orElse("") + .replace("ViewModel", "") + } + ${MainApplication.context?.getString(R.string.under_construction)} + """.trimIndent() + ) + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.java deleted file mode 100644 index 9d0e8d6ff..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.steampp.app.ui.viewmodels; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -import net.steampp.app.design.R; -import net.steampp.app.ui.MainApplication; - -import java.util.Arrays; - -public class GameListViewModel extends ViewModel { - - private MutableLiveData mText; - - public GameListViewModel() { - mText = new MutableLiveData<>(); - mText.setValue(Arrays.stream(this.getClass().getName().split("\\.")).reduce((first, second) -> second).orElse("").replace("ViewModel","") + "\n" + MainApplication.getContext().getString(R.string.under_construction)); - } - - public LiveData getText() { - return mText; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.kt new file mode 100644 index 000000000..775f4a782 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/GameListViewModel.kt @@ -0,0 +1,28 @@ +package net.steampp.app.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.LiveData +import net.steampp.app.ui.MainApplication +import net.steampp.app.design.R +import java.util.* + +class GameListViewModel : ViewModel() { + private val mText: MutableLiveData + val text: LiveData + get() = mText + + init { + mText = MutableLiveData() + mText.setValue( + """ + ${ + Arrays.stream(this.javaClass.name.split("\\.").toTypedArray()) + .reduce { first: String?, second: String -> second }.orElse("") + .replace("ViewModel", "") + } + ${MainApplication.context?.getString(R.string.under_construction)} + """.trimIndent() + ) + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.java deleted file mode 100644 index c396eb314..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.steampp.app.ui.viewmodels; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -import net.steampp.app.design.R; -import net.steampp.app.ui.MainApplication; - -import java.util.Arrays; - -public class LocalAuthViewModel extends ViewModel { - - private MutableLiveData mText; - - public LocalAuthViewModel() { - mText = new MutableLiveData<>(); - mText.setValue(Arrays.stream(this.getClass().getName().split("\\.")).reduce((first, second) -> second).orElse("").replace("ViewModel","") + "\n" + MainApplication.getContext().getString(R.string.under_construction)); - } - - public LiveData getText() { - return mText; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.kt new file mode 100644 index 000000000..ed22cb267 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/LocalAuthViewModel.kt @@ -0,0 +1,28 @@ +package net.steampp.app.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.LiveData +import net.steampp.app.ui.MainApplication +import net.steampp.app.design.R +import java.util.* + +class LocalAuthViewModel : ViewModel() { + private val mText: MutableLiveData + val text: LiveData + get() = mText + + init { + mText = MutableLiveData() + mText.setValue( + """ + ${ + Arrays.stream(this.javaClass.name.split("\\.").toTypedArray()) + .reduce { first: String?, second: String -> second }.orElse("") + .replace("ViewModel", "") + } + ${MainApplication.context?.getString(R.string.under_construction)} + """.trimIndent() + ) + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.java b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.java deleted file mode 100644 index 999750cd4..000000000 --- a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.steampp.app.ui.viewmodels; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -import net.steampp.app.design.R; -import net.steampp.app.ui.MainApplication; - -import java.util.Arrays; - -public class MyViewModel extends ViewModel { - - private MutableLiveData mText; - - public MyViewModel() { - mText = new MutableLiveData<>(); - mText.setValue(Arrays.stream(this.getClass().getName().split("\\.")).reduce((first, second) -> second).orElse("").replace("ViewModel","") + "\n" + MainApplication.getContext().getString(R.string.under_construction)); - } - - public LiveData getText() { - return mText; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.kt b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.kt new file mode 100644 index 000000000..237d95d6d --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/app/src/main/java/net/steampp/app/ui/viewmodels/MyViewModel.kt @@ -0,0 +1,28 @@ +package net.steampp.app.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.LiveData +import net.steampp.app.ui.MainApplication +import net.steampp.app.design.R +import java.util.* + +class MyViewModel : ViewModel() { + private val mText: MutableLiveData + val text: LiveData + get() = mText + + init { + mText = MutableLiveData() + mText.setValue( + """ + ${ + Arrays.stream(this.javaClass.name.split("\\.").toTypedArray()) + .reduce { first: String?, second: String -> second }.orElse("") + .replace("ViewModel", "") + } + ${MainApplication.context?.getString(R.string.under_construction)} + """.trimIndent() + ) + } +} diff --git a/src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.java b/src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.java deleted file mode 100644 index 4b2e30562..000000000 --- a/src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.github.wwluo14.nospacetextview; - - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Paint; -import android.graphics.Rect; -import android.text.Layout; -import android.text.TextPaint; -import android.util.AttributeSet; - -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatTextView; - -/** - * @author luowang8 - * @date 2020-01-17 16:36 - * @url https://github.com/wwluo14/NoSpaceTextView/blob/master/app/src/main/java/com/demo/nospacetextview/NoSpaceTextView.java - */ - -@SuppressLint("AppCompatCustomView") -public class NoSpaceTextView extends AppCompatTextView { - - /** - * 控制measure()方法 刷新测量 - */ - private boolean refreshMeasure = false; - - public NoSpaceTextView(Context context) { - super(context); - } - - public NoSpaceTextView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - public NoSpaceTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - - removeSpace(widthMeasureSpec, heightMeasureSpec); - } - - @Override - public void setText(CharSequence text, BufferType type) { - super.setText(text, type); - // 每次文本内容改变时,需要测量两次,确保计算的高度没有问题 - refreshMeasure = true; - } - - /** - * 这里处理文本的上下留白问题 - */ - private void removeSpace(int widthspc, int heightspc) { - String[] linesText = getLinesText(); - TextPaint paint = getPaint(); - Rect rect = new Rect(); - String text = linesText[0]; - paint.getTextBounds(text, 0, text.length(), rect); - - Paint.FontMetricsInt fontMetricsInt = new Paint.FontMetricsInt(); - paint.getFontMetricsInt(fontMetricsInt); - - int paddingTop = (fontMetricsInt.top - rect.top); - - // 设置TextView向上的padding (小于0, 即把TextView文本内容向上移动) - setPadding(getLeftPaddingOffset() - , paddingTop + getTopPaddingOffset() - , getRightPaddingOffset() - , getBottomPaddingOffset()); - - String endText = linesText[linesText.length - 1]; - paint.getTextBounds(endText, 0, endText.length(), rect); - - // 再减去最后一行文本的底部空白,得到的就是TextView内容上线贴边的的高度,到达消除文本上下留白的问题 - setMeasuredDimension(getMeasuredWidth() - , getMeasuredHeight() - (fontMetricsInt.bottom - rect.bottom)); - - if (refreshMeasure) { - refreshMeasure = false; - measure(widthspc, heightspc); - } - } - - /** - * 获取每一行的文本内容 - */ - private String[] getLinesText() { - int start = 0; - - String[] texts = new String[getLineCount()]; - - String text = getText().toString(); - - Layout layout = getLayout(); - - for (int i = 0; i < getLineCount(); i++) { - int end = layout.getLineEnd(i); - - String line = text.substring(start, end); //指定行的内容 - start = end; - - texts[i] = line; - } - - return texts; - } -} diff --git a/src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.kt b/src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.kt new file mode 100644 index 000000000..e007d1464 --- /dev/null +++ b/src/ST.Client.Mobile.Droid.Design/ui/src/main/java/com/github/wwluo14/nospacetextview/NoSpaceTextView.kt @@ -0,0 +1,92 @@ +package com.github.wwluo14.nospacetextview + +import android.annotation.SuppressLint +import android.content.Context +import androidx.appcompat.widget.AppCompatTextView +import android.graphics.Paint.FontMetricsInt +import android.graphics.Rect +import android.util.AttributeSet + +/** + * @author luowang8 + * @date 2020-01-17 16:36 + * @url https://github.com/wwluo14/NoSpaceTextView/blob/master/app/src/main/java/com/demo/nospacetextview/NoSpaceTextView.java + */ +@SuppressLint("AppCompatCustomView") +class NoSpaceTextView : AppCompatTextView { + /** + * 控制measure()方法 刷新测量 + */ + private var refreshMeasure = false + + constructor(context: Context?) : super(context!!) {} + constructor(context: Context?, attrs: AttributeSet?) : super( + context!!, attrs + ) { + } + + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super( + context!!, attrs, defStyleAttr + ) { + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + removeSpace(widthMeasureSpec, heightMeasureSpec) + } + + override fun setText(text: CharSequence, type: BufferType) { + super.setText(text, type) + // 每次文本内容改变时,需要测量两次,确保计算的高度没有问题 + refreshMeasure = true + } + + /** + * 这里处理文本的上下留白问题 + */ + private fun removeSpace(widthspc: Int, heightspc: Int) { + val rect = Rect() + val text = linesText[0] + paint.getTextBounds(text, 0, text!!.length, rect) + val fontMetricsInt = FontMetricsInt() + paint.getFontMetricsInt(fontMetricsInt) + val paddingTop = fontMetricsInt.top - rect.top + + // 设置TextView向上的padding (小于0, 即把TextView文本内容向上移动) + setPadding( + leftPaddingOffset, + paddingTop + topPaddingOffset, + rightPaddingOffset, + bottomPaddingOffset + ) + val endText = linesText[linesText.size - 1] + paint.getTextBounds(endText, 0, endText!!.length, rect) + + // 再减去最后一行文本的底部空白,得到的就是TextView内容上线贴边的的高度,到达消除文本上下留白的问题 + setMeasuredDimension( + measuredWidth, measuredHeight - (fontMetricsInt.bottom - rect.bottom) + ) + if (refreshMeasure) { + refreshMeasure = false + measure(widthspc, heightspc) + } + }//指定行的内容 + + /** + * 获取每一行的文本内容 + */ + private val linesText: Array + private get() { + var start = 0 + val texts = arrayOfNulls(lineCount) + val text = text.toString() + val layout = layout + for (i in 0 until lineCount) { + val end = layout.getLineEnd(i) + val line = text.substring(start, end) //指定行的内容 + start = end + texts[i] = line + } + return texts + } +} diff --git a/src/ST.Client.Mobile.Droid/UI/ImageLoader.cs b/src/ST.Client.Mobile.Droid/UI/ImageLoader.cs index ed4a084c2..77c9a203b 100644 --- a/src/ST.Client.Mobile.Droid/UI/ImageLoader.cs +++ b/src/ST.Client.Mobile.Droid/UI/ImageLoader.cs @@ -60,7 +60,7 @@ namespace System.Application.UI string? requestUri, int targetSize = 0, int targetResId = 0, - ScaleType? scaleType = default) + ScaleType scaleType = default) { if (string.IsNullOrWhiteSpace(requestUri)) {