Autore Topic: Dove posizionare la progressbar?  (Letto 350 volte)

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Dove posizionare la progressbar?
« il: 24 Febbraio 2015, 09:11:22 CET »
0
Salve, ho aggiunto un AsyncTask alla mia activity e prima che l'utente possa interagire ho impostato il caricamento di una progressbar. L'ho inserita nel layout tramite l'editor grafico di eclipse, facendo attenzione di posizionarla al centro sia verticalmente che orizzontalmente.
Andando però a vedere il codice ho visto che è stata inserita in mezzo ad altri widget e ora ho il problema che quando compare la progressbar, i TextView ed EditText che sono affianco vengono leggermente spostati, e quando scompare si rispostano anche i widget. Come evitare questo effetto? Come posso mettere la progressbar al centro dello schermo senza che stravolga il layout sottostante?

Questo è il layout della mia activity:

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/home"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="20dp"
            android:contentDescription="@string/mylogo"
            android:src="@drawable/myapp_logo" />   

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/textMethod"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:text="@string/method"
                android:textColor="@color/black" />

            <Spinner
                android:id="@+id/spinner1"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_below="@id/textSpinner"
                android:textSize="18sp"
                android:inputType="text"
                android:textColor="@color/black" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:layout_marginTop="20dp" >

            <TextView
                android:id="@+id/textMethod2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:text="@string/method2"
                android:textColor="@color/black" />

            <EditText
                android:id="@+id/editMethod2"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_below="@id/textMethod2"
                android:textSize="18sp"
                android:inputType="text"
                android:textColor="@color/black" />

            <ProgressBar
                android:id="@+id/progressBar1"
                style="?android:attr/progressBarStyleLarge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:layout_marginTop="20dp" >

            <TextView
                android:id="@+id/textTotal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:text="@string/total"
                android:textColor="@color/black" />

            <EditText
                android:id="@+id/editTotal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/textTotal"
                android:textSize="18sp"
                android:inputType="text"
                android:textColor="@color/black" />
        </RelativeLayout>

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"               
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            android:background="@drawable/yellow_button_event"
            android:onClick="send"
            android:text="@string/send" />
    </LinearLayout>
</ScrollView>

Offline tonno16

  • Utente storico
  • *****
  • Post: 1200
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Dove posizionare la progressbar?
« Risposta #1 il: 24 Febbraio 2015, 10:29:13 CET »
0
Guarda e prova a cambiare position della progress.
Se messa gone o invisibile non ricordo quale, all'utente non compare ma continua a occupare io suo spazio.

Io rifarei il layout da capo.

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Dove posizionare la progressbar?
« Risposta #2 il: 24 Febbraio 2015, 19:20:52 CET »
0
Guarda e prova a cambiare position della progress.
Se messa gone o invisibile non ricordo quale, all'utente non compare ma continua a occupare io suo spazio.
Sia con GONE che INVISIBLE non compare all'utente, fin quando non viene impostata su VISIBLE.
Nel primo caso non occupa spazio, nel senso c'è lo spazio vuoto necessaria ad occupare le dimensioni della progressbar.

Citazione
Io rifarei il layout da capo.
In realtà l'ho già rifatto due volte! In questi casi come di piazza una barra di caricamente sopra un layout così articolato?
Inoltre, come si fa in modo che fin quando c'è la progressbar tutto il resto (EditText, Spinner ecc...) non sia cliccabile dall'utente?

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Dove posizionare la progressbar?
« Risposta #3 il: 25 Febbraio 2015, 08:50:37 CET »
0
Inserisci un LinearLayout in fondo allo stack degli elementi del layout, e definiscilo con dimensione match-parent (così occupa tutto lo schermo)
Dopo di che, metti la progress bar al centro del LinearLayout, così non è agganciata a nessuno degli altri elementi del layout, e quindi non li sposta.
Infine, il View.gone, devi settarlo anche nel linearlayout.
In teoria, mettendo questo linear in alto, dovresti anche render il sotto non cliccabile

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Dove posizionare la progressbar?
« Risposta #4 il: 25 Febbraio 2015, 13:24:51 CET »
0
Ho fatto come mi hai detto (mettendo il LinearLayout in alto) ed effettivamente ho risolto.
Resta solo il problema che i campi del form restano cliccabili mentre gira la rotellina della progressbar...
Qualche altra idea?

Intanto ti ringrazio per il tuo aiuto ;-)

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Dove posizionare la progressbar?
« Risposta #5 il: 25 Febbraio 2015, 13:37:08 CET »
0
Beh, non è la soluzione migliore, ma mentre c'è la rotellina, puoi semplicemente per ogni elemento cliccabile, settare il flag enabled=false
e quando setti il layout invisibile, allora li rendi enable = true.

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Dove posizionare la progressbar?
« Risposta #6 il: 25 Febbraio 2015, 15:43:34 CET »
0
Personalmente tengo due ViewGroup (non ricordo se LinearLayout o cosa), una contiene solo la progressbar, l'altra contiene tutto il resto. Agisco sulla visibilità di uno o dell'altra e faccio apparire/sparire la progressbar, oppure tutto il resto dell'interfaccia utente.

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Dove posizionare la progressbar?
« Risposta #7 il: 25 Febbraio 2015, 23:04:33 CET »
0
Risolto inglobando la ProgressBar in un RelativeLayout settato a gone come visibility e settando null come listener:

Codice: [Seleziona]
progress = (RelativeLayout) findViewById(R.id.progressBarlayout);
progress.setOnClickListener(null);
progress.setVisibility(View.VISIBLE);

Grazie per le vostre risposte ;)