Campi di modifica lato sinistro
Domanda
Può qualcuno per favore fammi sapere perché non riesco a collocare 2 modifiche fianco a fianco con il seguente codice?Posso posizionare 3 pulsanti fianco a fianco, ma per qualche motivo non riesco a far funzionare i campi di modifica per me.Qualsiasi aiuto sarà apprezzato.
//Bin Height
HorizontalFieldManager hManagerBinHeight = new HorizontalFieldManager(FIELD_BOTTOM);
LabelField lblRadiusOfBin = new LabelField("Radius of Bin: ", LabelField.FIELD_LEFT);
EditField txtRadiusFeet = new EditField("Feet: ", "", 3, BasicEditField.FILTER_NUMERIC);
EditField txtRadiusInches = new EditField("Inches: ", "", 2, BasicEditField.FILTER_NUMERIC);
hManagerBinHeight.add(lblRadiusOfBin);
hManagerBinHeight.add(txtRadiusFeet);
hManagerBinHeight.add(txtRadiusInches);
add(hManagerBinHeight);
. Soluzione
EditField
s per impostazione predefinita consumano tutta la larghezza disponibile passata a loro durante il layout.Di conseguenza, la larghezza disponibile lasciata per il secondo editfield è 0. Per layout di loro fianco a fianco, è necessario:
- .
- layout li disposizione manualmente nel metodo
sublayout()
del genitore (olayout()
in caso diManager
). - Sostituisci il metodo
layout()
Gcode di EDITFIELD e renderlo consumare una larghezza fissa e non tutta la larghezza.Opzione 1 :
.HorizontalFieldManager hManagerBinHeight = new HorizontalFieldManager(FIELD_BOTTOM); LabelField lblRadiusOfBin = new LabelField("Radius of Bin: ", LabelField.FIELD_LEFT); final EditField txtRadiusFeet = new EditField("Feet: ", "", 3, BasicEditField.FILTER_NUMERIC); txtRadiusFeet.setBorder(BorderFactory.createRoundedBorder(new XYEdges())); final EditField txtRadiusInches = new EditField("Inches: ", "", 2, BasicEditField.FILTER_NUMERIC); txtRadiusInches.setBorder(BorderFactory.createRoundedBorder(new XYEdges())); HorizontalFieldManager hfm = new HorizontalFieldManager(USE_ALL_WIDTH) { protected void sublayout(int maxWidth, int maxHeight) { layoutChild(txtRadiusFeet, maxWidth/2, maxHeight); layoutChild(txtRadiusInches, maxWidth/2, maxHeight); setPositionChild(txtRadiusFeet, 0, 0); setPositionChild(txtRadiusInches, txtRadiusFeet.getWidth(), 0); setExtent(maxWidth, txtRadiusFeet.getHeight()); }; }; hfm.add(txtRadiusFeet); hfm.add(txtRadiusInches); hManagerBinHeight.add(lblRadiusOfBin); hManagerBinHeight.add(hfm); add(hManagerBinHeight);
Opzione 2:
.HorizontalFieldManager hManagerBinHeight = new HorizontalFieldManager(FIELD_BOTTOM); LabelField lblRadiusOfBin = new LabelField("Radius of Bin: ", LabelField.FIELD_LEFT); EditField txtRadiusFeet = new EditField("Feet: ", "", 3, BasicEditField.FILTER_NUMERIC) { // Limit the width of the edit field to be the half of the available width protected void layout(int width, int height) { super.layout(width/2, height); } }; txtRadiusFeet.setBorder(BorderFactory.createRoundedBorder(new XYEdges())); EditField txtRadiusInches = new EditField("Inches: ", "", 2, BasicEditField.FILTER_NUMERIC); txtRadiusInches.setBorder(BorderFactory.createRoundedBorder(new XYEdges())); HorizontalFieldManager hfm = new HorizontalFieldManager(USE_ALL_WIDTH); hfm.add(txtRadiusFeet); hfm.add(txtRadiusInches); hManagerBinHeight.add(lblRadiusOfBin); hManagerBinHeight.add(hfm); add(hManagerBinHeight);
Risultato