Java代码:
import android.app.Activity;
import android.os.Bundle;
/**
* 线型布局
* @author 够潮
*
*/
public class Layout1 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout2);
}
}
布局配置文件:layout2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="S"
></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D"
></Button>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="S"
></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D"
></Button>
</LinearLayout>
</LinearLayout>
效果: <!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->manifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.map03"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
<activity android:name=".TestMap03Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>2、布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="@+id/mapViewId"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="0C7R0KjQ5CR8hdVNpQlvJaRtn8wuek7GhYyY9Ng"
/>
</LinearLayout>
3、FirstOverlay.java
import java.util.ArrayList;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class FirstOverlay extends ItemizedOverlay<OverlayItem>{
private Context context;
private ArrayList<OverlayItem> overlayItems = new ArrayList<OverlayItem>();
public FirstOverlay(Drawable defaultMarker,Context context)
{
super(boundCenterBottom(defaultMarker));
this.context = context;
}
public FirstOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
}
//用于将生成好的OverlayItem对象添加到List当中
public void addOverlayItem(OverlayItem overlayItem)
{
overlayItems.add(overlayItem);
populate();
}
//用于创建一个OverlayItem对象
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return overlayItems.get(i);
}
//返回当前Overlay当中所包含的OverlayItem对象的数量
@Override
public int size() {
// TODO Auto-generated method stub
return overlayItems.size();
}
@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
OverlayItem item = overlayItems.get(index);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(item.getTitle());
builder.setMessage(item.getSnippet());
Dialog dialog = builder.create();
dialog.show();
return true;
}
}4、MainActivity.java
import java.util.List;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
public class TestMap03Activity extends MapActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = (MapView)findViewById(R.id.mapViewId);
mapView.setBuiltInZoomControls(true);
//调用mapView对象的getOverLays()方法,用于得到所有的图层对象
List<Overlay> mapOverlays = mapView.getOverlays();
//生成Drawable对象
Drawable drawable = getResources().getDrawable(R.drawable.icon);
FirstOverlay firstOverlay = new FirstOverlay(drawable,this);
//创建一个GeoPoint对象,用于通过经纬度,指定地图上的一个点
GeoPoint point = new GeoPoint(19240000,-99120000);
//创建一个OverLayItem对象
OverlayItem overlayItem = new OverlayItem(point,"Hola,Mundo!","I'm in Mexico City!");
firstOverlay.addOverlayItem(overlayItem);
mapOverlays.add(firstOverlay);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}执行结果
[img][/img]
Xcode只有破解后才能免费真机调试,否则需要注册苹果的开发者计划,需要99美元一年,除非发布程序到苹果商店,否则可以先不注册,破解到真机调试。真机为越狱后的ios设备,比如ipod,iPhone,iPad。我的iPod版本是4.3.3,Xcode版本是3.2.6,mac版本是10.6.8。
第一步:创建证书
打开应用程序->实用工具->钥匙串访问.
打开菜单:钥匙串访问->证书助理->创建证书。
在打开的对话框中,名称输入:iPhone Developer,选中让我覆盖这些默认值。
然后继续,再继续,然后输入你的email,名称还是iPhone Developer。然后继续,然后再继续,再继续,这步很重要,去掉电子邮件保护的功能,选中代码签名的功能。如下图。
然后继续,再继续,主题备用名称扩展输入RFC822 名称,填入邮箱即可。然后继续,然后再继续,系统会创建该证书,并且提示创建成功,但是该证书不被信任,并且被打了叉叉,不过没有关系能用就行。
第二步:修改Xcode
1. 关闭Xcode,打开命令行终端,运行下面的命令:
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/ dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255 printf “\x8f\x2a\x00\x00″ >> working dd if=iPhoneOS\ Build\ System\ Support of=working bs=1 skip=127504 seek=127504 /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original #.original是备份,以后要用注册的证书的话,在恢复本文件即可 /bin/mv working iPhoneOS\ Build\ System\ Support chmod a+x iPhoneOS\ Build\ System\ Support
2. 执行完后再运行下面的命令:(需要internet网络连接)
mkdir /Developer/iphoneentitlements30 cd /Developer/iphoneentitlements30 curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt mv gen_entitlements.txt gen_entitlements.py chmod 777 gen_entitlements.py
3.执行完脚本后打开”/Developer/Platforms/iPhoneOS.platform/Info.plist”文件,这是一个xml文件,直接双击打开,点AddItem增加下面2项,左边key,右边是值,
PROVISIONING_PROFILE_ALLOWED = NO
PROVISIONING_PROFILE_REQUIRED = NO
再将所有“XCiPhoneOSCodeSignContext”替换为“XCCodeSignContext”,也就是去掉中间的iPhoneOS这几个字母,然后保存退出。建议修改前,先备份一下,方便恢复。
4. 打开Xcode,打开你的项目,Project>>Edit Project Setting,选择“Build”页面,Configurations和Show都选择All,找到Code Signing Identity项,删除其子项,并将“Code Signing Identity”选择为“iPhone Developer”。
然后在Xcode的File菜单上,New File -> iOS -> Code Signing -> Entitlements,新建了一个“Entitlements.plist”点Finish,然后打开此文件,增加一个“get-task-allow”属性,Boolean类型,并且选中,然后保存。否则在真机上调试时出现“Error launching remote program: failed to get the task for process xxx"的问题。
将越狱后的iPod接入电脑,在Xcode的Window>>Organizer中会侦测到你的iPod.查看iPod和你的Xcode识别正常后退出Organizer,选择编译环境为“4.3|Debug|xxx|xxx|armv6”,点击"Build and Run",即可在真机运行。真机一定要越狱,并且安装了AppSync。