Я просто изменяю порядок в xml, и это работает.
activity_home.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/content_main" />
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottom_app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:backgroundTint="@color/colorPrimary"
app:fabAlignmentMode="center"
app:navigationIcon="@drawable/ic_menu"
app:hideOnScroll="true"
app:layout_scrollFlags="scroll|enterAlways"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_anadir"
app:tint="@null"
app:layout_anchor="@id/bottom_app_bar" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
content_main.xml:
<RelativeLayout
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="match_parent"
android:background="@android:color/background_light"
android:fitsSystemWindows="true">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_light"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/main.appbar"
android:layout_width="match_parent"
android:layout_height="200dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true"
android:background="@drawable/shape_coordinator"
>
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_width="match_parent"
android:layout_height="300dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/nestedScrollView"
tools:ignore="PrivateResource"
app:layout_behavior="">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinatorLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Очевидно, что внешний этаж не является избыточным, поскольку, например, sqrt (2)
не является целым числом, и, следовательно, floor (sqrt (2)) ≠ sqrt (2)
.
Также легко увидеть, что sqrt (floor (x)) ≠ sqrt (x)
для нецелого числа x
. Поскольку sqrt
является монотонной функцией.
Нам нужно выяснить, floor (sqrt (floor (x))) == floor (sqrt (x))
для все рациональные числа (или действительные числа).
Докажем, что если sqrt (n)
sqrt (n + 1)
м, п
. Легко видеть, что
n<m^2 ⇒ n+1 < m^2+1 < m^2+2m+1 = (m+1)^2
Таким образом, по тому факту, что sqrt
является монтоном, мы имеем, что
sqrt(n) < m -> sqrt(n+1) < m+1 -> sqrt(n+eps)<m+1 for 0<=eps<1
Следовательно floor (sqrt (n)) = floor (sqrt (n + eps))
для всех 0
n
. В противном случае предположим, что этаж (sqrt (n)) = m
и floor (sqrt (n + eps)) = m + 1
, и у вас есть случай, когда sqrt (n)
sqrt (n + eps)> = m + 1
.
Итак, предполагая, что требуется внешний этаж
, внутренний floor
является избыточным.
Иначе говоря, всегда верно, что
floor(sqrt(n)) == floor(sqrt(floor(n)))
А как насчет внутреннего ceil
?
Легко увидеть, что floor ( sqrt (n)) ≠ этаж (sqrt (ceil (n)))
. Например,
floor(sqrt(0.001))=0, while floor(sqrt(1))=1
Однако вы можете аналогичным образом доказать, что
ceil(sqrt(n)) == ceil(sqrt(ceil(n)))
Внутренний избыточен, внешний, конечно, нет.
Внешний не является избыточным, потому что квадратный корень из числа x дает целое число, только если x является квадратное число.
Внутреннее число является избыточным, потому что квадратный корень для любого числа в интервале [x, x + 1 [(где x - целое число) всегда лежит в пределах интервала [floor (sqrt (x)), ceil (sqrt (x)) [и, следовательно, вам не нужно сводить число к полу перед извлечением из него квадратного корня, если вас интересует только целая часть результата.
Интуитивно я считаю, что внутреннее значение избыточно, но я не могу это доказать.
Вам не разрешено голосовать за меня, если вы не предоставите значение x, которое доказывает, что я неправильно. 8 -)
Изменить: См. Комментарий v3 к этому ответу для доказательства - спасибо, v3!
Внутренний этаж является избыточным. Доказательство от противного:
Предположим, что внутренний этаж не является лишним. Это будет означать, что:
floor(sqrt(x)) != floor(sqrt(x+d))
для некоторых x и d, где floor (x) = floor (x + d). Тогда нам нужно рассмотреть три числа: a = sqrt (x), b = этаж (sqrt (x + d)), c = sqrt (x + d). b - целое число, а a
Если x - целое число, то внутренний этаж является избыточным.
Если x не является целым числом, то ни то, ни другое не является избыточным.
Внешний этаж не является избыточным. Контрпример: x = 2.
этаж (sqrt (floor (2))) = floor (sqrt (2)) = floor (1.41 ...)
Без внешнего этажа результат был бы 1,41 ...
Если бы внутренний этаж не был избыточным, мы бы ожидали, что этот этаж (sqrt (n))! = Floor (sqrt (m)), где m = floor (n)
обратите внимание, что n - 1 floor (sqrt (n))! = floor (sqrt (m)) требует, чтобы значения sqrt (n) и sqrt (m) различались как минимум на 1,0 однако не существует значений n, для которых sqrt (n) отличается по крайней мере на 1,0 от sqrt (n + 1), поскольку для всех значений от 0 до 1 sqrt этого значения по определению <1. , для всех значений n, этаж (sqrt (n)) == floor (sqrt (n + 1)). Это противоречит исходному предположению. Таким образом, внутренний этаж является избыточным.