Что это значит layout_width / heigth = wrap_content в индикаторе выполнения и в - PullRequest
0 голосов
/ 14 апреля 2020

я не могу понять значение wrap_content для элементов представления (например, ProgressBar , Switch , примитив View с фоном - это по какой-то причине занимает все доступное место на экране), это не тривиально, например TextView , что wrap_content означает «быть таким же высоким и широким», как текст внутри вас ». Кто-нибудь, помогите мне понять это?

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/prog_bar_containter"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@color/black"
    android:elevation="20dp"
    app:layout_constraintBottom_toBottomOf="@+id/rc"
    app:layout_constraintEnd_toEndOf="@+id/rc"
    app:layout_constraintStart_toStartOf="@+id/rc"
    app:layout_constraintTop_toTopOf="@+id/rc">

    <ProgressBar
        android:id="@+id/prog_bar"
        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>

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Если вы хотите узнать, какова ширина и высота компонента, используемого в макете, вы можете использовать этот код. Здесь высота и ширина индикатора выполнения имеет значение wrap_content, это означает, что его ширина и высота имеют размеры по умолчанию, и мы хотим знать, сколько стоят эти размеры по умолчанию. Результат в px.

Activity_main. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
    <ProgressBar
        android:id="@+id/progressbar"
        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>

MainActivity.kt

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        progressbar.post(Runnable {
            val a= progressbar.getWidth()
            val b=progressbar.getHeight()
            Log.d("abc", a.toString())
            Log.d("abc", b.toString())
        })
    }
}
0 голосов
/ 14 апреля 2020

В каждом компоненте вида вы найдете метод onMeasure здесь разработчик вычисляет меру. Размер представления, при котором вид будет отображаться, если вы укажете c высоту ширины, вы сделаете вид таким же, как если бы вы добавили пользовательскую высоту ширины. не очень хорошо (извините за мой английский sh)

...