При использовании SwipeRefreshLayout в сочетании с оверлейным режимом ActionBar анимация загрузки будет отображаться за панелью действий, делая ее почти невидимой.
Есть ли что-нибудь, что я могу сделать, чтобы показать его поверх панели действий?
При использовании SwipeRefreshLayout в сочетании с оверлейным режимом ActionBar анимация загрузки будет отображаться за панелью действий, делая ее почти невидимой.
Есть ли что-нибудь, что я могу сделать, чтобы показать его поверх панели действий?
В версии Material Design библиотеки appcompat-v7 (v21.0.0) SwipeRefreshLayout
получает метод установки смещения Прогресс выполнения.
public void setProgressViewOffset (булевская шкала, int start, int end)
Позиция начала и останова индикатора обновления всегда располагается вблизи верхней части освежающего содержимого. Эта позиция является согласованным местоположением, но может быть отрегулирована в любом направлении в зависимости от наличия или отсутствия панели инструментов или панели действий.
Параметры
ШкалаУстановите значение "Истина", если нет представления в более высоком порядке z, чем в случае, когда установлен индикатор производительности.
start Смещение в пикселях от вершины этого представления, на котором должен появиться счетчик прогресса.
end Смещение в пикселях от вершины этого вида, при котором ускоритель хода должен успокоиться после успешного жестового салфетки.
Попробуйте этот код:
int top_to_padding=100;
swipe_refresh_layout.setProgressViewOffset(false, 0,top_to_padding);
Я надеюсь, что его работа для вас.
ответ Виджая Раджпута работает для меня, но проблема была только на Киткате или на высоте, поэтому я включил:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
swipeLayout.setProgressViewOffset(false, 0,100);
}
EDIT
Это было лучшее решение перед v21 библиотеки appcompat-v7. Если вы используете v21 или новее, проверьте одобренный ответ. Если вы используете appcompat-v7 < 21 API это все равно поможет вам.
Вы можете легко это исправить, скопировав SwipeRefreshLayout (и его зависимости) в свой проект и изменив там, где отображается индикатор выполнения, добавив верхний край.
Чтобы облегчить для всех, я выпустил библиотеку с внедренной маркой. Взгляните на это: https://github.com/Naroh091/SwipeRefreshLayoutOverlay
Надеюсь, что это поможет!
В настоящее время я сталкивался с этим, когда обновлял свою зависимость от appomppat 19.1.0 до 21.0.0 и не делал никаких изменений кода.
Это действительно известная проблема с SwipeRefreshLayout в appcompat 21.0.0.
Посмотрите здесь обходное решение: https://code.google.com/p/android/issues/detail?id=77712
Вместо того, чтобы устанавливать paddingTop на SwipeRefreshLayout, установка layout_marginTop заставит индикатор выполнения видимым:
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize">