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。