Как layout_width / height работает вместе с min / max width / height - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь понять, кто "выигрывает" при установке следующих атрибутов в xml: 1. layout_width против minWidth / maxWidth 2. layout_height против minHeight / maxHeight

Например, следующий код:

 <androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/pb_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/semi_transparent_black_for_pb_loader"
    android:elevation="20dp"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <ProgressBar
        android:id="@+id/pb_loading"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Я хочу понять, какой будет размер ProgressBar . кроме того, я нашел значение style = "? android: attr / progressBarStyle" . прикреплено здесь:

 <style name="Widget.ProgressBar">
    <item name="indeterminateOnly">true</item>
    <item name="indeterminateDrawable">@drawable/progress_medium_white</item>
    <item name="indeterminateBehavior">repeat</item>
    <item name="indeterminateDuration">3500</item>
    <item name="minWidth">48dip</item>
    <item name="maxWidth">48dip</item>
    <item name="minHeight">48dip</item>
    <item name="maxHeight">48dip</item>
    <item name="mirrorForRtl">false</item>
</style>

Теперь, может кто-нибудь сказать мне, почему при использовании wrap_content кажется, что размер определяется в соответствии с minWidth , maxWidth , minHeight , maxHeight , тогда как при настройке layout_width и layout_height ProgressBar в "0dp" тогда "преодолевает" за мин / макс и занимает много места на экране ?

1 Ответ

0 голосов
/ 23 марта 2020

Когда вы устанавливаете layout_width и layout_height в «0dp», он будет учитывать ограничения, которые определены. В вашем случае:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

Таким образом, он займет все пространство родительского макета. Это похоже на "match_parent".

Где с "wrap_content" он будет иметь размер по умолчанию в этом случае 48dp, как вы нашли в определении стиля.

...