Android – Как сделать так, чтобы индикатор progressBar касался нижней границы экрана

Мне нужен ProgressBar, который касается нижней границы экрана, но с помощью этого фрагмента кода я получаю небольшое пространство между полосой и границей экрана:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".Whatever" >

<ProgressBar
    android:id="@+id/progressBar1"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true" />

</RelativeLayout>

И вот что я получаю:

это пространство, которое я все еще получаю

есть ли способ удалить это пространство?


person David Novák    schedule 14.03.2014    source источник
comment
Вы пытались установить нижнее поле на ноль?   -  person Eenvincible    schedule 15.03.2014
comment
У меня есть, не помогает.   -  person David Novák    schedule 15.03.2014
comment
Привет, Дэвид, ты решил эту проблему?   -  person Heobien    schedule 30.10.2014
comment
Привет, я не сделал, потому что я ушел из этого проекта.   -  person David Novák    schedule 30.10.2014
comment
Спасибо за ответы. на соответствующем (читай help-›tour) и неправильном английском, так что в следующий раз просто не болтай.   -  person Anthon    schedule 04.05.2015


Ответы (5)


Сделайте высоту родительского макета как fill_parent и установите высоту индикатора выполнения как match_parent.

person Chiradeep    schedule 14.03.2014

Я придумал решение использовать пользовательский progressDrawable без каких-либо дополнений, подобных этому:

progress_bar_progress.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/progress">
    <clip>
        <shape>
            <solid android:color="@color/accent"/>
        </shape>
    </clip>
</item>

And then reference it in your ProgressBar:

<ProgressBar
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:layout_alignParentBottom="true"
    android:background="#1A000000"
    style="?android:attr/progressBarStyleHorizontal"
    android:indeterminateOnly="false"
    android:progressDrawable="@drawable/progress_bar_progress" />
person tobi_b    schedule 10.11.2016

Вот хак, который может сработать:

  • Создайте LinearLayout для всего представления; установите для него ширину и высоту fill_parent и вертикальную ориентацию
  • Теперь, когда вы знаете, сколько компонентов будет в вашем представлении, просто придайте им нужное количество весов; кроме последнего индикатора прогресса
  • Для индикатора прогресса сделайте его самым маленьким из всех; таким образом, он будет проталкиваться до самого дна;
  • Наконец, использование заполнения для уменьшения пространства между ним и окном (внизу)

Это то, о чем я могу думать, если вы не хотите создать собственный стиль для индикатора выполнения, как указано в комментарии выше.

person Eenvincible    schedule 14.03.2014

Я нашел обходной путь. В основном я добавляю layout_marginBottom="-4dp" в свой ProgressBar, заворачиваю его в RelativeLayout и выравниваю по нижней части родительского представления. Эти изменения могут сломать ваше приложение в будущем. Для лучшего Решение спроектируйте настраиваемый индикатор выполнения с вашим собственным настраиваемым рисунком, который вы можете правильно выровнять и который занимает меньше места на холсте по сравнению с progressBarStyleHorizontal.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true">

<ImageButton
android:id="@+id/imageButton”
android:layout_width="40dip"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:contentDescription="@string/descrp"
android:scaleType="center"
android:src="@drawable/some_drawable”
android:visibility="visible" />

<TextView
android:id="@+id/textview”
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dip"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:textColor="#FFFFFF"
android:textStyle="bold" />
//changes
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<ProgressBar
    android:id="@+id/some_other_id"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="-4dp" />
</RelativeLayout></RelativeLayout>

Вот ссылка

person luckysing_noobster    schedule 04.05.2015

Я уже некоторое время борюсь с этим. Мой вывод: невозможно заархивировать это поведение с помощью XML для произвольных размеров экрана. На некоторых экранах индикатор выполнения всегда будет немного смещен.

Мое простое решение: установите Y индикатора прогресса программно на Y суперпредставления/макета.

protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);

    progressBar.setY(layout.getY() - progressBar.getHeight() / 2);
}

Работает как шарм и для всех размеров экрана.

person Malte    schedule 12.03.2016