В настоящее время я пишу реализацию средства выбора календаря / даты, и мне было интересно, знает ли кто-нибудь о более быстром / более простом способе достижения следующего эффекта.
напр.
05/02/2012 - 11/02/2012
Эффект, к которому я стремлюсь, состоит в том, чтобы разделители (/
) всегда оставались в одном и том же месте, ичтобы значения всегда помещались между ними.Это упрощает отслеживание, когда вы прокручиваете недели, потому что шрифт не моноширинный.
То, как я сейчас работаю, кажется чрезмерным, но это работает.
Яоптимизировать / рефакторинг и наткнулся на это, думая, что должен быть лучший способ сделать это.
Вот что у меня есть:
//getText() return a range in the format dd/mm/yyyy - dd/mm/yyyy
String firstHalf = getText().substring(0, 10);
String secondHalf = getText().substring(getText().length() - 10);
int yOff = baseLine - ((showSubtext) ? 5 : 0);
int slashWidth = fm.stringWidth("/");
String a, b, c, d, e, f;
int A, B, C, D, ax, bx, cx, dx, ex, fx;
a = firstHalf.substring(0, 2);
b = firstHalf.substring(3, 5);
c = firstHalf.substring(6);
d = secondHalf.substring(0, 2);
e = secondHalf.substring(3, 5);
f = secondHalf.substring(6);
int sideGap = 45;
int fieldWidth = 28;
int leftOffset = 4;
A = sideGap + fieldWidth;
B = A + fieldWidth + slashWidth / 2;
D = getWidth() - A - 20;
C = D - fieldWidth - slashWidth / 2;
ax = A - fm.stringWidth(a);
bx = ((B - A) - fm.stringWidth(b)) / 2 + A + slashWidth / 2 + 1;
cx = B + slashWidth;
dx = C - fm.stringWidth(d);
ex = ((D - C) - fm.stringWidth(e)) / 2 + C + slashWidth / 2 + 1;
fx = D + slashWidth;
g.drawString("/", A - leftOffset, yOff);
g.drawString("/", B - leftOffset, yOff);
g.drawString("/", C, yOff);
g.drawString("/", D, yOff);
g.drawString(a, ax - leftOffset, yOff);
g.drawString(b, bx - leftOffset, yOff);
g.drawString(c, cx - leftOffset, yOff);
g.drawString(d, dx, yOff);
g.drawString(e, ex, yOff);
g.drawString(f, fx, yOff);
Эффект:
![Image effect](https://i.stack.imgur.com/f2mHb.png)
Спасибо.