android - 尽管有 ProgressBar,但 FloatingActionButton 可见
问题描述
我有一个带有一个 FAB 和一个自定义进度条的布局,所有这些都在 CoordinatorLayout 内。我的进度条在数据加载期间隐藏了所有布局内容,但不隐藏 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>
我想在 Progressbar 可见时隐藏 FAB,在布局中设置正确的属性,而不是以编程方式执行此操作。进度条必须与 FAB 重叠。
解决方案
一、隐藏进度条的可见性
<ProgressBar
android:id="@+id/Progressbar1"
android:visibility="invisible"
style="@style/MyStyle3" />
之后,当您需要使用它并隐藏 FAB 按钮时,使进度条可见
progressBar.setVisibility(View.VISIBLE);
FAB1.setVisibility(View.INVISIBLE);
您可以将 FAB 可见性设置为GONE
而不是和之间INVISIBLE
的区别是GONE
INVISIBLE
无形的:
这个视图是不可见的,但它仍然占用空间用于布局。
消失:
此视图是不可见的,并且它不占用任何空间用于布局目的。