我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框。当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,甚至会对我们的程序增加不必要的复杂性,对于这种情形的对话框有没有更优雅的解决方案呢? 幸运的是,android提供了这种问题的解决方案,刚开始接触android的时候,我在做一个自定义对话框的时候,也是通过继承的方式来实现,后来随着对文档了解的深入,发现了android起始已经提供了相应的接口Dialog Builder ,下面我就吧相关的内容在这里分享一下,也能让更多的初学者少走弯路。 首先是一个最简单的应用,就是弹出一个消息框,在android中可以这样实现 new AlertDialog.Builder(self) .setTitle("标题") .setMessage("简单消息框") .setPositiveButton("确定", null) .show(); 效果如下: 上面的代码中我们新建了一个AlertDialog,并用Builder方法形成了一个对象链,通过一系列的设置方法,构造出我们需要的对话框,然 后调用show方法显示出来,注意到Builder方法的参数 self,这个其实是Activity对象的引用,根据你所处的上下文来传入相应的引用就可以了。例如在onCreate方法中调用,只需传入this即 可。 下面是带确认和取消按钮的对话框: new AlertDialog.Builder(self) .setTitle("确认") .setMessage("确定吗?") .setPositiveButton("是", null) .setNegativeButton("否", null) .show(); 注意到,这里有两个null参数,这里要放的其实是这两个按钮点击的监听程序,由于我们这里不需要监听这些动作,所以传入null值简单忽略掉,但是实际开发的时候一般都是需要传入监听器的,用来响应用户的操作。 下面是一个可以输入文本的对话框: new AlertDialog.Builder(self) .setTitle("请输入") .setIcon(android.R.drawable.ic_dialog_info) .setView(new EditText(self)) .setPositiveButton("确定", null) .setNegativeButton("取消", null) .show(); 如上代码,我们用setView方法,为我们的对话框传入了一个文本编辑框,当然,你可以传入任何的视图对象,比如图片框,WebView等。。尽情发挥你的想象力吧~ 下面是单选框与多选框,也是非常有用的两种对话框: new AlertDialog.Builder(self) .setTitle("请选择") .setIcon(android.R.drawable.ic_dialog_info) .setSingleChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } } ) .setNegativeButton("取消", null) .show(); 1 new AlertDialog.Builder(self) 2 .setTitle("多选框") 3 .setMultiChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, null, null) 4 .setPositiveButton("确定", null) 5 .setNegativeButton("取消", null) 6 .show(); 单选和多选对话框应该是我们平时用的非常多的,代码应该很好理解,下面再最后介绍两个 列表对话框: 1 new AlertDialog.Builder(self) 2 .setTitle("列表框") 3 .setItems(new String[] {"列表项1","列表项2","列表项3"}, null) 4 […]
View Details设置全屏包括两个部分: 窗口全屏和Activity全屏。 窗口全屏 是指隐藏系统顶部用来显示时间、电量、信号等信息的标题栏 。 Activity全屏 是指隐藏程序的标题栏。我们可以通过修改AndroidManifest.xml文件来实现。 1.窗口全屏fullscreen.java代码如下: package wzhnsc.test.style; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class fullscreen extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //不显示程序的标题栏 requestWindowFeature( Window.FEATURE_NO_TITLE ); //不显示系统的标题栏 getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ); setContentView( R.layout.main ); } } 2.修改 AndroidManifest.xml 我们可以修改activity或application的属性值来实现。 具体可以根据自己的情况来设置,两者区别如下: 1)activity: 只针对当前的Activity全屏。 2)application:所有的Activity都会全屏。 AndroidManifest.xml 内容如下: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="wzhnsc.test.style" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <activity android:name=".fullscreen" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="1"/> </manifest> from:http://blog.sina.com.cn/s/blog_4c451e0e010133ab.html
View Details这一期创新,我们来谈谈浏览器控件即WebView。先说什么是webView控件吧。 WebView是一个浏览器控件,通过这个控件可以直接访问网页,或者把输入的HTML字符串显示出来,功能比较强大,有以下几个优点: 1、功能强大,支持CSS,Java script等HTML语言,这样页面就能更漂亮。 2、能够对浏览器控件进行非常详细的设置,比如字体大小,背景色,滚动条样式等等。 3、能够捕捉到所有浏览器操作,比如点击URL,打开或关闭URL 4、能够很好的融入布局。 5、甚至webView还能和JS进行交互。 在使用webView时,我们要先取得一个webView实例,如下: WebView browser=(WebView)findViewById(R.id.webkit); 取得实例后,我们要给browser定义一下WebSettings,WebSettings是WebView的具体设置类,可以对WebView进行非常详细的设置。 WebSettings bs = browser.getSettings(); 取得了webView设置对象。 下面开始设置浏览器控件,几个最常用的设置如下: 1、bs.setSupportMultipleWindows(false); 浏览器不支持多窗口显示,意思就是说所有页面在单一窗口打开,这样避免了页面布局控制显示问题,也便于操作控制页面。 2、bs.setSupportZoom(false); 页面是否可以进行缩放。 3、bs.setBlockNetworkImage(false); 是否阻止图像的显示 4、bs.setCacheMode(); 设置缓存的模式,分为几种: LOAD_CACHE_ELSE_NETWORK 当本地没有缓存时,从网上下载 LOAD_CACHE_ONLY 只读取本地缓存 LOAD_DEFAULT 默认的缓存模式 LOAD_NORMAL 一般的缓存模式 LOAD_NO_CACHE 不读取缓存,所有内容均从网络下载。 5、bs.setJavaScriptEnabled(flag);是否支持JS。 其他比如设置字体等更不必详说,通过设置我们可以获得一个我们需要的浏览器窗口。 接着,我们还需一个类来继承WebViewClient,这个类用来监控浏览器的一系列事件。 webNotify wn = new webNotify(); browser.setWebViewClient(wn) 下面列举比较常用的4个事件: 1,接收到Http请求的事件 onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) 2,打开链接前的事件 public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } 在这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。 3,载入页面完成的事件 public void onPageFinished(WebView view, String url){ } 同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。 4,载入页面开始的事件 public void onPageStarted(WebView view, String url, Bitmap favicon) { } 这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。 通过这几个事件,我们可以很轻松的控制程序操作,一边用着浏览器显示内容,一边监控着用户操作实现我们需要的各种显示方式,同时可以防止用户产生误操作。 最后我们的浏览器设置好了,可以监控操作了,于是打开一个网址: browser.loadUrl("http://www.baidu.com/"); 当然也可以是自己设定的一段html字符串,当然你的URL要符合规范。 browser.loadDataWithBaseURL() 如何和JS进行交互 到这里基本的webView的基本使用介绍完毕,接下来我们来讨论一下webView如何与JS进行交互,这个功能非常强大,能够做出很多意想不到的事情。 首先我们在页面里有这么一段JS代码: <html> <script language="javascript"> function wave() { document.getElementById("droid").src="android_waving.png"; } </script> <body> <a> <img id="droid" src="android_normal.png"/><br> Click me! </a> </body> </html> function wave()就是我们要调用的函数,首先要让browser能与页面进行交互bs.setJavaScriptEnabled(true);( 让浏览器支持JS) 接着: browser.addJavascriptInterface(new Object() { public void clickOnAndroid(){ mHandler.post(new Runnable(){ public void run() { mWebView.loadUrl("javascript:wave()"); } }); } }, "index"); 这里的重点就是addJavascriptInterface(Object obj,String interfaceName)方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName,作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。 到此为止,我们就能在自己的浏览器里实现html页面里面的js 代码了,具体能实现什么功能这里就不做详细举例了,实用中就会发现,这个功能很强大。 from:http://wenku.baidu.com/link?url=lts8Sg3KWlu5M4l_dnGiL2rQ6ClPvGjW2ryKni3DSjv3J8WjSgJ9X0mwPk4KAGwJO9YUEaiZ8Kqv6lRTWe0pIfFORZVAQtrfqOMucBj2WLO
View Details大部分内容为网上整理其它高人的帖子,现只作整理,用于查看: 在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。 什么是webkit WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。 同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。 传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS。不过, 随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分(例如Google Chrome和Maxthon 3采用V8引擎,却仍然宣称自己是WebKit内核)。 这里我们初步体验一下在android是使用webview浏览网页,在SDK的Dev Guide中有一个WebView的简单例子 。 在开发过程中应该注意几点: 1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。 2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。 webview.getSettings().setJavaScriptEnabled(true); 3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。 mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); 4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。 public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } 下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。 看一个实例: view plaincopy to clipboardprint? public class WebViewDemo extends Activity { private WebView mWebView; private Handler mHandler = new Handler(); public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.webviewdemo); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } }, "demo"); mWebView.loadUrl("file:///android_asset/demo.html"); } } 我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。 […]
View Details手机的在线支付,被认为是2012年最看好的功能,我个人认为这也是移动互联网较传统互联网将会大放光彩的一个功能。 人人有手机,人人携带手机,花钱买东西,不再需要取钱付现,不再需要回家上网银,想买什么,扫描一下,或者搜索一下,然后下单,不找零,直接送到你家,这将是手机支付给我们带来的全新交易体验。 谷歌刚推出了谷歌钱包,这必是我们后面要使用的主要手段,但是鉴于当前国情,我觉得有必要介绍一下android手机集成支付宝功能。 1.下载官方架包和说明文档 其实官方已经提供了安装指南,下载地址: https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash https://mobiless.alipay.com/product/product_down_load.htm?code=SECURITY_PAY 里面有有个pdf,详细说明了说用指南,写的比较详细,可以重点参考。 下载下来,我们主要是用到Android(20120104)目录下的alipay_plugin.jar和AppDemo/assets下的alipay_plugin223_0309.apk,这两个文件是我们不能修改的支付宝api和安装包。 2. 商户签约 现在的安全机制,都是这样,客户端需要先和服务端请求验证后才能进行进一步操作,oauth也是如此。 打开https://ms.alipay.com/,登陆支付宝,点击签约入口,选择"应用类产品",填写并等待审核,获取商户ID和账户ID。 签约的时候还要向需要提供实名认证和上传应用,所以我建议先把应用做好了,最后再集成支付宝。 我大概等了1-2天审核,审核是失败的,回复是应用类型啥的应该是"虚拟货币",我改成那个马上自动就审核通过了。 3.密钥配置 解压openssl-0.9.8k_WIN32(RSA密钥生成工具).zip,打开cmd,命令行进入openssl-0.9.8k_WIN32(RSA密钥生成工具)\bin目录下, (1).执行 1 openssl genrsa -out rsa_private_key.pem 1024 生成rsa_private_key.pem文件。 (2).再执行 1 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 生成rsa_public_key.pem 文件。 (3).在执行 1 openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt 将RSA私钥转换成 PKCS8 格式,去掉begin和end那两行,把里面的内容拷贝出来,保存到某个txt中,如rsa_private_pkcs8_key.txt中(我好像没用到这个)。 打开rsa_public_key.pem,即商户的公钥,复制到一个新的TXT中,删除文件头”—--BEGIN PUBLIC KEY—--“与文件尾”—--END PUBLIC KEY—--“还有空格、换行,变成一行字符串并保存该 TXT 文件,然后在网站的“我的商家服务”切换卡下的右边点击“密钥管理”,然后有个"上传商户公钥(RSA)"项,选择上传刚才的TXT文件. 好了,服务器配置OK,因为这一段之前没有截图,现在弄好了又不好截图,如果有不明白的地方请大家参考官方文档。 错误提示 failure calling remote service 原因: 私钥没转PKCS8 4.引用jar和包含安装包 (1).新建android工程; (2).copy上面说的alipay_plugin.jar到工程的libs目录下,并在java build path中通过Add External JARs找到并引用该jar; (3).copy上面说的alipay_plugin223_0309.apk安装包到assets目录下,后面配置路径用到。 如果libs和assets目录没有,手动建立者两个目录。 5.调用代码整理 这里我们要严重的参考文档中AppDemo,我们建一个包com.tianxia.lib.baseworld.alipay,把AppDemo的com.alipay.android.appDemo4包下的源码全部copy到刚才我们自己的包下,还有res目录下的资源文件也合并到我们工程res下。 其中AlixDemo.java,ProductListAdapter.java,Products.java是示例类,我们借鉴完后可以删除。 PartnerConfig.java是配置类,配置商户的一些配置参数。 其他的类是严重参考类,直接留下使用。 PartnerConfig.java代码如下: 1 2 3 4 5 6 7 […]
View Details
1 2 3 4 5 |
Android模拟器默认的地址是10.0.2.3,默认的DNS也是10.0.2.3,对于在家里上网学习Android的人来讲,一般电脑的IP都是192.168.1.100之类的,不在同一个网段。所以就会出现电脑可以上网但是模拟器不能上网的情况。其实设置方法很简单,只要把模拟器的默认DNS设置成电脑的DNS地址即可。 第一步:启动模拟器并确保adb连通 第二步:使用adb的shell,确认系统的各项属性 |
1 2 3 |
adb shell getprop |
1 2 3 4 5 |
getprop会列出系统当前的各项属性 第三步:得到模拟器的DNS地址 在结果里可以看到: |
1 2 3 4 |
[net.dns1]: [10.0.2.3] [net.dns2]: [10.0.2.4] [net.dns3]: [10.0.2.5] [net.dns4]: [10.0.2.6] |
1 |
第四步:把dns改成我们自己的DNS |
1 |
setprop net.dns1 192.168.1.1 |
1 |
<strong>注:一般TP-LINK及D-LINK的DNS都是192.168.1.1,如果不是请使用ipcnofig /all命令确认,另外,按照上面的步骤设置好后,需要在模拟器的Setting->无线网络设置里,把“启用数据流量”勾选上,让模拟器的TopTar上出现3G图标,才可上网~</strong> |
1 |
<strong> </strong> |
1 |
以上方法,在重启模拟器后设置的property会丢失,就需要重新设置一遍,可以使用下面的方法解决: |
1 2 3 |
找到你的SDK目录,里面有个system-images文件夹,这里保存着系统镜像文件,用文本编辑器打开里面的build.prop文件,在里面加上net.dns1=自己的DNS,保存;再重新创建模拟器即可~ 转自:<a href="http://www.cnblogs.com/flyme/archive/2011/11/14/2248213.html">http://www.cnblogs.com/flyme/archive/2011/11/14/2248213.html</a> |
1、搭建好android开发环境 2、启动android虚拟机(Eclipse下启动也可) 3、Windows系统打开cmd,进入android-sdk-windows\platform-tools目录 4、输入 adb install xxx.apk ;注意cmd下安装时不要使用中文,避免发生错误 5、刷新android虚拟机桌面,测试该应用程序 在android虚拟机中安装文件管理器后,即可进入文件管理操作; 在电脑上下载安装包 xxx.apk 后安装该软件到android虚拟机中,再借助文件管理器进行更简便的安装操作 转自:http://wu110cheng.blog.163.com/blog/static/133349654201232242429902/
View DetailsAndroid以其极强的开放性吸引着世界各地的开发者去开发各种各样的移动应用开发,而各种SDK更是为各个层次的开发者提供了一个可以尽情展示 他们专业技能和创造性的平台。虽然Java是各种平台最常用的编程语言,但是其它一些开发工具包只支持C、C++和Ruby。除此之外,所要开发应用的特 性在一定程度上也决定了开发环境的选择,开发工具内置的库能够降低开发强度,而特定的功能也能进行模块式独立开发,以下是Android开发者不可错过的 四款强大的Android开发工具: 1. Basic4Android Basic4Android是Android平台上一个简单而又强大的可视化快速应用开发工具,可以开发基于云计算的Android应用,同时还内 置了企业级移动应用开发所需的代码库;Basic4Android可被用来开发和测试数据库通信,甚至可以被用来开发2D的即时游戏。 Basic4Android兼容了Google的AdMob数据库,所以开发者可以在他们开发的应用中植入广告来获取收益。 主要特性: 编译为原生的bytecode,不需要运行库。生成的APK文件与Java / Eclipse生成的文件完全一样 与Java编写的应用性能相同 与Visual Basic类似的事件驱动编程语言,支持对象和代码模块 不需要写任何XML文件 可视化编辑器支持多屏幕和各种分辨率 支持Android 1.6及其以上版本的所有移动设备 支持自动完成、内置文档、内部索引和其它高级功能 强大的单步调试功能 支持所有的Android核心特性 2. Gimbal context ware Gimbal是高通旗下Qualcomm Labs推出的一款面向iOS和Android平台的SDK。Gimbal中的内置函数库能够为开发者提供特定位置或地理围栏解决方案。Gimbal环境 感知SDK帮助开发者向手机用户提供及时、个性化的相关内容,开发者可以从SDK中选择所需的软件库加入应用中。 这些SDK包括: Gimbal Geofence:旨在提供基于地理围栏的低功耗位置识别服务。这一工具将赋予应用“环境感知”功能,即能够根据用户所在的位置对用户做出有益调整。 Gimbal Interest Sensing:使应用能够根据终端用户的个人信息和兴趣做出调整,此工具可以针对特定受众提供定制应用。 Gimbal Image Recognition:使终端用户可以通过智能手机的摄像头发起互动体验。 Gimbal Manager:是一款基于Web的工具,用于管理地理围栏、个人信息规则、图像目标、内容、发布和分析。 Gimbal Privacy:供终端用户管理Gimbal及其功能,Gimbal旨在让终端用户了解和掌控他们分享环境和兴趣的内容和时间,并保护用户的个人信息。 3. Titanium SDK Titanium旨在为跨平台的原生移动开发提供一种更高级的API,所以开发者可以访问一系列从用户界面组件、插座接口到通知系统集成的原生特性 和功能。Titanium的目的是将Titanium应用程序和纯原生应用程序之间在功能方面的差异缩小到几乎为零。目前,Titanium支持iOS、 Android、BlackBerry和Windows Phone。此外,Titanium借助统一的JavaScript API,针对特定平台的功能特性以及原生性能,实现代码重用,大大地缩减了开发者的工作时间。 主要特性: 开源:Titanium采用宽松的Apache 2.0许可证 高效开发:通过代码重用,减少了开发者的工作时间,调高工作效率 廉价特性:通过使用JavaScript SDK降低了跨平台操作的成本 4. Vuforia Vuforia是一款能将现实世界物体转变为互动体验的扩增实境平台。旨在帮助开发者打造全新级别的真实世界物品与虚拟物品的互动。它使用家算计视 觉技术来实时地识别和跟踪平面图像以及简单的3D图像,使开发者能够在现实世界和数字体验之间架起桥梁。 Vuforia通过Unity游戏引擎扩展提供了C、Java、Objective-C和.Net语言的应用程序编程接口。从而Vuforia SDK能够同时支持iOS和Android的原生开发,这也使开发者在Unity引擎中开发AR应用程序时很容易将其移植到iOS和Android平台 上。 主要特性: 跨平台:同时支持iOS和Android系统 AR特性: Vuforia是移动设备最好的增强现实体验平台 最佳的性能体验:通过无与伦比的交互性实现现实与虚拟的完美互动 文字识别功能:支持借助智能手机和平板电脑摄像头实现实时文字识别 文章来源:Examiner /CSDN
View DetailsCardKit 是来自豆瓣的一个移动 UI 框架,使用 Card\Unit\Component 概念快速构建移动 Web 应用。应用外观跟原生应用无异。 http://ozjs.org/CardKit 转自:http://www.oschina.net/p/cardkit
View Details