diff --git a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt index bf6f5c85a..05afbfe97 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt +++ b/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 { diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt index 415b2fa95..e1c4add3e 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt +++ b/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(), @@ -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() { diff --git a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditActivity.kt b/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditActivity.kt index 52483085c..c34c3b732 100644 --- a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditActivity.kt +++ b/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) diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index 162328d1d..4614d047a 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/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 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 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 diff --git a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt index e6cb28584..dc9d78e23 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt +++ b/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(), @@ -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?) { diff --git a/app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardToolPop.kt b/app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardToolPop.kt index d5d422cf3..aca80d60d 100644 --- a/app/src/main/java/io/legado/app/ui/widget/keyboard/KeyboardToolPop.kt +++ b/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() }