您的位置:首页 > 移动开发 > Android开发

Android基础学习__第1天__美好的开始

2013-10-20 12:57 525 查看

1.安卓体系结构



2.模拟器的创建方法

点击手机形状的图形(android virtual device manager) 创建一个新的android模拟器

Android模拟器无法启动:

错误提示为:

invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.Hint: use '@foo' to launch a virtual device named 'foo'.please use -help for more information

解决方法:

1. 你的安装路径中有中文,那么就重新安装SDK,放在全英文路径下

2. 添加Android_SDK_HOME 环境变量,从变量名上看最好把ANDROID_SDK_HOME指向Android SDK目录,然后启动AVD

Android模拟器无法保存数据:

原因:电脑意外重启,或者模拟器非法关闭.

正常情况下,当模拟器被开启后,在x:\Documents and Settings\Administrator\.android\avd\xxx.avd的目录下会产生cache.img.lock, hardware-qemu.ini.lock, sdcard.img.lock, userdata-qemu.img.lock这样的文件夹,用来标记当前模拟器设备已经开启,当模拟器设备关闭的时候 会自动删除这些文件夹.

如果电脑意外重启或者模拟器被非法关闭. 这几个文件夹是不会被自动删除的. 系统任务android模拟器还处于打开状态. 新开启的模拟器就无法保存数据了.

解决方法:删除这些.lock的文件夹

3.Android SDK目录结构

src/ java原代码存放目录

gen/ 自动生成目录


gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的资源,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。

res/ 资源(Resource)目录

在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。

libs/ 支持库目录

程序开发时需要的一些三方的jar包可以放在这个目录,系统会自动把里面的jar包,添加到环境变量。

assets资源目录

Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径,如:file:///android_asset/xxx.3gp

AndroidManifest.xml 项目清单文件

这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等等),你还需在该文件中声明使用权限。

project.properties 项目环境信息,一般是不需要修改此文件

4.常用adb命令

adb devices 列出所有的设备

adb shell 挂载到linux的空间

adb install xxx.apk 如果有多个设备,我们可以指定设备 adb install –s emulator-5554 D:/xxx.apk

emulator –avd advname 启动模拟器 例如:emulator –avd 2.2 (2.2 为我们创建设备的名称)

mkmdcard 20m d:/sdcard.img 创建sdcard

adb pull <remote> <local>

adb push <local> <remote>

android create avd –name android2.2 –target 8 创建模拟器

ctrl + F11 横竖屏的切换

5.点击事件的4种写法

a.写一个类继承OnClickListener覆写onClick方法。

b.运用匿名内部类的方法直接创建OnClickListener的子类对象覆写onClick方法。

c.直接使用当前类继承OnClickListener接口,覆写onClick方法。如:

public void onClick(View V)
{
switch(V.getId())
{
case:R.id.bt_dail
callPhone();
break;
defult:
break;
}
}


d.在布局文件里面绑定一个 点击方法.来调用MainActivity中的方法/.(通过反射的方式.如果方法存在的话就会执行,如果不存在的话就会产生异常)

6.拨打电话与发送短信关键代码

拨打电话

注意在清单文件AndroidManifest.xml添加拨打电话服务权限

//定义意图
Intent intent = new Intent();
//指定打电话事件
intent.setAction(Intent.ACTION_CALL);
//Uri统一资源定位符
intent.setData(Uri.parse("tel:"+number));
//跳转至打电话页面
startActivity(intent);

发送短信

注意在清单文件AndroidManifest.xml添加发送短信服务权限

//导包

public class MainActivity extends Activity {
private EditText et_number;
private EditText et_content;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查询到 我们关心的两个控件
et_number = (EditText) findViewById(R.id.et_number);
et_content = (EditText) findViewById(R.id.et_content);

}

public void sendSms(View view){
String number = et_number.getText().toString().trim();
String content = et_content.getText().toString().trim();
if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){
Toast.makeText(this, "号码或者内容不能为空", 0).show();
}else{
SmsManager smsManager = SmsManager.getDefault();
//将信息长度以每条信息最大长度进行分割成数组
ArrayList<String> messages = smsManager.divideMessage(content);
//循环发送
for(String message : messages){
smsManager.sendTextMessage(number, null, message, null, null);
}
Toast.makeText(this, "发送成功", Toast.LENGTH_LONG).show();
}
}
}


7.常见布局

相对布局(RelativeLayout)

一个控件的位置它决定于它和其他控件的关系,好处:比较灵活;缺点:掌握比较复杂。

// 相对于给定ID控件
android:layout_above 将该控件的底部置于给定ID的控件之上;
android:layout_below 将该b控件的顶部置于a控件之下;
android:layout_toLeftOf    将该控件的右边缘与给定ID的控件左边缘对齐;
android:layout_toRightOf  将该b控件的左边缘与a的控件右边缘对齐;
android:layout_alignBaseline  将该控件的baseline与给定ID的baseline对齐;
android:layout_alignTop        将该控件的顶部边缘与给定ID的顶部边缘对齐;
android:layout_alignBottom   将该控件的底部边缘与给定ID的底部边缘对齐;
android:layout_alignLeft        将该控件的左边缘与给定ID的左边缘对齐;
android:layout_alignRight      将该控件的右边缘与给定ID的右边缘对齐;

// 相对于父组件

android:layout_alignParentTop      如果为true,将该控件的顶部与其父控件的顶部对齐;
android:layout_alignParentBottom 如果为true,将该控件的底部与其父控件的底部对齐;
android:layout_alignParentLeft      如果为true,将该控件的左部与其父控件的左部对齐;
android:layout_alignParentRight    如果为true,将该控件的右部与其父控件的右部对齐;

// 居中

android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;
android:layout_centerVertical     如果为true,将该控件的置于垂直居中;
android:layout_centerInParent   如果为true,将该控件的置于父控件的中央;

线性布局(LinearLayout)

它将控件组织在一个垂直或水平的形式。当布局方向设置为垂直时,它里面的所有子控件被组织在同一列中;当布局方向设置为水平时,所有子控件被组织在一行中。



<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="vertical"
>

<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Up" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Left" />

<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Right" />

</LinearLayout>

</LinearLayout>

表格布局(TableLayout)

TableLayout由所表格布局采用行列的形式来管理UI组件,TableLayout不需要明确声明包含多少行和列,而是通过添加TableRow,其他组件来控制表格的行列的。

向表格中添加TableRow和其他组件,该表格就增加一行,该组件占有一行。

表格的单元格常用三种属性:

Shrinkable:某列宽度可以被收缩,以保证适应父容器的宽度

Stretchable:某列宽度可以被拉伸,适应父容器的空间

Collapsed:该列的所有单元格会隐藏



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

<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名:" />

<EditText
android:layout_width="200dip"
android:layout_height="wrap_content" />
</TableRow>

<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年龄:" />

<EditText
android:layout_width="200dp"
android:layout_height="wrap_content" />
</TableRow>

<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="籍贯:" />

<EditText
android:layout_width="200dp"
android:layout_height="wrap_content" />
</TableRow>

</TableLayout>

绝对布局(AbsoluteLayout)

绝对布局是以坐标的方式来定位控件在屏幕上位置。我们通常不推荐使用AbsoluteLayout,除非有正当理由使用它,因为它会使界面代码太过刚性,以至于在不同的设备上可能不能很好地工作。

定义控件位置关键代码:

android:layout_x="219dp"

android:layout_y="385dp"

帧布局(FrameLayout)

帧里的控件叠加,播放器的暂停界面可以用此布局实现

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

<TextView
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="文本01" />

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="文本02" />

</FrameLayout>


8.Android布局单位

dp: 物理尺寸和屏幕像素的比例值

dip:和dp一样

px: 屏幕的像素点,受屏幕分辨率影响

sp:主要用在文字上

dp和px 的区别:

px是像素.无论屏幕多大.就是多大.

dp是比值.是根据屏幕的大小来变化

sp是文字的缩放.这样缩放的时候文字不会出现锯齿。开发中一般都用dp这样就可以再不同像素的手机来显示了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: