Autore Topic: Modificare il colore del background permanentemente  (Letto 1115 volte)

Offline blastor

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Modificare il colore del background permanentemente
« il: 17 Febbraio 2013, 19:59:18 CET »
0
Salve a tutti, premetto che programmo in android da circa 2 ore, anche se ho alle spalle diversi anni di programmazione in altri linguaggi, quindi potrei dire qualche scemenza qua e lì tra qualche riga...

Il mio problema è questo: sto smanettando un po per capire il funzionamento dell'xml, classi ecc...

Ho notato che se avvio un activity, modifico il color background tramite bottone, avvio una seconda activity, la richiudo e il backround resta quello...
Ho notato che se avvio un activity, ne avvio una seconda, cambio background, la chiudo e la riapro, il background della seconda è tornato quello di default...
Ho pensato se ho la prima activity e avvio la seconda senza terminare la prima, è normale che la seconda resti in sospeso, mentre se sono nella seconda e vado indietro nella primala seconda si distrugge automaticamente anche se non uso la funzione finish()... corretto?

Dopo questa premessa, forse inutile ma mi ha fatto arrivare a questo esempio...
Se volessi modificare direttamente il layout di un activity in modo che premo un tasto, cambio il colorbackground del layout e ogni qual volta la apro il background resta modificato..come devo fare?

perchè usando setBackground() ogni volta che esco e rientro nell'applicazione ritorna il background color di default...

in poche parole vorrei capire come accede e si modifica l'xml da codice...

Ho visto che si può fare in alcuni forum, ma non ho ben capito come quindi volevo chiedere personalmente...
Grazie mille!


Oppure cambiando logica: conviene modificare come ho scritto sopra l'xml o settare una variabile dentro il codice in modo che ogni volta che parte l'activity si ricorda di dover modificare il background di default?

Qual'è l'approccio migliore, più gestibile o comunque migliore a livello di programmazione?

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Modificare il colore del background permanentemente
« Risposta #1 il: 21 Febbraio 2013, 18:19:24 CET »
0
Onestamente non sei molto chiaro, comunque provo a risponderti. Intanto dai uno sguardo qui: http://developer.android.com/reference/android/app/Activity.html

Se volessi modificare direttamente il layout di un activity in modo che premo un tasto, cambio il colorbackground del layout e ogni qual volta la apro il background resta modificato..come devo fare?


Una volta che hai dichiarato il tuo widget nel codice, basta fare nomeWidget.setBackground(r.drawable.NomeTuaImmagineDiBackground), oppure nomeWidget.setBackgroundColor(Color.ColorePredefinitoDiAndroid), oppure nomeWidget.setBackgroundColor(getResources().getColor(r.color.coloreCheHaiDefinitoTu)) etc etc..

che intendi esco e rientro dall'applicazione?

Per cambiare xml da codice basta vedere su 10000 siti dove sono riportati centinaia di migliaia di esempi.

Solitamente, tutto quello che può cambiare dinamicamente è definito nel codice..

se hai qualche domanda specifica falla pure ma è impossibile spiegarti come modificare i tuoi elementi nel codice..ci sarebbero troppe cosa da dire.

Offline blastor

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Re:Modificare il colore del background permanentemente
« Risposta #2 il: 22 Febbraio 2013, 00:02:54 CET »
0
scusate se mi sono espresso male, cercherò di chiarirvi le idee con un esempio.
Dovrei implementare un'activity che fa da "Setting" quindi se  setto il colore dello sfondo dal setting, questo parametro voglio che resti o comunque venga salvato da qualche parte in modo che ad ogni avvio del programma, quando caricherà il layout dovrà sapere che ho settato un determinato colore dal "Setting"

Volevo sapere qual'era l'approccio migliore per un implementazione di questo tipo e alla fine ho scoperto le "SharedPreferences", dovrei studiarle bene ma credo servano proprio a raggiungere il mio obbiettivo..

Qualcuno può confermare o darmi una dritta migliore?

P.S. Spero di esser stato per lo meno un po più chiaro....

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
R: Modificare il colore del background permanentemente
« Risposta #3 il: 22 Febbraio 2013, 11:01:09 CET »
0
Si, devi appoggiarti il valore selezionato nelle sharedpreference e poi andartelo a rileggere da li.

Offline blastor

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Re:Modificare il colore del background permanentemente
« Risposta #4 il: 22 Febbraio 2013, 12:03:48 CET »
0
posto il codice per far capire magari a chi legge come ho risolto, anche per far capire meglio la domanda:


Codice: [Seleziona]
          public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
             Button bottone=(Button) findViewById(R.id.bottone);
             tv=(TextView) findViewById(R.id.testo);
            et=(EditText) findViewById(R.id.edit);
            layout =(RelativeLayout) findViewById(R.id.layout);;
            SharedPreferences settings = getSharedPreferences("PROVA", 0);
            String nome = settings.getString("nome", "#FFFFFF");
            layout.setBackgroundColor(Color.parseColor(nome));
            tv.setText("colore:#"+ nome);
          bottone.setOnClickListener(new View.OnClickListener() {
                   
              public void onClick(View view) {
                SharedPreferences settings = getSharedPreferences("PROVA", 0);
                SharedPreferences.Editor editor = settings.edit();
                editor.putString("nome", (String) et.getText().toString());
               
                editor.commit();
                String nome = settings.getString("nome", (String) et.getText().toString());
                layout.setBackgroundColor(Color.parseColor(nome));
                tv.setText("colore:"+ nome);
               
              }
            });
           
          }

Codice: [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="#123"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/bottone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="128dp"
        android:text="Salva" />

    <TextView
        android:id="@+id/testo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/bottone"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="69dp"
        android:text="#FFF" />

    <EditText
        android:id="@+id/edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="34dp"
        android:text="FFF"
        android:ems="10" >

        <requestFocus />
    </EditText>

</RelativeLayout>

così facendo la variabile settings richiama le variabili precedentemente caricate così da averle nei prossimi avvii, se vi esistono, se no crea una SharedPreferences vuota in modo da potergli caricare le variabili e caricarle al prossimo riavvio...

Ho solo un problema, ho provato a caricare dentro una SharedPreceferences una string e un int, con le rispettive funzioni ma mi ha restituito errore, per caso può contenere variabili dello stesso tipo?

Codice: [Seleziona]
  SharedPreferences settings = getSharedPreferences("PROVA", 0);
            SharedPreferences settings = getSharedPreferences("PROVA", 0);
            String nome = settings.getString("nome", "#FFFFFF");
            int colore=settings.getInt("colore", 1000);
vi è permesso una cosa del genere? forse ho sbagliato io da qualche altra parte...
« Ultima modifica: 22 Febbraio 2013, 12:13:20 CET da blastor »