@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ScrollView scroll=new ScrollView(this);
scroll.setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT,100,0));
RelativeLayout relative=(RelativeLayout) findViewById(R.id.relative);
((ViewGroup)relative.getParent()).removeView(relative);
scroll.addView(relative);
setContentView(scroll);
}
Ho dovuto rimuovere il RelativeLayout dal suo genitore per aggiungerlo alla ScrollView.Così finalmente funziona.
Ora però la ScrollView devo studiarmela in modo da lasciare libero uno spazio a sinistra per i comandi.
...E' DA IERI SERA CHE STO IMPAZZENDO Finalmente sono arrivato alla soluzione!!!
Un passo fondamentale è stato l'uso di Hierarchy Viewer, uno strumento scaricato con l'SDK Android, che mi ha mostrato che la radice è un FrameLayout.
E poi non avevo capito che nell'impostare i parametri di una View contenuta in un Layout bisogna usare i parametri di questo Layout, per cui se voglio riprodurre programmaticamente quello che ho fatto nell'XML devo fare in modo che la ScrollView abbia parametri di tipo FrameLayout.LayoutParams!!!
Quindi il codice di cui sopra, impostando parametri di tipo AbsoluteLayout, non può funzionare, è sbagliato, pur mostrando la ScrollView a tutto schermo. Ecco il codice (ci aggiungo, perché doverosa, l'esclamazione abruzzese 'NGUL' A MAMMETE!!!)
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ScrollView sv=new ScrollView(this); FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); params.setMargins(200,0, 0, 0); sv.setBackgroundColor(Color.CYAN); sv.setLayoutParams(params); ((ViewGroup)findViewById(android.R.id.content)).addView(sv); }Ed ecco il pregevole risultato:
Però per essere fedele al codice che ho creato in XML devo inserire nella ScrollView un RelativeLayout.
Proviamoci:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ScrollView sv=new ScrollView(this); FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); params.setMargins(200,0, 0, 0); sv.setLayoutParams(params); sv.setBackgroundColor(Color.CYAN); RelativeLayout relative=new RelativeLayout(this); ImageView immagine=new ImageView(this); immagine.setImageResource(R.drawable.faciadecul); RelativeLayout.LayoutParams relParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); relParams.setMargins(200,250,0,0); immagine.setLayoutParams(relParams); relative.addView(immagine); sv.addView(relative); ((ViewGroup)findViewById(android.R.id.content)).addView(sv); }Ed ecco:
E lo scroll funziona!!!
Dato che c'è un po' di confusione, mi contrassegno i "pezzi" con codici di colore diversi...
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ScrollView sv=new ScrollView(this); FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); params.setMargins(200,0, 0, 0); sv.setLayoutParams(params); sv.setBackgroundColor(Color.CYAN); RelativeLayout relative=new RelativeLayout(this); ImageView immagine=new ImageView(this); immagine.setImageResource(R.drawable.faciadecul); RelativeLayout.LayoutParams relParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); relParams.setMargins(200,250,0,0); immagine.setLayoutParams(relParams); relative.addView(immagine); sv.addView(relative); ((ViewGroup)findViewById(android.R.id.content)).addView(sv); }Ecco: per ogni view o layout distinguo:
- creazione
- attribuzione dei parametri
- altro
Nessun commento:
Posta un commento