首页 > 代码库 > Android百日程序 开篇章:Intent打开网页

Android百日程序 开篇章:Intent打开网页

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

这些程序的最基本要求:

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

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


开篇章:

--本章参考书本:Hello Android

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


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


点击按钮GO,然后就可以打开这个网站了, 图3:



步骤:

一  首先,新建一个项目,具体参数设置可以参照我的项目设置,如下:


主要看

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打开网页