Как установить ProgressBar в центре экрана в макете кадра?

Я сделал это, и он работает неплохо, не стесняйтесь изменять подпись метода в соответствии с вашими типами переменных или также с типом возврата, возможно, вы хотели бы получить объект TimeSpan или только секунды ...

    /// 
    /// Calculates the eta.
    /// 
    /// When the process started
    /// How many items are being processed
    /// How many items are done
    /// A string representing the time left
    private string CalculateEta(DateTime processStarted, int totalElements, int processedElements)
    {
        int itemsPerSecond = processedElements / (int)(processStarted - DateTime.Now).TotalSeconds;
        int secondsRemaining = (totalElements - processedElements) / itemsPerSecond;

        return new TimeSpan(0, 0, secondsRemaining).ToString();
    }

Вам потребуется инициализировать переменную DateTime при запуске обработки и отправить ее методу на каждой итерации.

Не забывайте, что, вероятно, ваше окно будет заблокировано, если процесс довольно длинный, поэтому, когда вы помещаете возвращаемое значение в элемент управления, не забудьте использовать его метод .Refresh().

Если вы используете потоки, вы можете попытаться установить текст используя метод Invoke(Action), было бы легче использовать этот метод расширения для легкого архивирования .

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

Надеюсь, что это кому-то поможет.

23
задан Karu 29 April 2014 в 04:22
поделиться

9 ответов

В макете XML для вашего индикатора выполнения установите android:layout_gravity (вместо android:gravity) значение "center"

android:layout_gravity = "center"
38
ответ дан Pedro Lopes 29 April 2014 в 04:22
поделиться

Использовать

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_centerInParent="true"

Пример:

 <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:layout_centerVertical="true"
     android:layout_centerInParent="true" />

android:gravity атрибут не поддерживается в ProgressBar

40
ответ дан Wédney Yuri 29 April 2014 в 04:22
поделиться

FrameLayout не имеет android:gravity. Вам нужно установить android:layout_gravity вместо ProgressBar.

13
ответ дан Karu 29 April 2014 в 04:22
поделиться
<ProgressBar
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ***android:layout_gravity="center"*** /> 

добавить эту строку в

 <ProgressBar
              android:layout_gravity="center" />
9
ответ дан Arun A S 29 April 2014 в 04:22
поделиться

Просто измените свой Layout на RelativeLayout и добавьте android: layout_centerInParent = "true" в свой ProgressBar.

<ProgressBar
android:id="@+id/progBar"
android:indeterminateDrawable="@drawable/my_progress_indeterminate"
android:layout_height="50dp" 
android:layout_centerInParent="true"
android:layout_width="50dp">
</ProgressBar>
3
ответ дан user3777836 29 April 2014 в 04:22
поделиться

Начиная с 2018 года, вам нужно установить следующий атрибут:

android:layout_centerInParent="true"
1
ответ дан Manpreet 29 April 2014 в 04:22
поделиться

Рабочий раствор по состоянию на 2017 год

android:layout_gravity="center"
0
ответ дан Higher Coding 29 April 2014 в 04:22
поделиться
<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_centerInParent="true"
    />
0
ответ дан YEYE 29 April 2014 в 04:22
поделиться

Вы должны установить положение в пикселях, так как в структуре кадра различные компоненты перекрывают друг друга. Итак, вы можете попробовать это, установив пиксели в dip.

-3
ответ дан Nikki 29 April 2014 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: