Mi piace l'approccio di Kostya But's answer.
Basandosi su questo, ecco un paio di idee per rendere la stessa sovrapposizione facilmente riutilizzabile tutta la vostra applicazione:
valutare l'ipotesi di sovrapposizione FrameLayout in un file di layout separato, per esempiores/layout/include_progress_overlay
:.
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/progress_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.4"
android:animateLayoutChanges="true"
android:background="@android:color/black"
android:clickable="true"
android:visibility="gone">
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"/>
</FrameLayout>
(Una cosa ho aggiunto nella sovrapposizione FrameLayout è android:clickable="true"
Così, mentre è mostrata la sovrapposizione, impedisce scatti che passano attraverso di elementi dell'interfaccia utente sotto di esso, almeno nella mia casi tipici di utilizzo questo è quello che. vuole)
quindi includere dove necessario:.
<!-- Progress bar overlay; shown while login is in progress -->
<include layout="@layout/include_progress_overlay"/>
E in codice:
View progressOverlay;
[...]
progressOverlay = findViewById(R.id.progress_overlay);
[...]
// Show progress overlay (with animation):
AndroidUtils.animateView(progressOverlay, View.VISIBLE, 0.4f, 200);
[...]
// Hide it (with animation):
AndroidUtils.animateView(progressOverlay, View.GONE, 0, 200);
Con codice di animazione estratta in un metodo util:
/**
* @param view View to animate
* @param toVisibility Visibility at the end of animation
* @param toAlpha Alpha at the end of animation
* @param duration Animation duration in ms
*/
public static void animateView(final View view, final int toVisibility, float toAlpha, int duration) {
boolean show = toVisibility == View.VISIBLE;
if (show) {
view.setAlpha(0);
}
view.setVisibility(View.VISIBLE);
view.animate()
.setDuration(duration)
.alpha(show ? toAlpha : 0)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setVisibility(toVisibility);
}
});
}
(qui utilizzando view.animate()
, aggiunto nel API 12, invece di AlphaAnimation
.)
Siete alla ricerca di questo? destra ? http://stackoverflow.com/questions/2176922/how-to-create-transparent-activity-in-android –
@ M-WaJeEh Come aggiungo testo e/o grafica a quell'attività? –
come se si aggiungesse ad un normale 'Activity'. È solo una normale attività con un tema diverso. –