diff options
author | Allan Wang <me@allanwang.ca> | 2017-06-26 16:51:57 -0700 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2017-06-26 16:51:57 -0700 |
commit | 92cb24af250e10ff60389a186bf692d7c17ed825 (patch) | |
tree | 329b1c2784211b8e880e8d2eb812181e1b46dd72 | |
parent | cc6d3f96af3bdcb65f34b53ce7749b1d73077068 (diff) | |
download | kau-92cb24af250e10ff60389a186bf692d7c17ed825.tar.gz kau-92cb24af250e10ff60389a186bf692d7c17ed825.tar.bz2 kau-92cb24af250e10ff60389a186bf692d7c17ed825.zip |
Add search card with max height
3 files changed, 42 insertions, 7 deletions
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<String> @@ -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 @@ <merge 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="wrap_content"> + android:layout_height="match_parent"> <View android:id="@+id/search_shadow" @@ -11,7 +11,7 @@ android:background="@color/kau_search_full_shadow" android:visibility="gone" /> - <android.support.v7.widget.CardView + <ca.allanwang.kau.searchview.SearchCard android:id="@+id/search_cardview" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -101,11 +101,12 @@ android:id="@+id/search_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" + android:overScrollMode="never" android:visibility="gone" /> </LinearLayout> - </android.support.v7.widget.CardView> + </ca.allanwang.kau.searchview.SearchCard> </merge>
\ No newline at end of file |