Champs d'édition côte à côte
Question
quelqu'un peut-il me faire savoir pourquoi je ne peux pas placer 2 EditFields côte à côte avec le code suivant ?Je peux placer 3 boutons côte à côte, mais pour une raison quelconque, je n'arrive pas à faire fonctionner EditFields pour moi.Toute aide serait appréciée.
//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);
La solution
EditField
Les s consomment par défaut toute la largeur disponible qui leur est transmise lors de la mise en page.Par conséquent, la largeur disponible restante pour le deuxième EditField est de 0.Afin de les disposer côte à côte, il faut soit :
- Disposez-les manuellement dans celui des parents
sublayout()
méthode (oulayout()
en cas deManager
). - Remplacer le EditField
layout()
méthode et lui faire consommer une largeur fixe et non toute la largeur.
OPTION 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);
OPTION 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);
Résultat
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow