更新界面

This commit is contained in:
HapeLee committed 2025-07-10 19:10:28 +08:00
1 parent 3c494cfc9a
commit b007a81277
19 files changed
+216 -142

No files matched your search

@@ -184,4 +184,5 @@ object PreferKey {
const val themePref = "themePref" const val themePref = "themePref"
const val bookshelfSortOrder = "bookshelfSortOrder" const val bookshelfSortOrder = "bookshelfSortOrder"
const val showBottomView = "showBottomView"
} }
@@ -224,6 +224,9 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
val showRSS: Boolean val showRSS: Boolean
get() = appCtx.getPrefBoolean(PreferKey.showRss, true) get() = appCtx.getPrefBoolean(PreferKey.showRss, true)
val showBottomView: Boolean
get() = appCtx.getPrefBoolean(PreferKey.showBottomView, true)
val autoRefreshBook: Boolean val autoRefreshBook: Boolean
get() = appCtx.getPrefBoolean(PreferKey.autoRefresh) get() = appCtx.getPrefBoolean(PreferKey.autoRefresh)
@@ -5,15 +5,12 @@ import android.app.SearchManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.ResolveInfo import android.content.pm.ResolveInfo
import android.net.Uri
import android.os.Build
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu import android.view.Menu
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.PopupWindow import android.widget.PopupWindow
import androidx.annotation.RequiresApi
import androidx.appcompat.view.SupportMenuInflater import androidx.appcompat.view.SupportMenuInflater
import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.view.menu.MenuBuilder
import androidx.appcompat.view.menu.MenuItemImpl import androidx.appcompat.view.menu.MenuItemImpl
@@ -43,6 +40,7 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac
private val adapter = Adapter(context).apply { private val adapter = Adapter(context).apply {
setHasStableIds(true) setHasStableIds(true)
} }
private val menuItems: List<MenuItemImpl> private val menuItems: List<MenuItemImpl>
private val visibleMenuItems = arrayListOf<MenuItemImpl>() private val visibleMenuItems = arrayListOf<MenuItemImpl>()
private val moreMenuItems = arrayListOf<MenuItemImpl>() private val moreMenuItems = arrayListOf<MenuItemImpl>()
@@ -55,13 +53,12 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac
isTouchable = true isTouchable = true
isOutsideTouchable = false isOutsideTouchable = false
isFocusable = false isFocusable = false
animationStyle = R.style.TextActionMenuAnimation
val myMenu = MenuBuilder(context) val myMenu = MenuBuilder(context)
val otherMenu = MenuBuilder(context) val otherMenu = MenuBuilder(context)
SupportMenuInflater(context).inflate(R.menu.content_select_action, myMenu) SupportMenuInflater(context).inflate(R.menu.content_select_action, myMenu)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { onInitializeMenu(otherMenu)
onInitializeMenu(otherMenu)
}
menuItems = myMenu.visibleItems + otherMenu.visibleItems menuItems = myMenu.visibleItems + otherMenu.visibleItems
visibleMenuItems.addAll(menuItems.subList(0, 5)) visibleMenuItems.addAll(menuItems.subList(0, 5))
moreMenuItems.addAll(menuItems.subList(5, menuItems.size)) moreMenuItems.addAll(menuItems.subList(5, menuItems.size))
@@ -114,10 +111,7 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac
when { when {
startTopY > 500 -> { startTopY > 500 -> {
showAtLocation( showAtLocation(
view, view, Gravity.BOTTOM or Gravity.START, startX, windowHeight - startTopY
Gravity.BOTTOM or Gravity.START,
startX,
windowHeight - startTopY
) )
} }
@@ -138,28 +132,19 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac
when { when {
startBottomY > 500 -> { startBottomY > 500 -> {
showAtLocation( showAtLocation(
view, view, Gravity.TOP or Gravity.START, startX, startTopY - popupHeight
Gravity.TOP or Gravity.START,
startX,
startTopY - popupHeight
) )
} }
endBottomY - startBottomY > 500 -> { endBottomY - startBottomY > 500 -> {
showAtLocation( showAtLocation(
view, view, Gravity.TOP or Gravity.START, startX, startBottomY
Gravity.TOP or Gravity.START,
startX,
startBottomY
) )
} }
else -> { else -> {
showAtLocation( showAtLocation(
view, view, Gravity.TOP or Gravity.START, endX, endBottomY
Gravity.TOP or Gravity.START,
endX,
endBottomY
) )
} }
} }
@@ -233,28 +218,23 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac
} }
else -> item.intent?.let { else -> item.intent?.let {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText)
it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) context.startActivity(it)
context.startActivity(it)
}
} }
} }
} }
@RequiresApi(Build.VERSION_CODES.M)
private fun createProcessTextIntent(): Intent { private fun createProcessTextIntent(): Intent {
return Intent() return Intent()
.setAction(Intent.ACTION_PROCESS_TEXT) .setAction(Intent.ACTION_PROCESS_TEXT)
.setType("text/plain") .setType("text/plain")
} }
@RequiresApi(Build.VERSION_CODES.M)
private fun getSupportedActivities(): List<ResolveInfo> { private fun getSupportedActivities(): List<ResolveInfo> {
return context.packageManager return context.packageManager
.queryIntentActivities(createProcessTextIntent(), 0) .queryIntentActivities(createProcessTextIntent(), 0)
} }
@RequiresApi(Build.VERSION_CODES.M)
private fun createProcessTextIntentForResolveInfo(info: ResolveInfo): Intent { private fun createProcessTextIntentForResolveInfo(info: ResolveInfo): Intent {
return createProcessTextIntent() return createProcessTextIntent()
.putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, false) .putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, false)
@@ -266,7 +246,6 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac
* so that your "PROCESS_TEXT" menu items appear after the * so that your "PROCESS_TEXT" menu items appear after the
* standard selection menu items like Cut, Copy, Paste. * standard selection menu items like Cut, Copy, Paste.
*/ */
@RequiresApi(Build.VERSION_CODES.M)
private fun onInitializeMenu(menu: Menu) { private fun onInitializeMenu(menu: Menu) {
kotlin.runCatching { kotlin.runCatching {
var menuItemOrder = 100 var menuItemOrder = 100
@@ -10,8 +10,6 @@ import io.legato.kazusa.databinding.DialogTipConfigBinding
import io.legato.kazusa.help.config.ReadBookConfig import io.legato.kazusa.help.config.ReadBookConfig
import io.legato.kazusa.help.config.ReadTipConfig import io.legato.kazusa.help.config.ReadTipConfig
import io.legato.kazusa.lib.dialogs.selector import io.legato.kazusa.lib.dialogs.selector
import io.legato.kazusa.utils.checkByIndex
import io.legato.kazusa.utils.getIndexById
import io.legato.kazusa.utils.hexString import io.legato.kazusa.utils.hexString
import io.legato.kazusa.utils.observeEvent import io.legato.kazusa.utils.observeEvent
import io.legato.kazusa.utils.postEvent import io.legato.kazusa.utils.postEvent
@@ -41,7 +39,14 @@ class TipConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_tip_config
} }
private fun initView() { private fun initView() {
binding.rgTitleMode.checkByIndex(ReadBookConfig.titleMode)
when (ReadBookConfig.titleMode) {
0 -> binding.rgTitleMode.check(R.id.rb_title_mode1)
1 -> binding.rgTitleMode.check(R.id.rb_title_mode2)
2 -> binding.rgTitleMode.check(R.id.rb_title_mode3)
else -> { }
}
binding.dsbTitleSize.progress = ReadBookConfig.titleSize binding.dsbTitleSize.progress = ReadBookConfig.titleSize
binding.dsbTitleTop.progress = ReadBookConfig.titleTopSpacing binding.dsbTitleTop.progress = ReadBookConfig.titleTopSpacing
binding.dsbTitleBottom.progress = ReadBookConfig.titleBottomSpacing binding.dsbTitleBottom.progress = ReadBookConfig.titleBottomSpacing
@@ -91,9 +96,11 @@ class TipConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_tip_config
} }
private fun initEvent() = binding.run { private fun initEvent() = binding.run {
rgTitleMode.setOnCheckedChangeListener { _, checkedId -> binding.rgTitleMode.setOnCheckedStateChangeListener { group, checkedIds ->
ReadBookConfig.titleMode = rgTitleMode.getIndexById(checkedId) if (checkedIds.isNotEmpty()) {
postEvent(EventBus.UP_CONFIG, arrayListOf(5)) ReadBookConfig.titleMode = group.indexOfChild(group.findViewById(checkedIds.first()))
postEvent(EventBus.UP_CONFIG, arrayListOf(5))
}
} }
dsbTitleSize.onChanged = { dsbTitleSize.onChanged = {
ReadBookConfig.titleSize = it ReadBookConfig.titleSize = it
@@ -194,7 +194,7 @@ class OtherConfigFragment : PreferenceFragment(),
setProcessTextEnable(it.getBoolean(key, true)) setProcessTextEnable(it.getBoolean(key, true))
} }
PreferKey.showDiscovery, PreferKey.showRss -> postEvent(EventBus.NOTIFY_MAIN, true) PreferKey.showDiscovery, PreferKey.showRss, PreferKey.showBottomView -> postEvent(EventBus.NOTIFY_MAIN, true)
PreferKey.language -> listView.postDelayed(1000) { PreferKey.language -> listView.postDelayed(1000) {
appCtx.restart() appCtx.restart()
} }
@@ -56,6 +56,8 @@ import kotlin.coroutines.suspendCoroutine
import androidx.core.view.get import androidx.core.view.get
import com.google.android.material.navigation.NavigationBarView import com.google.android.material.navigation.NavigationBarView
import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment3 import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment3
import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.visible
/** /**
* 主界面 * 主界面
@@ -382,40 +384,46 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
private fun upBottomMenu() { private fun upBottomMenu() {
if (AppConfig.showBottomView)
{
getNavigationBarView().visible()
val showDiscovery = AppConfig.showDiscovery
val showRss = AppConfig.showRSS
val menu = getNavigationBarView().menu
menu.findItem(R.id.menu_discovery).isVisible = showDiscovery
menu.findItem(R.id.menu_rss).isVisible = showRss
val showDiscovery = AppConfig.showDiscovery var index = 0
val showRss = AppConfig.showRSS if (showDiscovery) {
val menu = getNavigationBarView().menu index++
menu.findItem(R.id.menu_discovery).isVisible = showDiscovery realPositions[index] = idExplore
menu.findItem(R.id.menu_rss).isVisible = showRss }
if (showRss) {
var index = 0 index++
if (showDiscovery) { realPositions[index] = idRss
}
index++ index++
realPositions[index] = idExplore realPositions[index] = idMy
bottomMenuCount = index + 1
adapter.notifyDataSetChanged()
} }
if (showRss) { else getNavigationBarView().gone()
index++
realPositions[index] = idRss
}
index++
realPositions[index] = idMy
bottomMenuCount = index + 1
adapter.notifyDataSetChanged()
} }
private fun upHomePage() { private fun upHomePage() {
when (AppConfig.defaultHomePage) { when (AppConfig.defaultHomePage) {
"bookshelf" -> {} "bookshelf" -> {}
"explore" -> if (AppConfig.showDiscovery) { "explore" -> if (AppConfig.showDiscovery && AppConfig.showBottomView) {
binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idExplore), false) binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idExplore), false)
} }
"rss" -> if (AppConfig.showRSS) { "rss" -> if (AppConfig.showRSS && AppConfig.showBottomView) {
binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idRss), false) binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idRss), false)
} }
"my" -> binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idMy), false) "my" -> if (AppConfig.showBottomView) {
binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idMy), false)
}
} }
} }
@@ -154,8 +154,8 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
} }
} }
private fun showMenu(view: View, position: Int): Boolean { private fun showMenu(view: View, position: Int) {
val source = getItem(position) ?: return true val source = getItem(position) ?: return
val popupMenu = PopupMenu(context, view) val popupMenu = PopupMenu(context, view)
popupMenu.inflate(R.menu.explore_item) popupMenu.inflate(R.menu.explore_item)
popupMenu.menu.findItem(R.id.menu_login).isVisible = source.hasLoginUrl popupMenu.menu.findItem(R.id.menu_login).isVisible = source.hasLoginUrl
@@ -180,7 +180,6 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
true true
} }
popupMenu.show() popupMenu.show()
return true
} }
interface CallBack { interface CallBack {
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/decelerate_cubic">
<translate
android:fromYDelta="100%"
android:toYDelta="0%"
android:duration="280"/>
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="280"/>
</set>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/decelerate_cubic">
<translate
android:fromYDelta="0%"
android:toYDelta="100%"
android:duration="280"/>
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="280"/>
</set>
+33 -20
View File
@@ -43,54 +43,67 @@
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" /> android:textStyle="bold" />
<RadioGroup <com.google.android.material.chip.ChipGroup
android:id="@+id/rg_title_mode" android:id="@+id/rg_title_mode"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> app:singleLine="true"
app:singleSelection="true"
app:selectionRequired="true">
<com.google.android.material.radiobutton.MaterialRadioButton <com.google.android.material.chip.Chip
android:id="@+id/rb_title_mode1" android:id="@+id/rb_title_mode1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="3dp"
android:text="@string/title_left" /> android:text="@string/title_left" />
<com.google.android.material.radiobutton.MaterialRadioButton <com.google.android.material.chip.Chip
android:id="@+id/rb_title_mode2" android:id="@+id/rb_title_mode2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="3dp"
android:text="@string/title_center" /> android:text="@string/title_center" />
<com.google.android.material.radiobutton.MaterialRadioButton <com.google.android.material.chip.Chip
android:id="@+id/rb_title_mode3" android:id="@+id/rb_title_mode3"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="3dp"
android:text="@string/title_hide" /> android:text="@string/title_hide" />
</RadioGroup>
<io.legato.kazusa.ui.widget.DetailSeekBar
</com.google.android.material.chip.ChipGroup>
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_title_size" android:id="@+id/dsb_title_size"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:max="10" app:max="10"
app:title="@string/title_font_size" /> app:title="@string/title_font_size" />
<io.legato.kazusa.ui.widget.DetailSeekBar <LinearLayout
android:id="@+id/dsb_title_top"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:max="100" android:orientation="horizontal">
app:title="@string/title_margin_top" /> <io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_title_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="100"
app:title="@string/title_margin_top" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_title_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="100"
app:title="@string/title_margin_bottom" />
</LinearLayout>
<io.legato.kazusa.ui.widget.DetailSeekBar
android:id="@+id/dsb_title_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:max="100"
app:title="@string/title_margin_bottom" />
<TextView <TextView
android:id="@+id/tv_header_padding" android:id="@+id/tv_header_padding"
+16 -5
View File
@@ -17,16 +17,27 @@
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<TextView <LinearLayout
android:id="@+id/tv_empty_msg" android:id="@+id/tv_empty_msg"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"
android:orientation="vertical"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_margin="16dp" android:layout_margin="16dp"
android:gravity="center" android:gravity="center">
android:text="@string/bookshelf_empty" <TextView
android:visibility="gone" android:layout_width="wrap_content"
tools:text="TextView" /> android:layout_height="wrap_content"
android:text="(๑`^´๑)"
android:textSize="30sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="@string/bookshelf_empty" />
</LinearLayout>
</FrameLayout> </FrameLayout>
+19 -7
View File
@@ -54,17 +54,29 @@
tools:listitem="@layout/item_find_book" tools:listitem="@layout/item_find_book"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/> app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<TextView <LinearLayout
android:id="@+id/tv_empty_msg" android:id="@+id/tv_empty_msg"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp"
android:gravity="center"
android:visibility="gone"
android:text="@string/explore_empty"
app:layout_anchor="@id/app_bar" app:layout_anchor="@id/app_bar"
app:layout_anchorGravity="bottom|center" app:layout_anchorGravity="center"
app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:text="TextView" /> android:visibility="gone"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_margin="16dp"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(っ˘ω˘ς )"
android:textSize="30sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:gravity="center"
android:text="@string/explore_empty" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
+12 -15
View File
@@ -39,20 +39,17 @@
</LinearLayout> </LinearLayout>
<com.google.android.flexbox.FlexboxLayout
android:id="@+id/flexbox"
<com.google.android.flexbox.FlexboxLayout android:layout_width="match_parent"
android:id="@+id/flexbox" android:layout_height="wrap_content"
android:layout_width="match_parent" android:clipToPadding="false"
android:layout_height="wrap_content" android:overScrollMode="never"
android:clipToPadding="false" android:layout_marginTop="8dp"
android:overScrollMode="never" android:visibility="gone"
android:layout_marginTop="8dp" app:dividerDrawable="@drawable/shape_space_divider"
android:visibility="gone" app:flexDirection="row"
app:dividerDrawable="@drawable/shape_space_divider" app:flexWrap="wrap"
app:flexDirection="row" app:showDivider="middle" />
app:flexWrap="wrap"
app:showDivider="middle" />
</LinearLayout> </LinearLayout>
+37 -29
View File
@@ -1,47 +1,55 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:background="?attr/colorSurfaceContainer" app:cardBackgroundColor="?attr/colorSurfaceContainer"
android:padding="8dp"> app:strokeWidth="0dp">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:animateLayoutChanges="true"
android:orientation="horizontal"> android:layout_margin="8dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal"
app:flexDirection="row"
app:flexWrap="wrap"
app:layoutManager="com.google.android.flexbox.FlexboxLayoutManager" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_menu_more"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/more_menu"
android:src="@drawable/ic_more_vert"
android:visibility="gone" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view_more"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:orientation="horizontal" android:orientation="vertical"
app:flexDirection="row" android:visibility="gone"
app:flexWrap="wrap" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
app:layoutManager="com.google.android.flexbox.FlexboxLayoutManager" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_menu_more"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/more_menu"
android:src="@drawable/ic_more_vert"
android:visibility="gone" />
</LinearLayout> </LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</LinearLayout> </com.google.android.material.card.MaterialCardView>
@@ -12,8 +12,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="center_vertical" android:gravity="center_vertical"
android:paddingTop="16dp" android:paddingTop="8dp"
android:paddingBottom="8dp"> android:paddingBottom="4dp">
<TextView <TextView
android:id="@+id/tv_seek_title" android:id="@+id/tv_seek_title"
+3 -3
View File
@@ -32,7 +32,7 @@
<TextView <TextView
android:id="@+id/preference_title" android:id="@+id/preference_title"
android:singleLine="true" android:singleLine="true"
android:textSize="18sp" android:textSize="16sp"
android:text="@string/title" android:text="@string/title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
@@ -43,7 +43,7 @@
android:text="@string/default1" android:text="@string/default1"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="4dp" /> android:layout_marginTop="2dp" />
</LinearLayout> </LinearLayout>
@@ -53,7 +53,7 @@
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:visibility="gone" android:visibility="gone"
android:gravity="right|center_vertical" android:gravity="end|center_vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:ignore="RtlHardcoded" /> tools:ignore="RtlHardcoded" />
@@ -15,7 +15,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginEnd="8dp" android:paddingEnd="8dp"
android:text="标题" android:text="标题"
android:textSize="12sp" android:textSize="12sp"
android:textStyle="bold" android:textStyle="bold"
+5
View File
@@ -32,6 +32,11 @@
<item name="android:layout" tools:ignore="PrivateResource">@layout/m3_alert_dialog</item> <item name="android:layout" tools:ignore="PrivateResource">@layout/m3_alert_dialog</item>
</style> </style>
<style name="TextActionMenuAnimation">
<item name="android:windowEnterAnimation">@anim/popup_enter</item>
<item name="android:windowExitAnimation">@anim/popup_exit</item>
</style>
<style name="ChapterNameText"> <style name="ChapterNameText">
<item name="android:textSize">16sp</item> <item name="android:textSize">16sp</item>
<item name="android:textStyle">bold</item> <item name="android:textStyle">bold</item>
@@ -42,6 +42,13 @@
android:title="@string/show_rss" android:title="@string/show_rss"
app:iconSpaceReserved="false" /> app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="showBottomView"
android:summary="仍可滑动切换页面"
android:title="显示底部导航栏"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.NameListPreference <io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="bookshelf" android:defaultValue="bookshelf"
android:key="defaultHomePage" android:key="defaultHomePage"