不是聽來調整的,你也可以使用具有更多列的GridLayout,讓你根據需要分配空間內容跨越多列。
例如,對於70:30分佈,創建一個10列的網格佈局。讓第一個孩子跨越7列,第二個孩子跨越3列。
根據您的使用情況,使用GridLayout的一個缺點可能是它不會強制孩子們縮小到父母的大小,如果他們想要變大一些(我經常遇到的問題是長的標籤可能只是包裝)。
避免這個問題的一個選項是實現支持百分比簡單的佈局管理器:
public class ColumnLayout extends Layout {
int[] percentages;
public ColumnLayout(int... percentages) {
this.percentages = percentages;
}
@Override
protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
Control[] children = composite.getChildren();
int height = hHint;
int width = wHint;
int consumedPercent = 0;
for (int i = 0; i < children.length; i++) {
int percent;
if (i >= percentages.length) {
percent = (100 - consumedPercent)/(children.length - percentages.length);
} else {
percent = percentages[i];
consumedPercent += percent;
}
Point childSize = children[i].computeSize(wHint == -1 ? -1 : wHint * percent/100, hHint);
if (wHint == -1) {
width = Math.max(width, childSize.x * (100 - percent)/100);
}
if (hHint == -1) {
height = Math.max(height, childSize.y);
}
}
return new Point(width, Math.max(height, 0));
}
@Override
protected void layout(Composite composite, boolean flushCache) {
Control[] children = composite.getChildren();
Rectangle available = composite.getClientArea();
int x = available.x;
int consumedPercent = 0;
for (int i = 0; i < children.length - 1; i++) {
int percent;
if (i >= percentages.length) {
percent = (100 - consumedPercent)/(children.length - percentages.length);
} else {
percent = percentages[i];
consumedPercent += percent;
}
int w = available.width * percent/100;
children[i].setBounds(x, available.y, w, available.height);
x += w;
}
if (children.length > 0) {
children[children.length - 1].setBounds(x, available.y,
available.width - (x - available.x), available.height);
}
}
}
這就是說,我現在通常只是扣帽子我想包裝只是一個額外的「籠子」複合材料,其限制了他們的水平尺寸要求
對答案有任何反饋? – Baz
@Baz還沒有時間去測試它。不久。儘管我對你有完全的信心,但是,巴茲=) –
夠公平的,慢慢來。我只是想查看我給出的答案,看看他們是否能解決問題。 – Baz