Horis 2 лет назад
Родитель
Сommit
6c331b84d9

+ 13 - 0
app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt

@@ -6,6 +6,8 @@ import android.os.Bundle
 import android.view.Menu
 import android.view.MenuItem
 import androidx.activity.viewModels
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
 import io.legado.app.R
 import io.legado.app.base.VMBaseActivity
 import io.legado.app.constant.BookType
@@ -29,6 +31,7 @@ import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.toastOnUi
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import splitties.init.appCtx
+import splitties.views.bottomPadding
 import java.io.FileOutputStream
 
 class BookInfoEditActivity :
@@ -51,6 +54,7 @@ class BookInfoEditActivity :
                 viewModel.loadBook(it)
             }
         }
+        initView()
         initEvent()
     }
 
@@ -66,6 +70,15 @@ class BookInfoEditActivity :
         return super.onCompatOptionsItemSelected(item)
     }
 
+    private fun initView() {
+        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+            val typeMask = WindowInsetsCompat.Type.navigationBars() or WindowInsetsCompat.Type.ime()
+            val insets = windowInsets.getInsets(typeMask)
+            binding.root.bottomPadding = insets.bottom
+            windowInsets
+        }
+    }
+
     private fun initEvent() = binding.run {
         tvChangeCover.setOnClickListener {
             viewModel.bookData.value?.let {

+ 10 - 0
app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt

@@ -7,6 +7,8 @@ import android.view.Menu
 import android.view.MenuItem
 import android.widget.EditText
 import androidx.activity.viewModels
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.google.android.material.tabs.TabLayout
@@ -53,6 +55,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
+import splitties.views.bottomPadding
 
 class BookSourceEditActivity :
     VMBaseActivity<ActivityBookSourceEditBinding, BookSourceEditViewModel>(),
@@ -197,6 +200,13 @@ class BookSourceEditActivity :
                 setEditEntities(tab?.position)
             }
         })
+        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+            val typeMask = WindowInsetsCompat.Type.navigationBars() or WindowInsetsCompat.Type.ime()
+            val insets = windowInsets.getInsets(typeMask)
+            binding.root.bottomPadding = insets.bottom
+            softKeyboardTool.initialPadding = insets.bottom
+            windowInsets
+        }
     }
 
     override fun finish() {

+ 18 - 3
app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditActivity.kt

@@ -7,6 +7,8 @@ import android.view.Menu
 import android.view.MenuItem
 import android.widget.EditText
 import androidx.activity.viewModels
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
 import androidx.lifecycle.lifecycleScope
 import io.legado.app.R
 import io.legado.app.base.VMBaseActivity
@@ -18,6 +20,7 @@ import io.legado.app.utils.GSON
 import io.legado.app.utils.sendToClip
 import io.legado.app.utils.showHelp
 import io.legado.app.utils.viewbindingdelegate.viewBinding
+import splitties.views.bottomPadding
 
 /**
  * 编辑替换规则
@@ -54,12 +57,10 @@ class ReplaceEditActivity :
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         softKeyboardTool.attachToWindow(window)
+        initView()
         viewModel.initData(intent) {
             upReplaceView(it)
         }
-        binding.ivHelp.setOnClickListener {
-            showHelp("regexHelp")
-        }
     }
 
     override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
@@ -73,6 +74,7 @@ class ReplaceEditActivity :
                 setResult(RESULT_OK)
                 finish()
             }
+
             R.id.menu_copy_rule -> sendToClip(GSON.toJson(getReplaceRule()))
             R.id.menu_paste_rule -> viewModel.pasteRule {
                 upReplaceView(it)
@@ -86,6 +88,19 @@ class ReplaceEditActivity :
         softKeyboardTool.dismiss()
     }
 
+    private fun initView() {
+        binding.ivHelp.setOnClickListener {
+            showHelp("regexHelp")
+        }
+        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+            val typeMask = WindowInsetsCompat.Type.navigationBars() or WindowInsetsCompat.Type.ime()
+            val insets = windowInsets.getInsets(typeMask)
+            binding.root.bottomPadding = insets.bottom
+            softKeyboardTool.initialPadding = insets.bottom
+            windowInsets
+        }
+    }
+
     private fun upReplaceView(replaceRule: ReplaceRule) = binding.run {
         etName.setText(replaceRule.name)
         etGroup.setText(replaceRule.group)

+ 13 - 0
app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt

@@ -21,6 +21,8 @@ import android.webkit.WebView
 import android.webkit.WebViewClient
 import androidx.activity.addCallback
 import androidx.activity.viewModels
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.size
 import androidx.lifecycle.lifecycleScope
 import com.script.rhino.RhinoScriptEngine
@@ -60,6 +62,7 @@ import io.legado.app.utils.visible
 import kotlinx.coroutines.launch
 import org.apache.commons.text.StringEscapeUtils
 import org.jsoup.Jsoup
+import splitties.views.bottomPadding
 import java.io.ByteArrayInputStream
 import java.net.URLDecoder
 import java.util.regex.PatternSyntaxException
@@ -91,6 +94,7 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
         viewModel.upStarMenuData.observe(this) { upStarMenu() }
         viewModel.upTtsMenuData.observe(this) { upTtsMenu(it) }
         binding.titleBar.title = intent.getStringExtra("title")
+        initView()
         initWebView()
         initLiveData()
         viewModel.initData(intent)
@@ -175,6 +179,15 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
         return AppConfig.isNightTheme
     }
 
+    private fun initView() {
+        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+            val typeMask = WindowInsetsCompat.Type.navigationBars() or WindowInsetsCompat.Type.ime()
+            val insets = windowInsets.getInsets(typeMask)
+            binding.root.bottomPadding = insets.bottom
+            windowInsets
+        }
+    }
+
     @SuppressLint("SetJavaScriptEnabled")
     private fun initWebView() {
         binding.progressBar.fontColor = accentColor

+ 10 - 0
app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt

@@ -6,6 +6,8 @@ import android.view.Menu
 import android.view.MenuItem
 import android.widget.EditText
 import androidx.activity.viewModels
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
 import androidx.lifecycle.lifecycleScope
 import com.google.android.material.tabs.TabLayout
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
@@ -42,6 +44,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
+import splitties.views.bottomPadding
 
 class RssSourceEditActivity :
     VMBaseActivity<ActivityRssSourceEditBinding, RssSourceEditViewModel>(),
@@ -185,6 +188,13 @@ class RssSourceEditActivity :
                 setEditEntities(tab?.position)
             }
         })
+        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+            val typeMask = WindowInsetsCompat.Type.navigationBars() or WindowInsetsCompat.Type.ime()
+            val insets = windowInsets.getInsets(typeMask)
+            binding.root.bottomPadding = insets.bottom
+            softKeyboardTool.initialPadding = insets.bottom
+            windowInsets
+        }
     }
 
     private fun setEditEntities(tabPosition: Int?) {

+ 3 - 2
app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardToolPop.kt

@@ -47,6 +47,7 @@ class KeyboardToolPop(
     private val binding = PopupKeyboardToolBinding.inflate(LayoutInflater.from(context))
     private val adapter = Adapter(context)
     private var mIsSoftKeyBoardShowing = false
+    var initialPadding = 0
 
     init {
         contentView = binding.root
@@ -76,13 +77,13 @@ class KeyboardToolPop(
         val preShowing = mIsSoftKeyBoardShowing
         if (abs(keyboardHeight) > screenHeight / 5) {
             mIsSoftKeyBoardShowing = true // 超过屏幕五分之一则表示弹出了输入法
-            rootView.setPadding(0, 0, 0, contentView.measuredHeight)
+            rootView.setPadding(0, 0, 0, initialPadding + contentView.measuredHeight)
             if (!isShowing) {
                 showAtLocation(rootView, Gravity.BOTTOM, 0, 0)
             }
         } else {
             mIsSoftKeyBoardShowing = false
-            rootView.setPadding(0, 0, 0, 0)
+            //rootView.setPadding(0, 0, 0, 0)
             if (preShowing) {
                 dismiss()
             }