无论是在android下还是通过浏览器,访问google地图是相同的参数。具体参数含义可以参见:
http://mapki.com/wiki/Google_Map_Parameters
对我目前比较有用的参数是:
- q,查询语句,我使用的是经纬度坐标;
- dirflg,路线类型,比如r表示乘车(公交),t表示避开收费站,h避开高速公路,w步行,什么都不选则是驾车(不避开收费站和高速公路);
- t,地图类型,m地图,k卫星,h地图和卫星混合,p地形
- 和方向相关的:saddr … 从哪里开始,终点在哪里。
dirflg默认情况,驾车,无限制:
避开高速公路:
公交:
步行:
混合模式:
卫星模式:
地形模式:
UITabBarController学习笔记
一.基本知识
和UINavigationController类似,UITabBarController也可以用来控制多个页面导航,用户可以在多个视图控制器之间移动,并可以定制屏幕底部的选项卡栏。
借助屏幕底部的选项卡栏,UITabBarController不必像UINavigationController那样以栈的方式推入和推出视图,而是组建一系列的控制器(他们各自可以是UIViewController,UINavigationController,UITableViewController或任何其他种类的视图控制器),并将它们添加到选项卡栏,使每个选项卡对应一个视图控制器。
二.具体介绍
1.通过代码的方式创建UITabBarController界面
代码的位置应该放在xxxAppDelegate.m中的applicationDidFinishLaunching:方法中,因为Tab Bar Controller通常是为应用窗口提供根视图,所以需要在程序启动后,窗口显示前创建Tab Bar Controller。具体创建步骤为:
(1)创建一个新的UITabBarController对象
(2)为每一个Tab创建一个root view controller
(3)把这些root view controllers添加到一个array中,再把这个array分配给tab bar controller的viewControllers属性
(4)把tab bar controller's view添加到应用程序主窗口
例子:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
tabBarController = [[UITabBarController alloc] init];
MyViewController* vc1 = [[MyViewController alloc] init];
MyOtherViewController* vc2 = [[MyOtherViewController alloc] init];
NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];
tabBarController.viewControllers = controllers;
// Add the tab bar controller's current view as a subview of the window
[window addSubview:tabBarController.view];
}
2.通过代码的方式创建TabBarItem
Tab Bar Controller的每个选项卡都得有一个UITabBarItem,可以在其root view controller初始化时创建并添加UITabBarItem。
例子:
- (id)init {
if (self = [super init]) {
self.title = @"My View Controller";
UIImage* anImage = [UIImage imageNamed:@"MyViewControllerImage.png"];
UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:anImage tag:0];
self.tabBarItem = theItem;
[theItem release];
}
return self;
}
前言
为Spinner适配完数据后需要设置其默认选项,但是发现直接setSelection(int position)有时候不管用,打开选项又发现已经选中了,但是显示出来的选项又始终默认第一个
正文
问题很奇怪,此外还发现适配完数据后会默认选中第一个,并且这个默认选中第一个的操作并不是马上执行的,而是一段时候后再执行,并触发OnItemSelectedListener事件。下面直奔主题:
旧代码:
spinner.setSelection(2);
新代码:
spinner.setSelection(2,true);
在来看setSelection有两个参数的函数重载的说明:
英文:Jump directly to a specific item in the adapter data.
中文:直接跳到数据适配器中指定项。
以下是两个函数的源代码:
* Jump directly to a specific item in the adapter data.
*/
public void setSelection(int position, boolean animate) {
// Animate only if requested position is already on screen somewhere
boolean shouldAnimate = animate && mFirstPosition <= position &&
position <= mFirstPosition + getChildCount() - 1;
setSelectionInt(position, shouldAnimate);
}
@Override
public void setSelection(int position) {
setNextSelectedPositionInt(position);
requestLayout();
invalidate();
}
结束
看起来像是专门准备了一个函数在数据适配(填充)完后设置默认值的,可惜API文档还没有翻译到这里,不然少走这个弯路了 :)