Я создаю приложение и перестраиваю элемент управления в Xamarin.Android. Элемент управления работает, как и ожидалось, но я заметил, что если я выберу android:layout_height = "wrap_content"
, высота исчезнет:
Но если я выберу android:layout_height = "match_parent"
, он будет работать так, как ожидалось:
Вы можете спросить, а почему бы вам не использовать match_parent
, и причина в том, что этот элемент управления является панелью поиска и частично блокирует ее обычную работу:
Поскольку все кнопки, которые вы видели, стали недоступны, потому что панель поиска полностью завладела представлением, и не имеет значения, где я нажимаю, я вижу только параметры:
Код CardView
или этого раздела кода следующий:
<?xml version = "1.0" encoding = "utf-8"?>
<merge xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
tools:ignore = "ContentDescription"
xmlns:tools = "http://schemas.android.com/tools">
<android.support.v7.widget.CardView
android:id = "@+id/mt_container"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_centerHorizontal = "true"
app:cardBackgroundColor = "@color/searchBarPrimaryColor"
app:cardCornerRadius = "2dp"
app:cardElevation = "2dp"
app:cardPreventCornerOverlap = "false">
<RelativeLayout
android:id = "@+id/root"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "vertical">
<ImageView
android:id = "@+id/mt_menu"
android:layout_width = "48dp"
android:layout_height = "48dp"
android:layout_alignParentEnd = "true"
android:layout_alignParentRight = "true"
android:background = "?attr/selectableItemBackgroundBorderless"
android:clickable = "true"
android:padding = "12dp"
android:scaleType = "centerCrop"
android:src = "@drawable/ic_dots_vertical_black_48dp"
android:visibility = "gone"
android:focusable = "true" />
<ImageView
android:id = "@+id/mt_nav"
android:layout_width = "48dp"
android:layout_height = "48dp"
android:background = "?selectableItemBackgroundBorderless"
android:clickable = "true"
android:scaleType = "center"
android:visibility = "visible"
app:srcCompat = "@drawable/ic_menu_black_24dp"
android:focusable = "true" />
<TextView
android:id = "@+id/mt_placeholder"
android:layout_width = "wrap_content"
android:layout_height = "48dp"
android:layout_marginLeft = "16dp"
android:layout_toLeftOf = "@+id/mt_search"
android:layout_toRightOf = "@+id/mt_nav"
android:fontFamily = "sans-serif"
android:gravity = "center_vertical"
android:maxLines = "1"
android:textAppearance = "?android:attr/textAppearanceMedium"
android:textColor = "@color/searchBarPlaceholderColor"
android:textStyle = "bold"
android:visibility = "visible"
tools:text = "PlaceHolder"
android:layout_marginStart = "16dp"
android:layout_toStartOf = "@+id/mt_search"
android:layout_toEndOf = "@+id/mt_nav" />
<LinearLayout
android:id = "@+id/inputContainer"
android:layout_width = "match_parent"
android:layout_height = "48dp"
android:layout_toStartOf = "@+id/mt_menu"
android:layout_toLeftOf = "@+id/mt_menu"
android:gravity = "center_vertical"
android:orientation = "horizontal"
android:visibility = "gone">
<ImageView
android:id = "@+id/mt_arrow"
android:layout_width = "48dp"
android:layout_height = "48dp"
android:background = "?attr/selectableItemBackground"
android:clickable = "true"
android:padding = "12dp"
android:src = "@drawable/ic_arrow_left_black_48dp"
android:visibility = "visible"
android:focusable = "true" />
<EditText
android:id = "@+id/mt_editText"
android:layout_width = "0dp"
android:layout_height = "match_parent"
android:layout_marginLeft = "8dp"
android:layout_marginRight = "8dp"
android:layout_weight = "1"
android:background = "@android:color/transparent"
android:hint = "@string/action_search"
android:imeOptions = "flagNoExtractUi|actionSearch"
android:inputType = "text"
android:maxLines = "1"
android:textAppearance = "?android:attr/textAppearanceMedium"
android:visibility = "visible"/>
<ImageView
android:id = "@+id/mt_clear"
android:layout_width = "48dp"
android:layout_height = "48dp"
android:background = "?selectableItemBackgroundBorderless"
android:padding = "12dp"
android:src = "@drawable/ic_close_black_48dp" />
</LinearLayout>
<RelativeLayout
android:id = "@+id/last"
android:layout_width = "match_parent"
android:layout_height = "0dp"
android:layout_alignParentStart = "true"
android:layout_alignParentLeft = "true"
android:layout_marginTop = "48dp">
<View
android:id = "@+id/mt_divider"
android:layout_width = "match_parent"
android:layout_height = "1dp"
android:background = "@color/searchBarDividerColor" />
<android.support.v7.widget.RecyclerView
android:id = "@+id/mt_recycler"
android:layout_width = "match_parent"
android:layout_height = "wrap_content" />
</RelativeLayout>
<ImageView
android:id = "@+id/mt_search"
android:layout_width = "48dp"
android:layout_height = "48dp"
android:layout_alignParentEnd = "true"
android:layout_alignParentRight = "true"
android:background = "?selectableItemBackgroundBorderless"
android:clickable = "false"
android:padding = "12dp"
android:scaleType = "centerCrop"
android:src = "@drawable/ic_magnify_black_48dp"
android:visibility = "visible" />
<View
android:id = "@+id/mt_menu_divider"
android:layout_width = "1dp"
android:layout_height = "48dp"
android:layout_alignParentRight = "true"
android:layout_marginRight = "48dp"
android:background = "@color/searchBarDividerColor"
android:clickable = "false"
android:visibility = "gone"
android:layout_alignParentEnd = "true"
android:layout_marginEnd = "48dp" />
</RelativeLayout>
</android.support.v7.widget.CardView>
</merge>
И вот как я вызываю элемент управления в своем XML:
<tk.supernovaic.MaterialSearchBar.MaterialSearchBar
android:id = "@+id/searchBar"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_margin = "8dp"
app:mt_navIconEnabled = "true"
app:mt_placeholder = "@string/HeaderByTime" />
были*Что я пробовал до сих пор?**
Я попытался добавить высоту вручную к предыдущему элементу управления, и это не сработало:
android:elevation = "9dp"
Кроме того, я попытался установить определенную высоту:
android:layout_height = "52dp"
И тогда результаты не отображались.
Если вы хотите углубиться в управление, вы можете проверить мой репозиторий:
https://github.com/FANMixco/Xamarin-SearchBar/tree/master/tk.supernovaic.MaterialSearchBar
Кроме того, это код, в котором я основал свою собственную версию:
Добавьте немного запаса. Dropshadow на самом деле возникает за пределами карты, за ее пределами. Если вы добавите поле, вы увидите его снова.
Привет, @FlorentBreton, хорошая идея, но если я это сделаю, то результаты не будут отображаться (я уже пробовал в прошлом), и видна только полоса, тогда она не работает должным образом.
Взгляните на android:clipToPadding
(документы) и android:clipChildren
(документы).
Привет, Раймо, можешь объяснить, как это будет работать в данном случае?
Я проверил, и у меня нет ни одного из этих свойств в коде.
Вы должны поместить «android:clipChildren = "false"» в родитель панели поиска или попробовать добавить «android:clipToPadding = "false"» в саму панель поиска.
Я дам вам знать мои выводы в конце дня.
@FedericoNavarrete, это приятно слышать. Рад, что это сработало.
+1 для Гейба, попробуйте больше, иногда это меняется. Установите реальное значение для панели поиска, например android:layout_height = "40dp". Вероятно андроиду нужно знать реальную высоту, чтобы правильно отрисовывать вид