【Android】环境配置(转载)

Continue Read..

——工欲善其事必先利其器

引言

本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教。

在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld。本文的主题如下:

  • 1、环境搭建
    • 1.1、JDK安装
    • 1.2、Eclipse安装
    • 1.3、Android SDK安装
    • 1.4、ADT安装
    • 1.5、创建AVD
  • 2、HelloWorld

1、环境搭建

1.1、JDK安装

如果你还没有JDK的话,可以去这里下载,接下来的工作就是安装提示一步一步走。设置环境变量步骤如下:

  1. 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:
  2. JAVA_HOME值为: D:\Program Files\Java\jdk1.6.0_18(你安装JDK的目录
  3. CLASSPATH值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;
  4. Path:  在开始追加 %JAVA_HOME%\bin;
  5. NOTE:前面四步设置环境变量对搭建Android开发环境不是必须的,可以跳过。

安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java –version 查看JDK的版本信息。出现类似下面的画面表示安装成功了:

image

图1、验证JDK安装是否成功

1.2、Eclipse安装

如果你还么有Eclipse的话,可以去这里下载,下载如下图所示的Eclipse IDE for Java Developers(92M)的win 32bit版:

image图2、Eclipse下载

解压之后即可使用。

1.3、Android SDK安装

在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。

  • 运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Force https://..."这项,再点击Available Packages 。
  • 选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包
  • 在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。

image图2、设置Android SDK的环境变量

“确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。 
运行 android –h 如果有类似以下的输出,表明安装成功:

image图3、验证Android SDK是否安装成功

1.4、ADT安装

  • 打开 Eclipse IDE,进入菜单中的 "Help" -> "Install New Software"
  • 点击Add...按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入http://dl-ssl.google.com/android/eclipse。如下图所示:

image

  • 确定返回后,在work with后的下拉列表中选择我们刚才添加的ADT,我们会看到下面出有Developer Tools,展开它会有Android DDMS和Android Development Tool,勾选他们。 如下图所示:

image

  • 然后就是按提示一步一步next。

完成之后:

  • 选择Window > Preferences...
  • 在左边的面板选择Android,然后在右侧点击Browse...并选中SDK路径,本机为: 
    D:\AndroidDevelop\android-sdk-windows
  • 点击Apply、OK。配置完成。

1.5、创建AVD

为使Android应用程序可以在模拟器上运行,必须创建AVD。

  • 1、在Eclipse中。选择Windows > Android SDK and AVD Manager
  • 2、点击左侧面板的Virtual Devices,再右侧点击New
  • 3、填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值 
  • 4、点击Create AVD即可完成创建AVD

注意:如果你点击左侧面板的Virtual Devices,再右侧点击New ,而target下拉列表没有可选项时,这时候你:

image

    • 然后点击Install Selected按钮,接下来就是按提示做就行了

要做这两步,原因是在1.3、Android SDK安装中没有安装一些必要的可用包(Available Packages)。

2、HelloWorld

  • 通过File -> New -> Project 菜单,建立新项目"Android Project"
  • 然后填写必要的参数,如下图所示:(注意这里我勾选的是Google APIs,你可以选你喜欢的,但你要创建相应的AVD)

image

相关参数的说明:

  1. Project Name: 包含这个项目的文件夹的名称。
  2. Package Name: 包名,遵循JAVA规范,用包名来区分不同的类是很重要的,我用的是helloworld.test。
  3. Activity Name: 这是项目的主类名,这个类将会是Android的Activity类的子类。一个Activity类是一个简单的启动程序和控制程序的类。它可以根据需要创建界面,但不是必须的。
  4. Application Name: 一个易读的标题在你的应用程序上。
  5. 在"选择栏"的 "Use default location" 选项,允许你选择一个已存在的项目。
  • 点击Finish后,点击Eclipse的Run菜单选择Run Configurations…
  • 选择“Android Application”,点击在左上角(按钮像一张纸上有个“+”号)或者双击“Android Application”, 有个新的选项“New_configuration”(可以改为我们喜欢的名字)。
  • 在右侧Android面板中点击Browse…,选择HelloWorld
  • 在Target面板的Automatic中勾选相应的AVD,如果没有可用的AVD的话,你需要点击右下角的Manager…,然后新建相应的AVD。如下图所示:

image

  • 然后点Run按钮即可,运行成功的话会有Android的模拟器界面,如下图所示:

image

作者:吴秦
出处:http://www.cnblogs.com/skynet/
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接).

【Android】教你写Android小应用:体重测试

Continue Read..

点击查看原图点击查看原图

这个就是界面.

 

下面直接贴代码..代码里都写了注释的

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="20dp"
    android:orientation="vertical" >

    <TableRow 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        >
	    <TextView
		    android:gravity="center"
	        android:layout_width="fill_parent"
	        android:layout_height="wrap_content"
	        android:textSize="24dp"
	        android:textColor="#ee00ff"
	        android:text="@string/hello" />
    </TableRow>
    <TableRow 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="性别:" />


		<RadioGroup 
		    	android:id="@+id/rg1"
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
		    	android:orientation="horizontal"
		    >
	        <RadioButton
	            android:id="@+id/radioButton1"
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
	            android:checked="true"
	            android:text="男" />
			<RadioButton
			    android:id="@+id/radioButton2"
			    android:layout_width="wrap_content"
			    android:layout_height="wrap_content"
			    android:text="女" />
		</RadioGroup>
    </TableRow>
    
    <TableRow 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
        android:gravity="center"
        >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="身高:" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:inputType="number"
            android:hint="请输入身高(单位cm)"
            />
    </TableRow>

    <TableRow android:gravity="center">
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="提交" />

    </TableRow>
    
	    <TextView
	        android:id="@+id/textView3"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:gravity="center"
	        android:text="" />
    
</TableLayout>

 

 

 

 

package com.cuzn.Activity;

import java.text.DecimalFormat;
import java.text.Format;
import java.text.NumberFormat;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class Ex03_10Activity extends Activity {
	private String sex;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        RadioGroup r = (RadioGroup)findViewById(R.id.rg1);
        
        int id = r.getCheckedRadioButtonId();
        
        //根据id获取对用的对象
        RadioButton rb1 = (RadioButton)findViewById(R.id.radioButton1);
        RadioButton rb2 = (RadioButton)findViewById(R.id.radioButton2);
//        System.out.println(id+"--"+R.id.radioButton1+"="+R.id.radioButton2);
//        if(rb1.isChecked()){//判断是否选中isChecked()
//        	this.sex = "男";
//		}else if(rb2.isChecked()){
//			this.sex = "女";
//		}else{
//			Toast.makeText(Ex03_10Activity.this, "请选择性别!", Toast.LENGTH_SHORT).show();
//			return;
//		}
//        Toast.makeText(Ex03_10Activity.this, this.sex, Toast.LENGTH_SHORT).show();
        
        EditText et = (EditText)findViewById(R.id.editText1);
        
        Button b = (Button)findViewById(R.id.button1);
        
        b.setOnClickListener(new ButtonClick(et));
    }
    
    class ButtonClick implements OnClickListener{
    	private String sex;
    	private EditText et;
		public ButtonClick(EditText et) {
			// TODO Auto-generated constructor stub
//			this.sex = sex;
			this.et = et;  
		}
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			
			//r.getCheckedRadioButtonId() 是获取选中单选按钮的id值
			RadioGroup r = (RadioGroup)findViewById(R.id.rg1);
			if(r.getCheckedRadioButtonId() == R.id.radioButton1){
				this.sex = "男";
			}else if(r.getCheckedRadioButtonId() == R.id.radioButton2){
				this.sex = "女";
			}else{
				Toast.makeText(Ex03_10Activity.this, "请选择性别!", Toast.LENGTH_SHORT).show();
				return;
			}
//			System.out.println(r.getCheckedRadioButtonId()+"--"+R.id.radioButton1+"="+R.id.radioButton2);
//			Toast.makeText(Ex03_10Activity.this, this.sex, Toast.LENGTH_SHORT).show();
			if(et.getText().toString().length()==0){
				Toast.makeText(Ex03_10Activity.this, "请填写身高!", Toast.LENGTH_SHORT).show();
				return;
			}
			int hig = Integer.parseInt(et.getText().toString());
			TextView tvStr = (TextView)findViewById(R.id.textView3);
			tvStr.setText("您是一位:"+this.sex+"士\n 您的身高是:"+et.getText().toString()+"cm \n 您的标准体重是:"+this.getWeight(this.sex, hig)+"公斤");
			
		}
		
		//下面2个是算法
		private String getWeight(String sex,int hig){
			String str="";
			if(sex == "男"){
				str = Format((hig-80)*0.7);
			}else{
				str = Format((hig-80)*0.6);
			}
			
			return str;
			
		}
		private String Format(double d) {
			// TODO Auto-generated method stub
			NumberFormat f = new DecimalFormat("0.00");
			String s = f.format(d);
			return s;
		}
    	
    }
}
不懂的地方可以跟帖问我....以后的代码越来越多了...都只贴代码..会写注释的  ...最后我程序一起放附件里..有兴趣的自己下的玩

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】view的几种布局方式及实践

Continue Read..

我们对Android应用程序运行原理及布局文件可谓有了比较深刻的认识和理解,并且用“Hello World!”程序来实践证明了。在继续深入Android开发之旅之前,有必要解决前两篇中没有介绍的遗留问题:View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍。View的布局显示方式有下面几种:线性布局(Linear Layout)、相对布局(Relative Layout)、表格布局(Table Layout)、网格视图(Grid View)、标签布局(Tab Layout)、列表视图(List View)、绝对布局(AbsoluteLayout)。本文虽然是介绍View的布局方式,但不仅仅是这样,其中涉及了很多小的知识点,绝对能给你带来Android大餐!

本文的主要内容就是分别介绍以上视图的七种布局显示方式效果及实现,大纲如下:

  • 1、View布局概述
  • 2、线性布局(Linear Layout)
    • 2.1、Tips:android:layout_weight="1"
  • 3、相对布局(Relative Layout)
  • 4、表格布局(Table Layout)
  • 5、列表视图(List View)
    • 5.1、一个小的改进
    • 5.2、补充说明
  • 6、网格视图(Grid View)
  • 7 、绝对布局()
  • 8、标签布局(Tab Layout)

1、view的布局显示概述

通过前面的学习我们知道:在一个Android应用程序中,用户界面通过ViewViewGroup对象构建。Android中有很多种View和ViewGroup,他们都继承自View类。View对象是Android平台上表示用户界面的基本单元。

View的布局显示方式直接影响用户界面,View的布局方式是指一组View元素如何布局,准确的说是一个ViewGroup中包含的一些View怎么样布局。ViewGroup类是布局(layout)和视图容器(View container)的基类,此类也定义了ViewGroup.LayoutParams类,它作为布局参数的基类,此类告诉父视图其中的子视图想如何显示。例如,XML布局文件中名为layout_something的属性(参加上篇的4.2节)。我们要介绍的View的布局方式的类,都是直接或间接继承自ViewGroup类,如下图所示:

ViewGroup的继承

图1、继承自ViewGroup的一些布局类

其实,所有的布局方式都可以归类为ViewGroup的5个类别,即ViewGroup的5个直接子类。其它的一些布局都扩展自这5个类。下面分小节分别介绍View的七种布局显示方式。

2、线性布局(Linear Layout)

线性布局:是一个ViewGroup以线性方向显示它的子视图(view)元素,即垂直地水平地。之前我们的Hello World!程序中view的布局方式就是线性布局的,一定不陌生!如下所示res/layour/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"><!-- have an eye on ! -->
<Button android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button1"
android:layout_weight="1"
/>
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button2"
android:layout_weight="1"
/>
<Button android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button3"
android:layout_weight="1"
/>
<Button android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button4"
android:layout_weight="1"
/>
<Button android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button5"
android:layout_weight="1"
/>
</LinearLayout>

从上面可以看出根LinearLayout视图组(ViewGroup)包含5个Button,它的子元素是以线性方式(horizontal,水平的)布局,运行效果如下图所示:

linearlayout1

图2、线性布局(水平或者说是横向)

如果你在android:orientation="horizontal"设置为vertical,则是是垂直或者说是纵向的,如下图所示:

linearlayout2

图3、线性布局(垂直或者说是纵向)

2.1、Tips:android:layout_weight="1"

这个属性很关键,如果你没有显示设置它,它默认为0。把上面布局文件(水平显示的那个)中的这个属性都去掉,运行会得出如下结果:

linearlayout3

图4、layout_weight属性

没有了这个属性,我们本来定义的5个Button运行后却只显示了2个Button,为什么呢??

"weight"顾名思义是权重的意思,layout_weight 用于给一个线性布局中的诸多视图的重要程度赋值。所有的视图都有一个layout_weight值,默认为零,意思是需要显示多大的视图就占据多大的屏幕空间。这就不难解释为什么会造成上面的情况了:Button1~Button5都设置了layout_height和layout_width属性为wrap_content即包住文字内容,他们都没有设置layout_weight 属性,即默认为0.,这样Button1和Button2根据需要的内容占据了整个屏幕,别的就显示不了啦!

若赋一个高于零的值,则将父视图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight值以及该值在当前屏幕布局的整体layout_weight值和在其它视图屏幕布局的layout_weight值中所占的比率而定。举个例子:比如说我们在 水平方向上有一个文本标签和两个文本编辑元素。该文本标签并无指定layout_weight值,所以它将占据需要提供的最少空间。如果两个文本编辑元素每一个的layout_weight值都设置为1,则两者平分在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。如果两个文本编辑元素其中第一个的layout_weight值设置为1,而第二个的设置为2,则剩余空间的三分之二分给第一个,三分之一分给第二个(数值越小,重要度越高)。

3、相对布局(Relative Layout)

相对布局:是一个ViewGroup以相对位置显示它的子视图(view)元素,一个视图可以指定相对于它的兄弟视图的位置(例如在给定视图的左边或者下面)或相对于RelativeLayout的特定区域的位置(例如底部对齐,或中间偏左)。

相对布局是设计用户界面的有力工具,因为它消除了嵌套视图组。如果你发现你使用了多个嵌套的LinearLayout视图组后,你可以考虑使用一个RelativeLayout视图组了。看下面的res/layour/main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Type here:"/>
<EditText
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background"
android:layout_below="@id/label"/><!-- have an eye on ! -->
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry" <!-- have an eye on ! -->
android:layout_alignParentRight="true" <!-- have an eye on ! -->
android:layout_marginLeft="10dip"
android:text="OK" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok" <!-- have an eye on ! -->
android:layout_alignTop="@id/ok" <!-- have an eye on ! -->

android:text="Cancel" />
</RelativeLayout>

从上面的布局文件我们知道,RelativeLayout视图组包含一个TextView、一个EditView、两个Button,注意标记了<!-- have an eye on ! -->(请注意运行代码的时候,请把这些注释去掉,否则会运行出错,上面加上是为了更加醒目!)的属性,在使用相对布局方式中就是使用这些类似的属性来定位视图到你想要的位置,它们的值是你参照的视图的id。这些属性的意思很简单,就是英文单词的直译,就不多做介绍了。运行之后,得如下结果:

relativelayout

图5、相对布局

4、 表格布局(Table Layout)

表格布局:是一个ViewGroup以表格显示它的子视图(view)元素,即行和列标识一个视图的位置。其实Android的表格布局跟HTML中的表格布局非常类似,TableRow 就像HTML表格的<tr>标记。

用表格布局需要知道以下几点

看下面的res/layour/main.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:shrinkColumns="0,1,2"><!-- have an eye on ! -->
<TableRow><!-- row1 -->
<Button android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button1"
android:layout_column="0"
/>
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button2"
android:layout_column="1"
/>
</TableRow>
<TableRow><!-- row2 -->
<Button android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button3"
android:layout_column="1"
/>
<Button android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button4"
android:layout_column="1"
/>
</TableRow>
<TableRow>
<Button android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button5"
android:layout_column="2"
/>
</TableRow>
</TableLayout>

运行之后可以得出下面的结果:

tablelayout

图6、表格布局

5、列表视图(List View)

列表布局:是一个ViewGroup以列表显示它的子视图(view)元素,列表是可滚动的列表。列表元素通过ListAdapter自动插入到列表。

ListAdapter:扩展自Adapter,它是ListView和数据列表之间的桥梁。ListView可以显示任何包装在ListAdapter中的数据。该类提供两个公有类型的抽象方法:

  1. public abstract boolean areAllItemsEnabled () :表示ListAdapter中的所有元素是否可激活的?如果返回真,即所有的元素是可选择的即可点击的。
  2. public abstract boolean isEnabled (int position) :判断指定位置的元素是否可激活的?

下面通过一个例子来,创建一个可滚动的列表,并从一个字符串数组读取列表元素。当一个元素被选择时,显示该元素在列表中的位置的消息。

1)、首先,将res/layour/main.xml的内容置为如下:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>

这样就定义了元素在列表中的布局。

2)、src/skynet.com.cnblogs.www/HelloWorld.java文件的代码如下:

package skynet.com.cnblogs.www;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class HelloWorld extends ListActivity  {
    //注意这里Helloworld类不是扩展自Acitvity,而是扩展自ListAcitivty
    /** Called when the activity is first created. */     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(this, R.layout.main, COUNTRIES));         
ListView lv = getListView();
        lv.setTextFilterEnabled(true);

        lv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
            // When clicked, show a toast with the TextView text             
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                Toast.LENGTH_SHORT).show();
          }
        });
    }
    static final String[] COUNTRIES = new String[] {
	    "1", "2", "3", "4", "5",
	    "6", "7", "8", "9", "10",
	    "11", "12", "13", "14", "15",
	    "16", "17", "18", "19", "20",
	    "21", "22", "23", "24"
	  };
}

NoteonCreate()函数中并不像往常一样通过setContentView()为活动(Activity)加载布局文件,替代的是通过setListAdapter(ListAdapter)自动添加一个ListView填充整个屏幕的ListActivity。在此文件中这个方法以一个ArrayAdapter为参数:setListAdapter(new ArrayAdapter<String>(this, R.layout.main, COUNTRIES)),这个ArrayAdapter管理填入ListView中的列表元素。ArrayAdapter的构造函数的参数为:this(表示应用程序的上下文context)、表示ListViewde布局文件(这里是R.layout.main)、插入ListView的List对象对数组(这里是COUNTRES)。

setOnItemClickListener(OnItemClickListener)定义了每个元素的点击(on-click)的监听器,当ListView中的元素被点击时,onItemClick()方法被调用,在这里是即一个Toast消息——每个元素的位置将显示。

3)、运行应用程序得如下结果(点击1之后,在下面显示了1):

listview

图7、列表布局

NOTE:如果你改了HelloWorld extends ListActivity 而不是Activity之后,运行程序是提示:“Conversion to Dalvik format failed with error 1”。可以这么解决:解决办法是 Project > Clean... > Clean project selected below > Ok

5.1、一个小的改进

上面我们是把要填充到ListView中的元素硬编码到HelloWorld.java文件中,这样就缺乏灵活性!也不符合推荐的应用程序的界面控制它行为的代码更好地分离的准则!

其实我们可以把要填充到ListView的元素写到res/values/strings.xml文件中的<string-array>元素中,然后再源码中动态地读取。这样strings.xml的内容类似下面:

<?xml version="1.0" encoding="utf-8"?> <resources> 
    <string-array name="countries_array">    
     <item>1</item>       
  <item>2</item>         
<item>3</item>         
<item>4</item>         
<item>5</item>         
<item>6</item>        
<item>7</item>     
</string-array> </resources>

然而HelloWorld.java文件中的onCreate()函数,则这样动态访问这个数组及填充到ListVies:

String[] countries = getResources().getStringArray(R.array.countries_array);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, countries));

5.2、补充说明

首先总结一下列表布局的关键部分:

  • 布局文件中定义ListView
  • Adapter用来将数据填充到ListView
  • 要填充到ListView的数据,这些数据可以字符串、图片、控件等等

其中Adapter是ListView和数据源之间的桥梁,根据数据源的不同Adapter可以分为三类:

  • String[]: ArrayAdapter
  • List<Map<String,?>>: SimpleAdapter
  • 数据库Cursor: SimpleCursorAdapter

使用ArrayAdapter(数组适配器)顾名思义,需要把数据放入一个数组以便显示,上面的例子就是这样的;SimpleAdapter能定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等;SimpleCursorAdapter是和数据库有关的东西。篇幅有限后面两种就不举例实践了。你可以参考android ListView详解orArrayAdapter ,SimpleAdapter ,SimpleCursorAdapter 区别

6、网格视图(Grid View)

网格布局:是一个ViewGroup以网格显示它的子视图(view)元素,即二维的、滚动的网格。网格元素通过ListAdapter自动插入到网格。ListAdapter跟上面的列表布局是一样的,这里就不重复累述了。

下面也通过一个例子来,创建一个显示图片缩略图的网格。当一个元素被选择时,显示该元素在列表中的位置的消息。

1)、首先,将上面实践截取的图片放入res/drawable/

2)、res/layour/main.xml的内容置为如下:这个GridView填满整个屏幕,而且它的属性都很好理解,按英文单词的意思就对了。

<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"     android:layout_width="fill_parent" 
    android:layout_height="fill_parent"     
android:columnWidth="90dp"     
android:numColumns="auto_fit"     
android:verticalSpacing="10dp"     
android:horizontalSpacing="10dp"     
android:stretchMode="columnWidth"     
android:gravity="center" />

3)、然后,HelloWorld.java文件中onCreate()函数如下:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(HelloWorld.this, " " + position, Toast.LENGTH_SHORT).show();
            }
        });
    } 

onCreate()函数跟通常一样,首先调用超类的onCreate()函数函数,然后通过setContentView()为活动(Activity)加载布局文件。紧接着是,通过GridView的id获取布局文件中的gridview,然后调用它的setListAdapter(ListAdapter)函数填充它,它的参数是一个我们自定义的ImageAdapter。后面的工作跟列表布局中一样,为监听网格中的元素被点击的事件而做的工作。

4)、实现我们自定义ImageAdapter,新添加一个类文件,它的代码如下:

package skynet.com.cnblogs.www;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter     
public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes            
 imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images     private Integer[] mThumbIds = {
            R.drawable.linearlayout1, R.drawable.linearlayout2,
            R.drawable.linearlayout3, R.drawable.listview,
            R.drawable.relativelayout, R.drawable.tablelayout
    };
}

ImageAdapter类扩展自BaseAdapter,所以首先得实现它所要求必须实现的方法。构造函数和getcount()函数很好理解,而getItem(int)应该返回实际对象在适配器中的特定位置,但是这里我们不需要。类似地,getItemId(int)应该返回元素的行号,但是这里也不需要。

这里重点要介绍的是getView()方法,它为每个要添加到ImageAdapter的图片都创建了一个新的View。当调用这个方法时,一个View是循环再用的,因此要确认对象是否为空。如果是空的话,一个ImageView就被实例化且配置想要的显示属性:

如果View传到getView()不是空的,则本地的ImageView初始化时将循环再用View对象。在getView()方法末尾,position整数传入setImageResource()方法以从mThumbIds数组中选择图片。

运行程序会得到如下结果(点击第一张图片之后):

gridviewlayout

图8、网格布局

7、绝对布局(AbsoluteLayout)

绝对布局:是一个ViewGroup以绝对方式显示它的子视图(view)元素,即以坐标的方式来定位在屏幕上位置。

这种布局方式很好理解,在布局文件或编程地设置View的坐标,从而绝对地定位。如下所示布局文件:

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
   android:id="@+id/AbsoluteLayout01" 
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   >    <TextView android:id="@+id/txtIntro"      
android:text="绝对布局"      
android:layout_width="fill_parent"     

android:layout_height="wrap_content" androi

d:layout_x="20dip"<!-- have an eye on ! --> android:layout_y="20dip">

<!-- have an eye on ! --> </TextView> </AbsoluteLayout>

简单吧,这里不在深入了!

8、标签布局(Tab Layout)

标签布局:是一个ViewGroup以标签的方式显示它的子视图(view)元素,就像在Firefox中的一个窗口中显示多个网页一样。

为了狂创建一个标签UI(tabbed UI),需要使用到TabHostTabWidgetTabHost必须是布局的根节点,它包含为了显示标签的TabWidget和显示标签内容的FrameLayout

可以有两种方式实现标签内容:使用标签在同一个活动中交换视图、使用标签在完全隔离的活动之间改变。根据你的需要,选择不同的方式,但是如果每个标签提供不同的用户活动,为每个标签选择隔离的活动,因此你可以更好地以分离的组管理应用程序,而不是一个巨大的应用程序和布局。下面还有一个例子来创建一个标签UI,每个标签使用隔离的活动。

1)、在项目中建立三个隔离的Activity类:ArtistisActivity、AlbumActivity、SongActivity。它们每个表示一个分隔的标签。每个通过TextView显示简单的一个消息,例如:

public class ArtistsActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView textview = new TextView(this);
        textview.setText("This is the Artists tab");
        setContentView(textview);
    }
}

其它两个类也类似。

2)、设置每个标签的图标,每个图标应该有两个版本:一个是选中时的,一个是未选中时的。通常的设计建议是,选中的图标应该是深色(灰色),未选中的图标是浅色(白色)。

现在创建一个state-list drawable指定哪个图标表示标签的状态:将图片放到res/drawable目录下并创建一个新的XML文件命名为ic_tab_artists.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">    
 <!-- When selected, use grey -->    
 <item android:drawable="@drawable/ic_tab_artists_grey" android:state_selected="true" /> 
<!-- When not selected, use white-->     
<item android:drawable="@drawable/ic_tab_artists_white" /> </selector>

3)、res/layour/main.xml的内容置为如下:

<?xml version="1.0" encoding="utf-8"?>

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" /> </LinearLayout> </TabHost>

这个布局将显示标签和提供上面创建的活动之间的导航。TabHost要求包含一个TabWidget和一个FrameLayoutTabWidgetFrameLayoutTabHost以线性垂直地显示。

4)、HelloWorld.java文件源码如下:

package skynet.com.cnblogs.www;
import android.widget.TabHost;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
public class HelloWorld extends TabActivity{
    /** Called when the activity is first created. */     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources(); // Resource object to get Drawables         
TabHost tabHost = getTabHost();  // The activity TabHost        
 TabHost.TabSpec spec;  // Resusable TabSpec for each tab         
Intent intent;  // Reusable Intent for each tab         
// Create an Intent to launch an Activity for the tab (to be reused)         
intent = new Intent().setClass(this, ArtistsActivity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost         
spec = tabHost.newTabSpec("artists").setIndicator("Artists",
                          res.getDrawable(R.drawable.ic_tab_artists))
                      .setContent(intent);
        tabHost.addTab(spec);

        // Do the same for the other tabs         
intent = new Intent().setClass(this, AlbumsActivity.class);
        spec = tabHost.newTabSpec("albums").setIndicator("Albums",
                          res.getDrawable(R.drawable.ic_tab_artists))
                      .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, SongsActivity.class);
        spec = tabHost.newTabSpec("songs").setIndicator("Songs",
                          res.getDrawable(R.drawable.ic_tab_artists))
                      .setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(2);
    }
}

设置每个标签的文字和图标,并分配每个标签一个活动(这里为了方便三个标签都有相同的图标)。TabHost的引用第一次通过getTabHost()获取。然后,为每个标签,创建TabHost.TabSpec定义标签的属性。newTabSpec(String)方法创建一个新的TabHost.TabSpec以给定的字符串标识标签。调用TabHost.TabSpec, setIndicator(CharSequence, Drawable)为每个标签设置文字和图标,调用setContent(Intent)指定Intent去打开合适的活动。每个TabHost.TabSpec通过调用addTab(TabHost.TabSpec)添加到TabHost。

最后,setCurrentTab(int)设置打开默认显示的标签,通过索引标签的位置。

5)、打开Android的清单文件AndroidManifest.xml,添加NoTitleBar主题到HelloWorld的<activity>标记。这将移除默认应用程序的标题和顶端布局,给标签腾出位置。<activity>标记应该像这样:

        <activity android:name=".HelloWorld"   android:label="@string/app_name"  android:theme="@android:style/Theme.NoTitleBar">

你运行这个程序能够得到什么结果呢?请自行检查。不过我在这里告诉你很有可能会运行不了,报“java.lang.NullPointerException”错!我想运行这个例子的很多人都会有这个问题,不信你试试!

PS:其实这也算是Android的一个bug,而且这个bug在2.2中还没有解决,这个问题全球N多人都碰到了,并在http://code.google.com/p/android/issues中挂号了,相关问题的编号有不止一个。

接着往下看……

如果你看了我这篇文章,你一定会是个幸运儿!经过我艰苦的调试+找资料,我找到了解决方法:

在清单文件AndroidManifest.xml,添加下面三个Activity:

<activity android:name=".AlbumsActivity" android:label="@string/app_name"></activity>
<activity android:name=".ArtistsActivity" android:label="@string/app_name"></activity>
<activity android:name=".SongsActivity" android:label="@string/app_name"></activity>

现在运行可以看到如下结果:

tablayout图9、标签布局

 

 

转至:http://www.cnblogs.com/skynet/archive/2010/06/06/1752616.html

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】总结之前的几节,写一个自定义的跑马灯

Continue Read..

之前学习了TextView,EditText,Button还有一个跑马灯的效果....以前都是写死的...今天就来弄一个自定义的跑马灯

为了样式好看...就想把EditText,和Button放同一排...结果总是不行..后来google才晓得有一个布局问题

详细去看http://wulin.aliapp.com/?post=104...这里就不在重复了

直接贴代码把

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <com.Text.Activity.MarqueeText
        android:id="@+id/TextViewId"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:autoLink="all"
        android:singleLine="true"
		android:focusable="true" 
		android:ellipsize="marquee" 
		android:marqueeRepeatLimit="marquee_forever" 
		android:focusableInTouchMode="true" 
        android:text="" 
        
        />

	<EditText
	    android:id="@+id/editText1"
	    android:layout_width="263dp"
	    android:layout_height="wrap_content"
	    android:layout_weight="1"
	    android:layout_x="-1dp"
	    android:layout_y="31dp"
	    android:hint="输入之后按提交"
	    android:background="@drawable/shape" />

	<Button
	    android:id="@+id/button1"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_weight="1"
	    android:layout_x="266dp"
	    android:layout_y="18dp"
	    android:text="提交" />


</AbsoluteLayout>

 

 

 

package com.Text.Activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class TestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //下面3个是分别获取控件
        TextView  TextViewId = (TextView)findViewById(R.id.TextViewId);
        EditText editText1 = (EditText)findViewById(R.id.editText1);
        Button button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new ButtonListenter(TextViewId,editText1));

    }
    
    class ButtonListenter implements OnClickListener{
		TextView TextViewId;
		EditText editText1;
		public ButtonListenter(TextView textViewId, EditText editText1) {
			// TODO Auto-generated constructor stub
			this.TextViewId=textViewId;
			this.editText1=editText1;
		}

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
                             //这局是获取当前文本框传来的值
			String editStr = editText1.getText().toString();
                             //将值赋给TextView控件
			TextViewId.setText(editStr);
		}
	};
}
 
 
 
com.Text.Activity.MarqueeText这句是后来加的
因为上一次写跑马灯是写死的...焦点一直都在TextViwe上面...系统默认的是当焦点在上面时.隐藏的文字才能滚动.
但我们这里焦点始终会给文本框...我开始也想的是将文本框的焦点去掉..查了半天都是默认加载时的方法..治标不治本...
后来就从TextViwe上考虑...给他赋焦点...网上也讲了个方法  需要重写TextViwe...然后就可以了..我把重写代码贴出来
package com.Text.Activity;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class MarqueeText extends TextView {

	public MarqueeText(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
	public MarqueeText(Context context, AttributeSet attrs) {
		 
		  super(context, attrs);
		 
		}
		 
		public MarqueeText(Context context, AttributeSet attrs, int defStyle) {
		 
		  super(context, attrs, defStyle);
		 
		}
		 
		@Override
		 
		public boolean isFocused() {
		 
		return true;
		 
		}
		 
		@Override
		 
		protected void onFocusChanged(boolean focused, int direction,
		 
		   Rect previouslyFocusedRect) {  
		 
		}
}
 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】Android开发(五)Button控件

Continue Read..

今天学习了下Button控件...也就是按钮,点击按钮输出一段话

有二种输出...一种是直接在eclipse的控制台输出...另一种在模拟器里输出一段不干扰操作的

先把代码贴出来在解释

首先还是在main.xml里面写button的控件...这里写2个...区分2种方法

<Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

 

 

然后在生成的java文件里面写

package com.button.Activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ButtonActivity extends Activity {
    /** Called when the activity is first created. */
	private Button btn1; 
	private Button btn2; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);
        btn1.setOnClickListener(listenter);
        btn2.setOnClickListener(listenter);
    }
    private OnClickListener listenter = new OnClickListener() {
    	@Override
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
    		Button btn = (Button)v;
    		switch (btn.getId()) {
    		case R.id.btn1: System.out.println("你点击了按钮1"); break;
    		case R.id.btn2: Toast.makeText(ButtonActivity.this, "你点击了按钮2", Toast.LENGTH_LONG).show(); break;
    		}
    	}
    };
}
 
mian.xml里面的前几节已经讲过了这里就不详细讲了...下面仔细说说java的代码
首先定义一个btn1和btn2的变量..定义为Button类型...学过java的童鞋应该晓得...java都要先声明在使用的(PHP就不用)
然后btn1 = (Button)findViewById(R.id.btn1);  这个是获取id为btn1的控件  
 因为我们定义的btn1是Button类型.这里也要把获取的强制转换一下
btn1.setOnClickListener(listenter); 这里是绑定事件   这个事件会有一个回调函数..当这个控件单击的时候调用
 
 
private OnClickListener listenter = new OnClickListener() {  //new一个单击事件...
     @Override
     public void onClick(View v) {    这个是单击的方法..有一个参数
      // TODO Auto-generated method stub
      Button btn = (Button)v;    将这个参数强制转换会Button类型
      switch (btn.getId()) {     获取控件id
       //这个是在控制台输出
      case R.id.btn1: System.out.println("你点击了按钮1"); break; 
       //这个是在模拟器里输出.执行Toast.makeText  他有3个参数..第一个当前的class,第二个要输出的内容..第三个是时间...最后要执行show方法不然不显示的
      case R.id.btn2: Toast.makeText(ButtonActivity.this, "你点击了按钮2", Toast.LENGTH_LONG).show(); break;
      }
     }
    };
 
 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】Android开发(四)Android开发工具之DDMS

Continue Read..
今天开始学习Android的数据库开发,这期间需要用到DDMS,就google了下,同时参考了   http://www.moandroid.com/?p=638   的文章,完整的整理如下。(关于DDMS的官方介绍可参考http://developer.android.com/guide/developing/tools/ddms.html 。不过由于伟大的GFW,这个网站天朝人民已经无法访问到,可以***访问。)

      DDMS 的全称是Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。DDMS为IDE和emultor及真正的android设备架起来了一座桥梁。开发人员可以通过DDMS看到目标机器上运行的进程/现成状态,可以android的屏幕到开发机上,可以看进程的heap信息,可以查看logcat信息,可以查看进程分配内存情况,可以像目标机发送短信以及打电话,可以像android开发发送地理位置信息。可以像GDB一样attach某一个进程调试。 SDKàtools目录下提供了ddms的完整版,直接双击ddms.bat运行即可。下面以Eclipse的DDMS perspective为例简单介绍DDMS的功能。

      跟debug,java的perspective一样,安装好adt后会有一个DDMS得perspective,打开即可。

clip_image001

      如果perspective里没有显示DDMS,刚按如下步骤执行:

  •       点击上图中DDMS图标左边的那个图标,然后在下图中如果有DDMS,刚选择,如果没有,刚选择“其他”,然后在出现的窗口中双击“DDMS”即可。

clip_image003clip_image005

      注意:DDMS对Emulator和外接测试机有同等效用。如果系统检测到它们(VM)同时运行,那么DDMS将会默认指向 Emulator。以上2种启动后的操作有些不一样,建议分别尝试下。

      DDMS 的工作原理

      DDMS将搭建起IDE与测试终端(Emulator 或者connected device)的链接,它们应用各自独立的端口监听调试器的信息,DDMS可以实时监测到测试终端的连接情况。当有新的测试终端连接后,DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。

clip_image006

      DDMS监听第一个终端App进程的端口为8600,APP进程将分配8601,如果有更多终端或者更多APP进程将按照这个顺序依次类推。DDMS通过8700端口(“base port”)接收所有终端的指令。

      打开后的窗口为:

clip_image008

      下边通过GUI详细了解DDMS的一些功能

      在GUI的左上角可以看到标签为”Devices”的面板,这里可以查看到所有与DDMS连 接的终端的详细信息,以及每个终端正在运行的APP进程,每个进程最右边相对应的是与调试器链接的端口。因为Android是基于Linux内核开发的操 作平台,同时也保留了Linux中特有的进程ID,它介于进程名和端口号之间。

      device窗口罗列模拟器中所有的进程,右上角那一排按钮分别为:调试某个进程,更新某个进程,更新进程堆栈信息,停止某个进程,最后一个图片按钮时抓取android目前的屏幕。

clip_image006[1]

      当你选中某个进程,并按下调试进程按钮时,如果eclipse中有这个进程的代码,那就可以进行源代码级别的调试。有点像GDB attach。图片抓取按钮可以把当前android的显示桌面抓到你的机器上,也是非常有用。

      右边那个窗口中有threads, heap , file explorer选项卡。分别显示线程统计信息,栈信息,以及android的文件系统。

clip_image009

      file explorer非常有用,他可以把文件上传到android手机,或者从手机下载下来,也可以进行删除操作。选中file explorer选项卡后,按下面三个按钮便可实现对android手机文件系统的上传,下载,删除操作。

clip_image010

      emulator control也是非常重要的,通过它可以像手机发送短信, 打电话,已经更新手机位置信息。

            Telephony Status: 通过选项模拟语音质量以及信号连接模式。
            Telephony Actions: 模拟电话接听和发送SMS到测试终端。
            Location Control: 模拟地理坐标或者模拟动态的路线坐标变化并显示预设的地理标识,可以通过以下3种方式:

                  · Manual: 手动为终端发送二维经纬坐标。

                  · GPX: 通过GPX文件导入序列动态变化地理坐标,从而模拟行进中GPS变化的数值。

                  · KML: 通过KML文件导入独特的地理标识,并以动态形式根据变化的地理坐标显示在测试终端。

clip_image011

clip_image013

      LogCat:显示输出的调试信息。

      Console(控制台):是Android模拟器输出的信息,加载程序等信息;

      总结:

            eclipse adt目前提供的的ddms功能只是真正ddms的一小部分,你 可以直接使用tools下面的ddms来使用所有功能。其中有一个查看进程内存分配的功能比较有用。

            另个要注意的是,在DDMS中模拟发送短信时,中文显示为乱码,在未来的开发中,我们必须要注意中文字符的问题。

 

 

转载于http://www.cnblogs.com/jerrychoi/archive/2009/09/26/1574422.html

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】Android开发(三)EditText控件

Continue Read..

EditText控件就是html上面的input

他一样可以设置文本输入的类型...限制字符(具体详见参考手册)..这里不一一列举

 

他和TextView一样..建议写在mian.xml里面

<EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

 

限制输入字数:   android:maxLength="3"

输入类型限制为数字:   android:inputType="number"

 

默认文本是多行的...如果想改成单行的

加入  android:singleLine="true"   默认为false

 

默认显示文字

加入   android:hint="XXXXX"   这样当文本框什么都不写时..显示的文字

 

介绍下怎么将这个文本框的角弄쳉圆角

首先在drawable-X的任何一个里面新建一个X.XML文件

然后写入

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
	android:shape="rectangle">
	<!-- 填充的颜色 -->
	<solid android:color="#FFFFFF" />
	<!-- 设置矩形的四个角为弧形 -->
	<!-- android:radius 弧形的半径 -->
	<corners android:radius="7dip" />

 

 

然后在main.xml里面加入

android:background="@drawable/刚才新建的XML...不要扩展名"

 

最后介绍在这个文本框里加图片(图片和圆角一起用的话会有点冲突)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="测试顶部图标"
        android:drawableTop="@drawable/boy"
        />
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="这个测试底部图标"
        android:drawableBottom="@drawable/boy"
        />
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="这个测试左部图标"
        android:drawableLeft="@drawable/boy"
        android:background="@drawable/shape"
        />
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="这个测试右部图标"
        android:drawableRight="@drawable/boy"
        />
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="这个测试设置圆角"
        android:singleLine="true"
        android:background="@drawable/shape"
        />

</LinearLayout>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】Android开发(一)一些基础的文件用处和变量含义

Continue Read..

一个android工程包含几个核心的文件

1.src

      这个文件里面是用来编写java程序的...首先会有一个架包,,比如我这叫com.cuzn.hello.activity 学过java的都知道...这里是一个叫com的文件价下面放入一个叫cuzn的文件夹....一直到activity文件夹  这里文件夹下面放一个java文件

2.gen

   这个文件夹里面有一个R.java文件...这个文件里面的代码都是自动生成的...不要手动修改

3.android核心包

4.assets

5.bin

6.res

   这个文件下面前3个目录是来放图片的..一个大图一个小图一个标准图

   layput文件下面放一个mian.xml

   这个文件代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"      android:layout_height="fill_parent"    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"宽
        android:layout_height="wrap_content"高
        android:text="@string/hello" />这里会指向values文件下面叫hello的变量

</LinearLayout>
7.values<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="hello">我是cuzn</string>这个是刚才说的
    <string name="app_name">cuzn</string>这个是安卓程序的名字

</resources> 8.AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cuzn.hello.activity"  这个是执行的文件夹位置
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" /> //这里是建这个工程的时候选择的最低版本

    <application
        android:icon="@drawable/aa"//这个是安装到手机里面的那个图标
        android:label="@string/app_name" >
        <activity
            android:name=".HelloWordActivity" //这个是执行的文件
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
这个要过滤器...执行main函数   也就是src文件夹下面的
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】Android开发(二)TestView控件(下)

Continue Read..

接着我们来介绍怎么加超链接...Android的超链接很智能

还是在main.xml里写入

android:autoLink="web"  //选择web

android:text="我的博客  http://www.wulin.aliapp.com"   

这里输入里面包含了连接..他就会自动在这段连接上加

当然也可以写

android:autoLink="phone"
android:text="我的博客  http://www.wulin.aliapp.com  \n 我的电话是:13511111111"

 

\n是换行

这样就把电话写了超链接.,如果点击的话能自动打这个号码

如果写all的话..就是所有属性都加

android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)
 
下面讲写跑马灯...就是一般公交车上的文字滚动的广告
 
 

 

android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置start”—-省略号显示在开头;end ——省略号显示在结尾;middle”—-省略号显示在中间;marquee ——以跑马灯的方式显示(动画横向移动)
android:marqueeRepeatLimitellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。
android:focusableInTouchMode:是否在触摸模式下获得焦点。
android:focusable控件是否能够获取焦点
 
<TextView 
        android:id="@+id/tv"   
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textColor="#00ff00"
        android:autoLink="all"
        android:singleLine="true"
        android:focusable="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusableInTouchMode="true"
        android:text="我的博客  http://www.wulin.aliapp.com 我的电话是:13511111111"
        />

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】Android开发(二)TestView控件(上)

Continue Read..

1.首先讲讲怎么输出一句话

    有二种方法:

      (1)直接在你生成的XX.java文件里面写

package com.cuzn.holle.activity;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloWordActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = new TextView(this);   new一个TextView对象..这个对象就是

当前这个class
        tv.setText("你好");   定义要输出的文字
        setContentView(tv);//将这个控件加载到Activity上面
    }
}

  (2)推荐使用方法 
   在main.xml文件里面添加一个TextView

<TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/test"
        />

 在strings.xml里面写<string name="test">测试</string> 推荐使用这个方

法来定义一个TextView  设置字体大小..也是在main.xml里面写...在刚才定义的

TextView里面写入

 <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"   设置大小
        android:text="@string/test"
        />  

设置高度和宽度的时候推荐使用dp
     这里解释下单位.. 附件是对TextView一些属性的详解


看到有很多人不太理解dp、sp和px的区别:现在这里介绍一下dp和sp。dp也就是dip。这

个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体

,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度

为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不

变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在

密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成

160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160

。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密

度的变化自动进行转换。
    下面看一下其他单位的含义
px:表示屏幕实际的象素。例如,320*480的屏幕在横向有320个象素,在纵向有480个象

素。
in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如,形容手机屏幕大小,经

常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角

线长度。如果手机的屏幕是3.2英寸,表示手机的屏幕(可视区域)对角线长度是

3.2*2.54 = 8.128厘米。读者可以去量一量自己的手机屏幕,看和实际的尺寸是否一致。
mm:表示毫米,是屏幕的物理尺寸。
pt:表示一个点,是屏幕的物理尺寸。大小为1英寸的1/72。

 

下面来讲讲怎么设置这些字的颜色

还是在main.xml文件里..刚才定义的TextView里面写

<TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textColor="#00ff00"
        android:text="@string/test"
        />

 

这样就设置了整个字体的颜色   附件2就是改变颜色的

 

接下来你们可能会说..如果只想改变某几个字的颜色怎么办...这个也可以实现的...有2种方法

第一种:在XX.java文件里写

 findViewById(R.id.tv);  //这里的参数是id   需要在main.xml里面来设置
 
android:id="@+id/tv"  

 

这里解释下这个R.id.tv   首先要在main.xml里面定义一个@+id/tv  这样..就会在R.java文件里面自动加载一个id  名字为tv的值

然后因为这个findViewById方法属于TextView的..这样就要强制转换

TextView  tv = (TextView)findViewById(R.id.tv);

tv.setText(Html.fromHtml("今天是个<font color=blue>阴天</font>"));

这里需要注意:如果这里设置了输出值...那么在mian.xml里面就不要写

 android:text="@string/test"

写了会 报错的!

 

 

下面介绍第二种方法

 

还是在XX.java里面写

TextView tv=(TextView)findViewById(R.id.tv);
String str="欢迎大家收看《cuzn安卓开发》系列课程。感谢大家的支持。";
SpannableStringBuilder style=new SpannableStringBuilder(str);
style.setSpan(new ForegroundColorSpan(Color.RED), 0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
style.setSpan(new ForegroundColorSpan(Color.GREEN), 6, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
style.setSpan(new ForegroundColorSpan(Color.BLUE), 16, 29, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(style);

 

这里是分段变化颜色..一个字符占一位

个人觉得第一种方法比较好用

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权