Creazione di componenti personalizzati utilizzando componenti Android regolari
-
27-10-2019 - |
Domanda
Fondamentalmente voglio incapsulare un semplice componente dal codice che ho già.
In sostanza è un LinearLayout
con bottoni all'interno. Questi pulsanti apportare modifiche a un ListView
, e c'è anche qualche altro piccole cose che lo faccia.
Attualmente ho un layout XML con quelli, e io programmazione messa a punto tutto il resto:. I pulsanti, l'interazione tra la lista e l'altra roba piccola
Ovviamente ho pensato a me, andiamo incapsulano questo.
Ho iniziato cercando di estendere la LinearLayout
e aggiungendo i pulsanti.
Già non ho idea di come gonfiare i pulsanti per aggiungere alla vista
Quale metodo faccio a ignorare per creare questa pulsanti appena prima che la vista viene creato senza fare confusione con le misure e le inflazioni, ecc.
Ho guardato intorno, ma i componenti personalizzati che vedo sono o completamente nuovi componenti o componenti che semplicemente aggiungere piccole funzionalità a quelle personalizzate.
Non v'è alcune linee guida per fare questo? Buoni tutorial / esempio?
Ogni aiuto è apprezzato. Grazie!
EDIT:
Va bene, qui è una roba po 'più specifico.
In sostanza voglio creare un View
che contiene i pulsanti di filtro per un ListView
. Questo sarà utilizzato in luoghi diversi con filtri diversi, quindi ho bisogno di flessibilità per i pulsanti.
In sostanza mi piacerebbe fare qualcosa di simile:
CustomView view = new CustomView(activity);
view.addButton("Lala", new OnFilterClickListener {
onClick(ListView list, View v) {
// Do the filtering
}
});
mListView.addHeaderView(view);
Voglio la vista per adattarlo di pesi per la visualizzazione dei pulsanti, mostrare all'utente quale filtro è attivo, cose del genere.
Ma io ancora non so davvero come fare apparire i pulsanti aggiunti in modo dinamico, dove faccio a generare, come per gonfiare loro e cose del genere.
Soluzione
public class myLayout extends LinearLayout {
//...
public void addButton(String text, OnClickListener listener) {
Button newButton = new Button(mContext);
newButton.setText(text);
newButton.setOnClickListener(listener);
//Say we want the weights to be equal
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1);
addView(newButton, params);
}
//...
}
Si può anche fare qualcosa per la vista prima di inviare il clic in questo modo:
public class myLayout extends LinearLayout {
//...
public void addButton(String text, final OnClickListener listener) {
Button newButton = new Button(mContext);
newButton.setText(text);
newButton.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//do whatever you want
//like change background of button or something
//finally
listener.onClick(v);
}
});
//Say we want the weights to be equal
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1);
addView(newButton, params);
}
//...
}