Почему высота карты игнорируется в layout_height="wrap_content"?

Я создаю приложение и перестраиваю элемент управления в Xamarin.Android. Элемент управления работает, как и ожидалось, но я заметил, что если я выберу android:layout_height = "wrap_content", высота исчезнет:

Почему высота карты игнорируется в layout_height="wrap_content"?

Но если я выберу android:layout_height = "match_parent", он будет работать так, как ожидалось:

Почему высота карты игнорируется в layout_height="wrap_content"?

Вы можете спросить, а почему бы вам не использовать match_parent, и причина в том, что этот элемент управления является панелью поиска и частично блокирует ее обычную работу:

Почему высота карты игнорируется в layout_height="wrap_content"?

Поскольку все кнопки, которые вы видели, стали недоступны, потому что панель поиска полностью завладела представлением, и не имеет значения, где я нажимаю, я вижу только параметры:

Почему высота карты игнорируется в layout_height="wrap_content"?

Код 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

Кроме того, это код, в котором я основал свою собственную версию:

https://github.com/mancj/MaterialSearchBar

1
0
294
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Добавьте немного запаса. Dropshadow на самом деле возникает за пределами карты, за ее пределами. Если вы добавите поле, вы увидите его снова.

+1 для Гейба, попробуйте больше, иногда это меняется. Установите реальное значение для панели поиска, например android:layout_height = "40dp". Вероятно андроиду нужно знать реальную высоту, чтобы правильно отрисовывать вид

Turvy 02.07.2019 00:06

Привет, @FlorentBreton, хорошая идея, но если я это сделаю, то результаты не будут отображаться (я уже пробовал в прошлом), и видна только полоса, тогда она не работает должным образом.

Federico Navarrete 02.07.2019 11:42
Ответ принят как подходящий

Взгляните на android:clipToPadding (документы) и android:clipChildren (документы).

Привет, Раймо, можешь объяснить, как это будет работать в данном случае?

Federico Navarrete 02.07.2019 11:43

Я проверил, и у меня нет ни одного из этих свойств в коде.

Federico Navarrete 02.07.2019 12:26

Вы должны поместить «android:clipChildren = "false"» в родитель панели поиска или попробовать добавить «android:clipToPadding = "false"» в саму панель поиска.

Raimo 02.07.2019 12:29

Я дам вам знать мои выводы в конце дня.

Federico Navarrete 02.07.2019 12:41

@FedericoNavarrete, это приятно слышать. Рад, что это сработало.

Raimo 02.07.2019 23:33

Другие вопросы по теме