From 92cb24af250e10ff60389a186bf692d7c17ed825 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Mon, 26 Jun 2017 16:51:57 -0700 Subject: Add search card with max height --- .../ca/allanwang/kau/searchview/SearchCard.kt | 31 ++++++++++++++++++++++ .../ca/allanwang/kau/searchview/SearchView.kt | 11 +++++--- library/src/main/res/layout/kau_search_view.xml | 7 ++--- 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 library/src/main/kotlin/ca/allanwang/kau/searchview/SearchCard.kt (limited to 'library/src') diff --git a/library/src/main/kotlin/ca/allanwang/kau/searchview/SearchCard.kt b/library/src/main/kotlin/ca/allanwang/kau/searchview/SearchCard.kt new file mode 100644 index 0000000..77da6b0 --- /dev/null +++ b/library/src/main/kotlin/ca/allanwang/kau/searchview/SearchCard.kt @@ -0,0 +1,31 @@ +package ca.allanwang.kau.searchview + +import android.content.Context +import android.graphics.Rect +import android.support.v7.widget.CardView +import android.util.AttributeSet +import android.view.ViewGroup + +/** + * Created by Allan Wang on 2017-06-26. + * + * CardView with a limited height + * Leaves space for users to tap to exit and ensures that all search items are visible + */ +class SearchCard @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 +) : CardView(context, attrs, defStyleAttr) { + + val parentVisibleHeight: Int + get() { + val r = Rect() + (parent as ViewGroup).getWindowVisibleDisplayFrame(r) + return r.height() + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + val trueHeightMeasureSpec = MeasureSpec.makeMeasureSpec((parentVisibleHeight * 0.9f).toInt(), MeasureSpec.AT_MOST) + super.onMeasure(widthMeasureSpec, trueHeightMeasureSpec) + } + +} \ No newline at end of file diff --git a/library/src/main/kotlin/ca/allanwang/kau/searchview/SearchView.kt b/library/src/main/kotlin/ca/allanwang/kau/searchview/SearchView.kt index c85450b..3b4afae 100644 --- a/library/src/main/kotlin/ca/allanwang/kau/searchview/SearchView.kt +++ b/library/src/main/kotlin/ca/allanwang/kau/searchview/SearchView.kt @@ -8,7 +8,10 @@ import android.support.annotation.ColorInt import android.support.annotation.IdRes import android.support.annotation.StringRes import android.support.transition.AutoTransition -import android.support.v7.widget.* +import android.support.v7.widget.AppCompatEditText +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.support.v7.widget.SimpleItemAnimator import android.util.AttributeSet import android.view.* import android.widget.FrameLayout @@ -154,7 +157,7 @@ class SearchView @JvmOverloads constructor( val configs = Configs() //views private val shadow: View by bindView(R.id.search_shadow) - private val card: CardView by bindView(R.id.search_cardview) + private val card: SearchCard by bindView(R.id.search_cardview) private val iconNav: ImageView by bindView(R.id.search_nav) private val editText: AppCompatEditText by bindView(R.id.search_edit_text) val textEvents: Observable @@ -302,8 +305,8 @@ class SearchView @JvmOverloads constructor( * The cardView matches the parent's width, so menuX is correct */ configs.openListener?.invoke(this) + editText.showKeyboard() card.circularReveal(menuX, menuHalfHeight, duration = configs.revealDuration) { - editText.showKeyboard() cardTransition() recycler.visible() shadow.fadeIn() @@ -312,7 +315,6 @@ class SearchView @JvmOverloads constructor( fun revealClose() { if (!isOpen) return - editText.hideKeyboard() shadow.fadeOut(duration = configs.transitionDuration) cardTransition { addEndListener { @@ -325,6 +327,7 @@ class SearchView @JvmOverloads constructor( } } recycler.gone() + editText.hideKeyboard() } } diff --git a/library/src/main/res/layout/kau_search_view.xml b/library/src/main/res/layout/kau_search_view.xml index 8b07403..4a46e90 100644 --- a/library/src/main/res/layout/kau_search_view.xml +++ b/library/src/main/res/layout/kau_search_view.xml @@ -2,7 +2,7 @@ + android:layout_height="match_parent"> - - + \ No newline at end of file -- cgit v1.2.3