У меня есть макет с одним FAB и пользовательским Progressbar, все внутри CoordinatorLayout. Моя панель Progressbar скрывает все содержимое макета во время загрузки данных, но не FAB.
Я пытался переместить Progressbar во все позиции макета, но FAB всегда виден.
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/Recycler1"
style="@style/MyStyle1"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/FAB1"
style="@style/MyStyle2"
app:srcCompat="@drawable/ic_event_black_24dp" />
<ProgressBar
android:id="@+id/Progressbar1"
style="@style/MyStyle3" />
Здесь код моей активности
public class MyFragment extends Fragment {
private View view;
private RecyclerView Recycler1;
private ProgressBar Progressbar1;
...
private Context context;
private List<...> array_data;
private RequestQueue queue;
...
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = getActivity();
view = inflater.inflate(R.layout.my_fragment, container, false);
Progressbar1 = view.findViewById(R.id.Progressbar1);
FloatingActionButton FAB1 = view.findViewById(R.id.FAB1);
...
Recycler1 = view.findViewById(R.id.Recycler1);
Recycler1.setHasFixedSize(true);
Recycler1.setLayoutManager(new LinearLayoutManager(context));
...
// Set Volley queue
queue = Volley.newRequestQueue(context);
return view;
}
@Override
public void onResume() {
super.onResume();
Progressbar1.setVisibility(View.VISIBLE);
getData();
}
private void getData() {
array_data = new ArrayList<>();
JsonArrayRequest jsArrRequest = new JsonArrayRequest(
...
@Override
public void onResponse(JSONArray response) {
try {
...
Progressbar1.setVisibility(View.GONE);
} catch (Exception e) { e.printStackTrace(); }
}
}, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { ... }})
{ @Override public Map<String, String> getHeaders() { return ... } };
queue.add(jsArrRequest);
}
}
РЕДАКТИРОВАТЬ Я забыл написать, что фон моего пользовательского индикатора выполнения не прозрачен, поэтому он автоматически перекрывает все остальные элементы в макете.
<style name="MyStyle3">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_gravity">center</item>
<item name="android:background">@color/colorWhite</item>
<item name="android:indeterminateDrawable">@drawable/progress_bar</item>
</style>
Пользовательское отображение индикатора выполнения:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/progress">
<rotate
android:toDegrees="1800">
<shape
android:innerRadius="25dp"
android:shape="ring"
android:thickness="4dp"
android:useLevel="false">
<gradient
android:endColor="@color/colorBlue"
android:startColor="@color/colorWhite"
android:type="sweep" />
</shape>
</rotate>
</item>
</layer-list>
Я хочу скрыть FAB, когда Progressbar виден, устанавливая правильные свойства в макете и не делая этого программно. Прогрессбар должен перекрывать FAB.