flexiewer里遇到的一些问题
infoWindowRenderer问题 在arcgis api for flex中要设置infowindow的外观很容易,只需要在编写一下css文件即可,就如
esri|InfoWindow
{
border-thickness: 0;
background-color: green;
font-size: 16; upper-left-radius: 15;
upper-right-radius: 0; info-placement: top;
}
无论是直接使用Map的infowindow,还是通过infoWindowRenderer渲染器来设置Graphic的infowindow,或是使用FeatureLayer 的infoWindowRenderer来展现infowindow,通过上面的方法都是可以正常实现的。
但是如果你是使用flexviewer框架来设置infowindow外观,还是通过上面的方法,结果你会发现只能改改字体大小,字体颜色什么的, 并不能改变infowindow的外观(诸如背景),原因就在于flexviewer在框架里已经为你写了,并且infowindow的外观设置的跟你的应用 程序的外观是一样的,可以从代码里看出来,具体代码在 UIManager.as 里,可以找到
var cssStyleDeclarationInfoContainer:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.supportClasses.InfoWindow");
if (numberOfStyleColors > 4)
{
cssStyleDeclarationInfoContainer.setStyle("backgroundColor", backgroundColor);
cssStyleDeclarationInfoContainer.setStyle("borderColor", textColor);
}
backgroundColor可以再自己重新定义一个, 找到下面这个
if (numberOfStyleColors > 4)
{
textColor = configData.styleColors[0];
backgroundColor = configData.styleColors[1];
rolloverColor = configData.styleColors[2];
selectionColor = configData.styleColors[3];
titleColor = configData.styleColors[4];
applicationBackgroundColor = (configData.styleColors[5] != null) ? configData.styleColors[5] : 0xFFFFFF;
你定义的颜色值名称 = 配置文件的第几个颜色值;
}
然后再再配置文件(config.xml)里添加颜色值(即在style节点下面的color的节点里添加几个颜色值) 如果仔细看这个as文件的话,大概就会明白
同时当你把这个背景色改成你想要的颜色后,又出现个问题,infowindow的标题栏还是以前的颜色,这就需要你改另一处配置啦, 也是在这个as文件里
var cssStyleDeclarationContentNavigator:CSSStyleDeclaration = topLevelStyleManager.getStyleDeclaration("com.esri.ags.components.ContentNavigator"); if (numberOfStyleColors > 4)
{
cssStyleDeclarationContentNavigator.setStyle("headerBackgroundColor", backgroundColor);
cssStyleDeclarationContentNavigator.setStyle("headerColor", textColor);
} 设置这个跟上面的一样
通过官方给出的API关于com.esri.ags.components.ContentNavigator
The ContentNavigator is a generic container for UIComponents. It can be used as the content of the InfoWindow or used outside of the Map. You set its dataProvider with a list of components and they are displayed one at a time. If a component is a Graphic, it looks for an infoWindowRenderer IFactory on the graphic or the graphic's graphicsLayer. If no infoWindowRenderer is found, it shows a default key-value data grid.
也就是说同时需要修改他的外观才能像在第一种方式设置的外观一样,甚至做的外观更美观