TitleBar fitStatusBar

pull/32/head
Awesome 6 years ago
parent c909f0b49f
commit bbf110ee4e
  1. 3
      .gitignore
  2. 11
      app/src/main/java/io/legado/app/base/BaseActivity.kt
  3. 24
      app/src/main/java/io/legado/app/ui/main/MainActivity.kt
  4. 3
      app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
  5. 2
      app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt
  6. 2
      app/src/main/java/io/legado/app/ui/main/findbook/FindBookFragment.kt
  7. 2
      app/src/main/java/io/legado/app/ui/main/myconfig/MyConfigFragment.kt
  8. 15
      app/src/main/java/io/legado/app/ui/widget/TitleBar.kt
  9. 5
      app/src/main/java/io/legado/app/utils/ContextExtensions.kt
  10. 4
      app/src/main/res/layout/activity_main.xml
  11. 1
      app/src/main/res/layout/fragment_book_source.xml
  12. 1
      app/src/main/res/layout/fragment_bookshelf.xml
  13. 1
      app/src/main/res/layout/fragment_find_book.xml
  14. 6
      app/src/main/res/layout/fragment_my_config.xml
  15. 2
      app/src/main/res/values/attrs.xml
  16. 5
      gradle.properties

3
.gitignore vendored

@ -7,4 +7,5 @@
/captures
.externalNativeBuild
/release
/tmp
/tmp
*.jks

@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.menu.MenuBuilder
import androidx.appcompat.view.menu.MenuItemImpl
import androidx.core.content.ContextCompat
import androidx.core.view.forEach
import androidx.lifecycle.ViewModel
import io.legado.app.R
import io.legado.app.lib.theme.ColorUtils
@ -29,7 +30,7 @@ abstract class BaseActivity<VM : ViewModel> : AppCompatActivity() {
abstract fun onViewModelCreated(viewModel: VM, savedInstanceState: Bundle?)
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
final override fun onCreateOptionsMenu(menu: Menu?): Boolean {
return menu?.let {
if (it is MenuBuilder) {
it.setOptionalIconsVisible(true)
@ -37,12 +38,12 @@ abstract class BaseActivity<VM : ViewModel> : AppCompatActivity() {
val bool = onCompatCreateOptionsMenu(it)
val primaryTextColor = getPrimaryTextColor(ColorUtils.isColorLight(ThemeStore.primaryColor(this)))
val defaultTextColor = ContextCompat.getColor(this, R.color.tv_text_default)
for (i in 0 until menu.size()) {
(menu.getItem(i) as MenuItemImpl).let { item ->
menu.forEach { item ->
(item as MenuItemImpl).let { impl ->
//overflow:展开的item
DrawableUtils.setTint(
item.icon,
if (item.requiresOverflow()) defaultTextColor else primaryTextColor
impl.icon,
if (impl.requiresOverflow()) defaultTextColor else primaryTextColor
)
}
}

@ -6,6 +6,7 @@ import android.view.MenuItem
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.fragment.app.FragmentStatePagerAdapter
import androidx.viewpager.widget.ViewPager
import com.google.android.material.bottomnavigation.BottomNavigationView
import io.legado.app.R
@ -22,7 +23,6 @@ import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : BaseActivity<MainViewModel>(), BottomNavigationView.OnNavigationItemSelectedListener,
ViewPager.OnPageChangeListener {
private val mFragmentList: ArrayList<Fragment> = ArrayList()
override val viewModel: MainViewModel
get() = getViewModel(MainViewModel::class.java)
@ -31,12 +31,8 @@ class MainActivity : BaseActivity<MainViewModel>(), BottomNavigationView.OnNavig
get() = R.layout.activity_main
override fun onViewModelCreated(viewModel: MainViewModel, savedInstanceState: Bundle?) {
mFragmentList.add(BookshelfFragment())
mFragmentList.add(FindBookFragment())
mFragmentList.add(BookSourceFragment())
mFragmentList.add(MyConfigFragment())
view_pager_main.adapter =
TabFragmentPageAdapter(supportFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
view_pager_main.offscreenPageLimit = 3
view_pager_main.adapter = TabFragmentPageAdapter(supportFragmentManager)
view_pager_main.addOnPageChangeListener(this)
bottom_navigation_view.setOnNavigationItemSelectedListener(this)
}
@ -81,17 +77,21 @@ class MainActivity : BaseActivity<MainViewModel>(), BottomNavigationView.OnNavig
bottom_navigation_view.menu.getItem(position).isChecked = true
}
inner class TabFragmentPageAdapter internal constructor(fm: FragmentManager, behavior: Int) :
FragmentPagerAdapter(fm, behavior) {
private inner class TabFragmentPageAdapter internal constructor(fm: FragmentManager) :
FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
override fun getItem(position: Int): Fragment {
return mFragmentList[position]
return when (position) {
0 -> BookshelfFragment()
1 -> FindBookFragment()
2 -> BookSourceFragment()
else -> MyConfigFragment()
}
}
override fun getCount(): Int {
return mFragmentList.size
return 4
}
}
}

@ -1,6 +1,7 @@
package io.legado.app.ui.main.bookshelf
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import io.legado.app.R
@ -9,7 +10,9 @@ class BookshelfFragment : Fragment(R.layout.fragment_bookshelf) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "BookshelfFragment")
}
}

@ -1,6 +1,7 @@
package io.legado.app.ui.main.booksource
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import io.legado.app.R
@ -9,6 +10,7 @@ class BookSourceFragment : Fragment(R.layout.fragment_book_source) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "BookSourceFragment")
}
}

@ -1,6 +1,7 @@
package io.legado.app.ui.main.findbook
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import io.legado.app.R
@ -9,6 +10,7 @@ class FindBookFragment : Fragment(R.layout.fragment_find_book) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "FindBookFragment")
}
}

@ -1,6 +1,7 @@
package io.legado.app.ui.main.myconfig
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import io.legado.app.R
@ -9,6 +10,7 @@ class MyConfigFragment : Fragment(R.layout.fragment_my_config) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "MyConfigFragment")
}
}

@ -14,6 +14,9 @@ import androidx.appcompat.widget.Toolbar
import androidx.core.graphics.drawable.DrawableCompat
import com.google.android.material.appbar.AppBarLayout
import io.legado.app.R
import io.legado.app.utils.getStatusBarHeight
import org.jetbrains.anko.bottomPadding
import org.jetbrains.anko.topPadding
class TitleBar(context: Context, attrs: AttributeSet?) : AppBarLayout(context, attrs) {
@ -84,6 +87,14 @@ class TitleBar(context: Context, attrs: AttributeSet?) : AppBarLayout(context, a
}
}
if (a.getBoolean(R.styleable.TitleBar_fitStatusBar, true)) {
topPadding = context.getStatusBarHeight()
}
if (a.getBoolean(R.styleable.TitleBar_fitNavigationBar, false)) {
bottomPadding = context.getStatusBarHeight()
}
a.recycle()
if (attachToActivity) {
@ -122,8 +133,8 @@ class TitleBar(context: Context, attrs: AttributeSet?) : AppBarLayout(context, a
private fun attachToActivity(context: Context) {
val activity = getCompatActivity(context)
activity?.let {
activity.setSupportActionBar(toolbar)
activity.supportActionBar?.setDisplayHomeAsUpEnabled(mDisplayHomeAsUp)
it.setSupportActionBar(toolbar)
it.supportActionBar?.setDisplayHomeAsUpEnabled(mDisplayHomeAsUp)
}
}

@ -40,3 +40,8 @@ fun Context.putPrefStringSet(key: String, value: MutableSet<String>) =
fun Context.removePref(key: String) =
defaultSharedPreferences.edit { remove(key) }
fun Context.getStatusBarHeight(): Int {
val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
return resources.getDimensionPixelSize(resourceId)
}

@ -3,13 +3,13 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
android:layout_height="match_parent">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="6dp"
android:background="@color/background"
app:labelVisibilityMode="labeled"
app:menu="@menu/activity_main_bnv"

@ -9,6 +9,7 @@
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:attachToActivity="false"
app:layout_constraintTop_toTopOf="parent"
app:title="@string/book_source"/>

@ -9,6 +9,7 @@
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:attachToActivity="false"
app:layout_constraintTop_toTopOf="parent"
app:title="@string/bookshelf"/>

@ -9,6 +9,7 @@
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:attachToActivity="false"
app:layout_constraintTop_toTopOf="parent"
app:title="@string/find"/>

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -9,8 +8,9 @@
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:attachToActivity="false"
app:layout_constraintTop_toTopOf="parent"
app:title="我的"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

@ -11,6 +11,8 @@
<attr name="attachToActivity" format="boolean"/>
<attr name="displayHomeAsUp" format="boolean"/>
<attr name="navigationIcon" format="reference"/>
<attr name="fitStatusBar" format="boolean"/>
<attr name="fitNavigationBar" format="boolean"/>
<attr name="navigationContentDescription" format="reference|string"/>
<attr name="navigationIconTint" format="color|reference"/>
<attr name="navigationIconTintMode" format="enum">

@ -19,3 +19,8 @@ android.useAndroidX=true
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
RELEASE_STORE_FILE=..\\Test.jks
RELEASE_KEY_PASSWORD=20190604
RELEASE_KEY_ALIAS=test
RELEASE_STORE_PASSWORD=20190604
Loading…
Cancel
Save