parent
d3e9200a7f
commit
c25af3d5ad
@ -0,0 +1,151 @@
|
||||
package eu.kanade.tachiyomi.ui.catalogue
|
||||
|
||||
import android.content.Context
|
||||
import android.support.graphics.drawable.VectorDrawableCompat
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.TextView
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.source.online.OnlineSource.Filter
|
||||
import eu.kanade.tachiyomi.util.dpToPx
|
||||
import eu.kanade.tachiyomi.util.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.inflate
|
||||
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
|
||||
import eu.kanade.tachiyomi.widget.SimpleNavigationView
|
||||
import eu.kanade.tachiyomi.widget.SimpleTextWatcher
|
||||
import kotlinx.android.synthetic.main.catalogue_drawer_content.view.*
|
||||
|
||||
|
||||
class CatalogueNavigationView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null)
|
||||
: SimpleNavigationView(context, attrs) {
|
||||
|
||||
val adapter = Adapter()
|
||||
|
||||
var onSearchClicked = {}
|
||||
|
||||
var onResetClicked = {}
|
||||
|
||||
init {
|
||||
recycler.adapter = adapter
|
||||
val view = inflate(R.layout.catalogue_drawer_content)
|
||||
(view as ViewGroup).addView(recycler)
|
||||
addView(view)
|
||||
|
||||
search_btn.setOnClickListener { onSearchClicked() }
|
||||
reset_btn.setOnClickListener { onResetClicked() }
|
||||
}
|
||||
|
||||
fun setFilters(items: List<Filter<*>>) {
|
||||
adapter.items = items
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
inner class Adapter : RecyclerView.Adapter<Holder>() {
|
||||
|
||||
var items: List<Filter<*>> = emptyList()
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return items.size
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
return when (items[position]) {
|
||||
is Filter.Header -> VIEW_TYPE_HEADER
|
||||
is Filter.CheckBox -> VIEW_TYPE_CHECKBOX
|
||||
is Filter.TriState -> VIEW_TYPE_MULTISTATE
|
||||
is Filter.List<*> -> VIEW_TYPE_LIST
|
||||
is Filter.Text -> VIEW_TYPE_TEXT
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
|
||||
return when (viewType) {
|
||||
VIEW_TYPE_HEADER -> HeaderHolder(parent)
|
||||
VIEW_TYPE_CHECKBOX -> CheckboxHolder(parent, null)
|
||||
VIEW_TYPE_MULTISTATE -> MultiStateHolder(parent, null).apply {
|
||||
// Adjust view with checkbox
|
||||
text.setPadding(4.dpToPx, 0, 0, 0)
|
||||
text.compoundDrawablePadding = 20.dpToPx
|
||||
}
|
||||
VIEW_TYPE_LIST -> SpinnerHolder(parent)
|
||||
VIEW_TYPE_TEXT -> EditTextHolder(parent)
|
||||
else -> throw Exception("Unknown view type")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: Holder, position: Int) {
|
||||
val filter = items[position]
|
||||
when (filter) {
|
||||
is Filter.Header -> {
|
||||
val view = holder.itemView as TextView
|
||||
view.visibility = if (filter.name.isEmpty()) View.GONE else View.VISIBLE
|
||||
view.text = filter.name
|
||||
}
|
||||
is Filter.CheckBox -> {
|
||||
val view = (holder as CheckboxHolder).check
|
||||
view.text = filter.name
|
||||
view.isChecked = filter.state
|
||||
holder.itemView.setOnClickListener {
|
||||
view.toggle()
|
||||
filter.state = view.isChecked
|
||||
}
|
||||
}
|
||||
is Filter.TriState -> {
|
||||
val view = (holder as MultiStateHolder).text
|
||||
view.text = filter.name
|
||||
|
||||
fun getIcon() = VectorDrawableCompat.create(view.resources, when (filter.state) {
|
||||
Filter.TriState.STATE_IGNORE -> R.drawable.ic_check_box_outline_blank_24dp
|
||||
Filter.TriState.STATE_INCLUDE -> R.drawable.ic_check_box_24dp
|
||||
Filter.TriState.STATE_EXCLUDE -> R.drawable.ic_check_box_x_24dp
|
||||
else -> throw Exception("Unknown state")
|
||||
}, null)?.apply {
|
||||
val color = if (filter.state == Filter.TriState.STATE_INCLUDE)
|
||||
R.attr.colorAccent
|
||||
else
|
||||
android.R.attr.textColorSecondary
|
||||
|
||||
setTint(view.context.theme.getResourceColor(color))
|
||||
}
|
||||
|
||||
view.setCompoundDrawablesWithIntrinsicBounds(getIcon(), null, null, null)
|
||||
holder.itemView.setOnClickListener {
|
||||
filter.state = (filter.state + 1) % 3
|
||||
view.setCompoundDrawablesWithIntrinsicBounds(getIcon(), null, null, null)
|
||||
}
|
||||
}
|
||||
is Filter.List<*> -> {
|
||||
holder as SpinnerHolder
|
||||
holder.text.text = filter.name + ": "
|
||||
|
||||
val spinner = holder.spinner
|
||||
spinner.prompt = filter.name
|
||||
spinner.adapter = ArrayAdapter<Any>(holder.itemView.context,
|
||||
android.R.layout.simple_spinner_item, filter.values).apply {
|
||||
setDropDownViewResource(R.layout.spinner_item)
|
||||
}
|
||||
spinner.onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
|
||||
filter.state = position
|
||||
}
|
||||
spinner.setSelection(filter.state)
|
||||
}
|
||||
is Filter.Text -> {
|
||||
holder as EditTextHolder
|
||||
holder.wrapper.visibility = if (filter.name.isEmpty()) View.GONE else View.VISIBLE
|
||||
holder.wrapper.hint = filter.name
|
||||
holder.edit.setText(filter.state)
|
||||
holder.edit.addTextChangedListener(object : SimpleTextWatcher() {
|
||||
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
|
||||
filter.state = s.toString()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,153 +0,0 @@
|
||||
package eu.kanade.tachiyomi.ui.catalogue
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Typeface
|
||||
import android.support.graphics.drawable.VectorDrawableCompat
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import android.widget.AdapterView.OnItemSelectedListener
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.source.online.OnlineSource.Filter
|
||||
import android.text.TextWatcher
|
||||
import android.text.Editable
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.widget.TextView
|
||||
import eu.kanade.tachiyomi.util.inflate
|
||||
|
||||
|
||||
class FilterAdapter(val filters: List<Filter<*>>) : RecyclerView.Adapter<FilterAdapter.ViewHolder>() {
|
||||
private companion object {
|
||||
const val HEADER = 0
|
||||
const val CHECKBOX = 1
|
||||
const val TRISTATE = 2
|
||||
const val LIST = 3
|
||||
const val TEXT = 4
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FilterAdapter.ViewHolder {
|
||||
return when (viewType) {
|
||||
HEADER -> ViewHolder(SepText(parent))
|
||||
LIST -> ViewHolder(TextSpinner(parent.context))
|
||||
TEXT -> ViewHolder(TextEditText(parent.context))
|
||||
else -> ViewHolder(CheckBox(parent.context))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val filter = filters[position]
|
||||
when (filter) {
|
||||
is Filter.Header -> {
|
||||
if (filter.name.isEmpty()) (holder.view as SepText).textView.visibility = View.GONE
|
||||
else (holder.view as SepText).textView.text = filter.name
|
||||
}
|
||||
is Filter.CheckBox -> {
|
||||
var checkBox = holder.view as CheckBox
|
||||
checkBox.text = filter.name
|
||||
checkBox.isChecked = filter.state
|
||||
checkBox.setButtonDrawable(VectorDrawableCompat.create(checkBox.getResources(), R.drawable.ic_check_box_set, null))
|
||||
checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
|
||||
filter.state = isChecked
|
||||
}
|
||||
}
|
||||
is Filter.TriState -> {
|
||||
var triCheckBox = holder.view as CheckBox
|
||||
triCheckBox.text = filter.name
|
||||
val icons = arrayOf(VectorDrawableCompat.create(triCheckBox.getResources(), R.drawable.ic_check_box_outline_blank_24dp, null),
|
||||
VectorDrawableCompat.create(triCheckBox.getResources(), R.drawable.ic_check_box_24dp, null),
|
||||
VectorDrawableCompat.create(triCheckBox.getResources(), R.drawable.ic_check_box_x_24dp, null))
|
||||
triCheckBox.setButtonDrawable(icons[filter.state])
|
||||
triCheckBox.invalidate()
|
||||
triCheckBox.setOnCheckedChangeListener { buttonView, isChecked ->
|
||||
filter.state = (filter.state + 1) % 3
|
||||
triCheckBox.setButtonDrawable(icons[filter.state])
|
||||
triCheckBox.invalidate()
|
||||
}
|
||||
}
|
||||
is Filter.List<*> -> {
|
||||
var txtSpin = holder.view as TextSpinner
|
||||
if (filter.name.isEmpty()) txtSpin.textView.visibility = View.GONE
|
||||
else txtSpin.textView.text = filter.name + ":"
|
||||
txtSpin.spinner.adapter = ArrayAdapter<Any>(holder.view.context,
|
||||
android.R.layout.simple_spinner_item, filter.values)
|
||||
txtSpin.spinner.setSelection(filter.state)
|
||||
txtSpin.spinner.onItemSelectedListener = object : OnItemSelectedListener {
|
||||
override fun onItemSelected(parentView: AdapterView<*>, selectedItemView: View, pos: Int, id: Long) {
|
||||
filter.state = pos
|
||||
}
|
||||
|
||||
override fun onNothingSelected(parentView: AdapterView<*>) {
|
||||
}
|
||||
}
|
||||
}
|
||||
is Filter.Text -> {
|
||||
var txtEdTx = holder.view as TextEditText
|
||||
if (filter.name.isEmpty()) txtEdTx.textView.visibility = View.GONE
|
||||
else txtEdTx.textView.text = filter.name + ":"
|
||||
txtEdTx.editText.setText(filter.state)
|
||||
txtEdTx.editText.addTextChangedListener(object : TextWatcher {
|
||||
override fun afterTextChanged(s: Editable) {
|
||||
}
|
||||
|
||||
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
|
||||
}
|
||||
|
||||
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
|
||||
filter.state = s.toString()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return filters.size
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
return when (filters[position]) {
|
||||
is Filter.Header -> HEADER
|
||||
is Filter.CheckBox -> CHECKBOX
|
||||
is Filter.TriState -> TRISTATE
|
||||
is Filter.List<*> -> LIST
|
||||
is Filter.Text -> TEXT
|
||||
}
|
||||
}
|
||||
|
||||
class ViewHolder(val view: View) : RecyclerView.ViewHolder(view)
|
||||
|
||||
private class SepText(parent: ViewGroup) : LinearLayout(parent.context) {
|
||||
val separator: View = parent.inflate(R.layout.design_navigation_item_separator)
|
||||
val textView: TextView = TextView(context)
|
||||
|
||||
init {
|
||||
orientation = LinearLayout.VERTICAL
|
||||
textView.setTypeface(null, Typeface.BOLD);
|
||||
addView(separator)
|
||||
addView(textView)
|
||||
}
|
||||
}
|
||||
|
||||
private class TextSpinner(context: Context?) : LinearLayout(context) {
|
||||
val textView: TextView = TextView(context)
|
||||
val spinner: Spinner = Spinner(context)
|
||||
|
||||
init {
|
||||
addView(textView)
|
||||
addView(spinner)
|
||||
}
|
||||
}
|
||||
|
||||
private class TextEditText(context: Context?) : LinearLayout(context) {
|
||||
val textView: TextView = TextView(context)
|
||||
val editText: EditText = EditText(context)
|
||||
|
||||
init {
|
||||
addView(textView)
|
||||
editText.setSingleLine()
|
||||
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
|
||||
addView(editText)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package eu.kanade.tachiyomi.util
|
||||
|
||||
import android.content.res.Resources
|
||||
|
||||
val Int.pxToDp: Int
|
||||
get() = (this / Resources.getSystem().displayMetrics.density).toInt()
|
||||
|
||||
val Int.dpToPx: Int
|
||||
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
|
@ -0,0 +1,152 @@
|
||||
package eu.kanade.tachiyomi.widget
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.support.design.R
|
||||
import android.support.design.internal.ScrimInsetsFrameLayout
|
||||
import android.support.design.widget.TextInputLayout
|
||||
import android.support.v4.view.ViewCompat
|
||||
import android.support.v7.widget.LinearLayoutManager
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.support.v7.widget.TintTypedArray
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import eu.kanade.tachiyomi.util.inflate
|
||||
import eu.kanade.tachiyomi.R as TR
|
||||
|
||||
@Suppress("LeakingThis")
|
||||
@SuppressLint("PrivateResource")
|
||||
open class SimpleNavigationView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0)
|
||||
: ScrimInsetsFrameLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
/**
|
||||
* Max width of the navigation view.
|
||||
*/
|
||||
private var maxWidth: Int
|
||||
|
||||
/**
|
||||
* Recycler view containing all the items.
|
||||
*/
|
||||
protected val recycler = RecyclerView(context)
|
||||
|
||||
init {
|
||||
// Custom attributes
|
||||
val a = TintTypedArray.obtainStyledAttributes(context, attrs,
|
||||
R.styleable.NavigationView, defStyleAttr,
|
||||
R.style.Widget_Design_NavigationView)
|
||||
|
||||
ViewCompat.setBackground(
|
||||
this, a.getDrawable(R.styleable.NavigationView_android_background))
|
||||
|
||||
if (a.hasValue(R.styleable.NavigationView_elevation)) {
|
||||
ViewCompat.setElevation(this, a.getDimensionPixelSize(
|
||||
R.styleable.NavigationView_elevation, 0).toFloat())
|
||||
}
|
||||
|
||||
ViewCompat.setFitsSystemWindows(this,
|
||||
a.getBoolean(R.styleable.NavigationView_android_fitsSystemWindows, false))
|
||||
|
||||
maxWidth = a.getDimensionPixelSize(R.styleable.NavigationView_android_maxWidth, 0)
|
||||
|
||||
a.recycle()
|
||||
|
||||
recycler.layoutManager = LinearLayoutManager(context)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overriden to measure the width of the navigation view.
|
||||
*/
|
||||
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
|
||||
val width = when (MeasureSpec.getMode(widthSpec)) {
|
||||
MeasureSpec.AT_MOST -> MeasureSpec.makeMeasureSpec(
|
||||
Math.min(MeasureSpec.getSize(widthSpec), maxWidth), MeasureSpec.EXACTLY)
|
||||
MeasureSpec.UNSPECIFIED -> MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY)
|
||||
else -> widthSpec
|
||||
}
|
||||
// Let super sort out the height
|
||||
super.onMeasure(width, heightSpec)
|
||||
}
|
||||
|
||||
/**
|
||||
* Base view holder.
|
||||
*/
|
||||
abstract class Holder(view: View) : RecyclerView.ViewHolder(view)
|
||||
|
||||
/**
|
||||
* Separator view holder.
|
||||
*/
|
||||
class SeparatorHolder(parent: ViewGroup)
|
||||
: Holder(parent.inflate(R.layout.design_navigation_item_separator))
|
||||
|
||||
/**
|
||||
* Header view holder.
|
||||
*/
|
||||
class HeaderHolder(parent: ViewGroup)
|
||||
: Holder(parent.inflate(R.layout.design_navigation_item_subheader))
|
||||
|
||||
/**
|
||||
* Clickable view holder.
|
||||
*/
|
||||
abstract class ClickableHolder(view: View, listener: View.OnClickListener?) : Holder(view) {
|
||||
init {
|
||||
itemView.setOnClickListener(listener)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Radio view holder.
|
||||
*/
|
||||
class RadioHolder(parent: ViewGroup, listener: View.OnClickListener?)
|
||||
: ClickableHolder(parent.inflate(TR.layout.navigation_view_radio), listener) {
|
||||
|
||||
val radio = itemView.findViewById(TR.id.nav_view_item) as RadioButton
|
||||
}
|
||||
|
||||
/**
|
||||
* Checkbox view holder.
|
||||
*/
|
||||
class CheckboxHolder(parent: ViewGroup, listener: View.OnClickListener?)
|
||||
: ClickableHolder(parent.inflate(TR.layout.navigation_view_checkbox), listener) {
|
||||
|
||||
val check = itemView.findViewById(TR.id.nav_view_item) as CheckBox
|
||||
}
|
||||
|
||||
/**
|
||||
* Multi state view holder.
|
||||
*/
|
||||
class MultiStateHolder(parent: ViewGroup, listener: View.OnClickListener?)
|
||||
: ClickableHolder(parent.inflate(TR.layout.navigation_view_checkedtext), listener) {
|
||||
|
||||
val text = itemView.findViewById(TR.id.nav_view_item) as CheckedTextView
|
||||
}
|
||||
|
||||
class SpinnerHolder(parent: ViewGroup, listener: OnClickListener? = null)
|
||||
: ClickableHolder(parent.inflate(TR.layout.navigation_view_spinner), listener) {
|
||||
|
||||
val text = itemView.findViewById(TR.id.nav_view_item_text) as TextView
|
||||
val spinner = itemView.findViewById(TR.id.nav_view_item) as Spinner
|
||||
}
|
||||
|
||||
class EditTextHolder(parent: ViewGroup)
|
||||
: Holder(parent.inflate(TR.layout.navigation_view_text)) {
|
||||
|
||||
val wrapper = itemView.findViewById(TR.id.nav_view_item_wrapper) as TextInputLayout
|
||||
val edit = itemView.findViewById(TR.id.nav_view_item) as EditText
|
||||
}
|
||||
|
||||
protected companion object {
|
||||
const val VIEW_TYPE_HEADER = 100
|
||||
const val VIEW_TYPE_SEPARATOR = 101
|
||||
const val VIEW_TYPE_RADIO = 102
|
||||
const val VIEW_TYPE_CHECKBOX = 103
|
||||
const val VIEW_TYPE_MULTISTATE = 104
|
||||
const val VIEW_TYPE_TEXT = 105
|
||||
const val VIEW_TYPE_LIST = 106
|
||||
}
|
||||
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true" android:drawable="@drawable/ic_check_box_24dp" />
|
||||
<item android:drawable="@drawable/ic_check_box_outline_blank_24dp" />
|
||||
</selector>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<eu.kanade.tachiyomi.ui.catalogue.CatalogueNavigationView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/nav_view2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end"
|
||||
android:fitsSystemWindows="false"/>
|
||||
|
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/search_btn"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/action_search"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/reset_btn"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/action_reset"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/listPreferredItemHeightSmall"
|
||||
android:paddingLeft="?attr/listPreferredItemPaddingLeft"
|
||||
android:paddingRight="?attr/listPreferredItemPaddingRight"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:focusable="true">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/nav_view_item_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/nav_view_item"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical|start"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
|
||||
|
||||
</LinearLayout>
|
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/listPreferredItemHeightSmall"
|
||||
android:paddingLeft="?attr/listPreferredItemPaddingLeft"
|
||||
android:paddingRight="?attr/listPreferredItemPaddingRight"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:focusable="true">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/nav_view_item_wrapper"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical|start">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/nav_view_item"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
|
||||
|
||||
</LinearLayout>
|
Loading…
Reference in new issue