Java 如何根据客户端重新调整应用程序组件的大小';谁的决议?
我有一个GWT Web应用程序,它在整个窗口大小下运行得非常好 但当我重新调整窗口大小时,它看起来不太好,所有组件都不在相应的位置上 因此,每当我更改窗口大小,或者如果我将在tab或移动设备上运行应用程序,我都希望更改所有组件的大小 还有别的办法吗 我怎样才能做到这一点呢?试试看Java 如何根据客户端重新调整应用程序组件的大小';谁的决议?,java,android,gwt,resize,smartgwt,Java,Android,Gwt,Resize,Smartgwt,我有一个GWT Web应用程序,它在整个窗口大小下运行得非常好 但当我重新调整窗口大小时,它看起来不太好,所有组件都不在相应的位置上 因此,每当我更改窗口大小,或者如果我将在tab或移动设备上运行应用程序,我都希望更改所有组件的大小 还有别的办法吗 我怎样才能做到这一点呢?试试看 public static Window getWindow(Component c) { while (c != null) { if (c instanceof Window) br
public static Window getWindow(Component c)
{
while (c != null)
{
if (c instanceof Window) break;
c = c.getParent();
}
return (Window)c;
}
public static int getResolution(Component c)
{
return getWindow(c).getBounds();
}
所以应该是这样的
Rectangle bounds getScreenResolution(this);
Dimension resolution = new Dimension(bounds.width,bounds.height);
放置在要调整大小的零部件中
然后将其与resize listener结合使用
getWindow(this).addComponentListener(new ComponentAdapter()
{
public void componentResized(ComponentEvent e)
{
Rectangle bounds = getScreenResolution(this);
setPrefferedSize(new Dimension(bounds.width,bounds.height));
}
}
您可以使用
Window.getClientHeight
和Window.getClientWidth
——虽然这不会返回以像素为单位的真实屏幕大小,但会返回GWT应用程序可以使用的区域大小,因此它也尊重浏览器窗口的当前大小
您可以使用window.addWindowResizeListener
收听对浏览器窗口大小的更改
也许这也解决了移动设备的问题。如果您确实需要知道应用程序是否在移动设备上运行以及运行在哪个移动设备上,那么最好的方法是使用用户代理字符串,您可以使用Window.Navigator.getUserAgent()
获取该字符串。如果要使用延迟绑定,还可以创建新属性,如下所示:
<define-property name="mobile.user.agent" values="mobilesafari, none"/>
<property-provider name="mobile.user.agent"><![CDATA[
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("webkit") != -1 && ua.indexOf("mobile") != -1) {
return "mobilesafari";
}
// Additional checks go here
return "none";
]]></property-provider>
您还可以查看,它本机支持以百分比表示的宽度和高度
另一个选择是使用CSS而不是GWT代码,并让浏览器处理大小调整。虽然这并不总是一个可行的选择,但如果可能的话,应该选择使用它。这是纯GWT还是您正在使用SmartGWT组件 如果您使用的是SmartGWT,您应该能够使用类更好地管理组件 使用和方法硬编码组件大小是不明智的
查看布局如何帮助动态调整组件大小。您可以使用类似gwt引导的功能(它可以根据视口大小和用户代理更改视图)。但基本上,在创建组件时,您可以(而且我认为应该)使用CSS的@media选择器
您可以通过GWT处理所有调整大小事件,并手动调整每个组件的大小,但这不是一个好主意,因为您的应用程序性能不佳。GWT既不模拟
Toolkit
也不模拟System.getProperty
。GWT也不模拟java.awt
。