学习一下人家100日写100个网页的做法,我也用100日写100个完整的Android程序。

这些程序的最基本要求:

1 完整性-每一个程序都必须是独立可执行的

2 不反复性-所用的重点知识点都不一样

开篇章:

--本章參考书本:Hello Android

编写一个简单的页面。例如以下,图1:

在文本框输入网址,图2:

点击按钮GO,然后就能够打开这个站点了, 图3:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2VuZGVuMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="150" height="230" alt="" />

步骤:

一  首先,新建一个项目,详细參数设置能够參照我的项目设置。例如以下:

主要看

1 src下的Browser.java:基本的java逻辑代码

2 layout下的activity_browser.xml。xml写的布局

3 values的strings.xml会须要定义一些字符

4 AndroidManifest.xml是软件的定义文件了

二 设置布局layout。打开activity_broswser.xml

加入代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="su.bi.browerserintent.Browser" > <EditText
android:id="@+id/url_field"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:imeOptions="actionGo"
android:inputType="textUri"
android:lines="1" /> <Button
android:id="@+id/go_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/go_button" /> </LinearLayout>

知识点:
1 使用LinearLayout布局,加入一个EditText就是图片的第一有一个下横线的框。接受网址的输入注意当中的layout_width的设置,为零。那么后面的layout_weight="1.0"就使得框格扩展全部该行余下的空间了,故此直接设置layout_width为零就能够了。

2 当中的參数imeOptions="actionGo"和imputType="textUri"是告诉Android使用的软键盘应该是带".com"和"/"和有Go按键的。按下这个按键就能够直接跳转到指定网页。

就这样就做出如图1的界面了

二 逻辑代码 Browser.java

接下来就是驱动界面工作的逻辑代码

1 设置优点理输入和按键功能

    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browser); //Get a handle to all user interface elements
urlText = (EditText)findViewById(R.id.url_field);
goButton = (Button)findViewById(R.id.go_button); //Set up Handlers
goButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
openBrowser();
}
}); urlText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (equ(keyCode, KeyEvent.KEYCODE_ENTER)) {
openBrowser();
return true;
}
return false;
}
});
}

当中的openBrowser函数是以下自己定义的。

goButton这个按键响应点击事件。故此使用setOnClickListener(new OnClickListener())设置好OnClickListener对象监听这个按键。这里是Java独有的机制了,直接在new 后面写一个OnClickListener的继承类,重写onClick函数。 C++就不能这么写了。

urlText是EditText的id。使用setOnKeyListener设置好对象监听。假设按下ENTER的时候就响应openBrowser函数,当然如今的触屏手机一般都没有按键了。只是有软键盘。

openBroser函数定义:

private void openBrowser() {
<span style="white-space:pre"> </span>Uri uri = Uri.parse(urlText.getText().toString());
<span style="white-space:pre"> </span>Intent intent = new Intent(Intent.ACTION_VIEW, uri);
<span style="white-space:pre"> </span>startActivity(intent);
}

新建一个Intent,使用浏览器打开这个网址。

到此为止,整个程序就能够执行了。

可是如今问题来了:

假设输入blog.csdn.net/kenden23。那么就会程序崩溃的。这是为什么呢?

又一次输入:http://blog.csdn.net/kenden23就能够正常工作了。

哦,原来必须是以http://开头的文本才干够正常工作,

这就须要小小处理一下了。这就是算法排上用场的时候啦,字符串处理问题--有点牛刀宰鸡的感觉了。

又一次定义openBrwoser函数:

	private static final String HTTPHEAD = "http://";

	public static<T> boolean equ(T a, T b) {
return a == b;
} private void openBrowser() {
String address = urlText.getText().toString();
address = checkHttpAddress(address);
Uri uri = Uri.parse(address);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
} private String checkHttpAddress(String address) {
int len = HTTPHEAD.length();
len = len < address.length()? len : address.length();
String str = address.substring(0, len);
if (equ(str, HTTPHEAD)) {
return address;
}
return HTTPHEAD + address;
}

小技巧:自己定义equ的优点是不会把==错写成=了。坏处?多写点代码。

哈哈。

主要是checkHttpAddress这个函数起作用,就是推断当前用户的输入是否带"http://",假设没带。那么就自己主动加上,假设带了,就不用管了。

注意算法的功力,达到无bug。不管用户输入什么字符串。都不会程序崩溃了,只是或许会找不到站点,例如以下图:

这样工作是正常的。

故此大功告成!

Android百日程序 开篇章:Intent打开网页的更多相关文章

  1. Android -- 真正的 高仿微信 打开网页的进度条效果

    (本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...

  2. 【转载】Chrome使用自定义协议打开本地程序并运行IE打开网页

    部分内容转载自: http://blog.sina.com.cn/s/blog_e2b8213a0102wqby.html 项目中遇到某需求:chorme要运行IE并打开网页.解决方案之一就是通过自定 ...

  3. Android百日程序:绘画程序-画手指路径

    本程序实如今一个画布中,用手指绘图的效果. 须要使用的知识: 1 Canvas 画布,动态保存更新当前画面 2 Path 记录并画出手接触屏幕经过的路径 如以下效果图: 仅仅须要依照默认设置新建一个项 ...

  4. Android百日程序:GridView实现相冊效果

    本章使用GridView控件来做一个相冊效果. 图片效果例如以下: 响应点击事件,点击的时候提示是当前第几章图片.从左到右,从上到下. 点击了第一张图片,显示了1. 步骤: 一 新建项目,然后把图片资 ...

  5. android的intent打开系统程序

    打开设置主界面 Intent intent = new Intent(Android.provider.Settings.ACTION_SETTINGS); //系统设置 startActivityF ...

  6. 在WPF程序中打开网页:使用代理服务器并可进行JS交互

    本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...

  7. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序     在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity ...

  8. Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 1.跳转到拨号界面,代码如下: 1)直接拨打 Intent intentPhone = new Intent ...

  9. Android开发之Intent略解

    Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意 ...

随机推荐

  1. Webwork【04】Configuration 详解

    Webwork做为经典的Web MVC 框架,个人觉得源码中配置文件这部分代码的实现十分考究. 支持自定义自己的配置文件.自定义配置文件读取类.自定义国际化支持. 可以作为参考,单独引入到其他项目中, ...

  2. N-Queens I II(n皇后问题)(转)

    N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...

  3. Oracle Data Integrator 12c----一致性 CDC(Consistent CDC)

    一致性 CDC 中引入了变化集的概念.一个变化集中可以包括多个相互存在关联关系(如主外键引用关系)的表.CDC 在捕获和发布一个变化集中的变化时能够保证数据的一致性.这个练习介绍如何使用能够保证一致性 ...

  4. Android插件化开发之解决OpenAtlas组件在宿主的注冊问题

    OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主中注冊.像Service,ContentProvider等组件眼下没有 ...

  5. urllib2特点--urllib2.build_opener对象接口

    # -*- coding: cp936 -*- #python 27 #xiaodeng #urllib2特点--urllib2.build_opener对象接口 import urllib2 imp ...

  6. Android(java)同步方法synchronized

    synchronized 是java语言keyword.当它用来修饰一个方法或者一个代码块的时候,可以保证在同一时刻最多仅仅有一个线程运行该段代码. synchronized keyword,它包含两 ...

  7. Ubuntu下,terminal经常使用快捷键

    # ctrl + l - 清屏 . cLear # ctrl + c - 终止命令. # ctrl + d - 退出 shell,好像也能够表示EOF. # ctrl + r - 从命令历史中找 . ...

  8. 什么是分表和分区 MySql数据库分区和分表方法

    1.为什么要分表和分区 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性 ...

  9. JAVA List删除时需注意的地方

    JAVA的LIST在删除时,一般会用list.remove(o); 但这样往往会出现问题,先来看下面的这段代码: package com.demo; import java.util.ArrayLis ...

  10. Ubuntu菜鸟入门(十三)—— 切换软件源

    默认中国服务器,我们把它切换成aliyun的. 在设置--软件和更新里--下载自--其他站点--中国--http://mirrors.aliyun.com/ubuntu 先把所有软件源和软件更新到最新 ...