Android 实用网址:http://adt.android-studio.org/index.php

ADT配置

百度云:http://pan.baidu.com/s/1qWFJoF6

在 eclipse 中在线安装地址:http://dl-ssl.google.com/android/eclipse/

通过本地安装,压缩包下载地址:http://developer.android.com/sdk/installing/installing-adt.html

一、Android项目结构分

src:存放java源代码
gen:存放系统自动生成的配置文件(不修改)
Android 4.4.2:该文件夹下包含android.jar文件,这是一个Java归档文件,其中包含构建应用程序所需的所有的Android SDK库(如Views、Controls)和APIs
assets:存放资源文件,不会自动生成id,且不会自动占用空间
bin:存放应用被编译后生成的可执行文件(.apk),以及应用用到被打包到apk中的资源文件
res:存放应用用到的所有资源,如图片、布局等
    drawable:存放不同分辨率的图片资源
    layout:存放布局文件
    values:存放字符串,主题,颜色,样式等资源文件
    AndroidManifest.xml:清单文件,配置一些与应用有关的重要信息,包含包名,权限,程序组件等

二、文本框控件

TextView显示文本框控件

属性:

android:id----控件的id
android:layout_width----控件的宽度
android:layout_height----控件的高度
android:layout_width="wrap_content"    wrap_content:包裹实际文本内容大小
android:layout_width="match_parent"    match_parent:当前控件铺满父类容器(2.3api之后添加的属性值)
android:layout_width="fill_parent"    fill_parent:当前控件铺满父类容器(2.3api之前的属性值)
android:text----文本内容
android:textSize----文本大小
android:textSize="28sp"
android:textColor----文本颜色
android:textColor="#000000"    RGB颜色值
android:backgroud----控件背景

EditText输入文本框控件

属性:TextView基础上添加

android:hint----输入提示文本
android:inputType----输入文本类型
android:inputType="textPassword"    输入格式为密码格
android:inputType="phone"    输入格式为拨号键盘

将 xml 布局文件引入到 activity.java 中

setContentView(R.layout.main_activity);

练习:

1、在 Activity 中需要获取一个 id 是 bookName 的 TextView 控件对象

(TextView)this.findViewById(R.id.bookName)

2、在 Activity 中给一个 TextView 设置字体颜色(tv 为 TextView 对象)

tv.setTextColor(Color.RED)

三、ImageView图片显示控件

属性:

android:src----图像内容        src会自适应
android:src="@drawable/ic_launcher"    调用res/drawable文件夹下相应分辨率的图片
android:background----控件背景        background会填充整个控件
android:background="@drawable/ic_launcher"    不仅可以是图片
android:background="#00ff00"    还可以是RGB颜色

注:为了适配更多的分辨率,将所有图片分别在_hdpi,_mdpi,_ldpi文件夹中各存放一份

四、按钮控件

Button 普通按钮控件

<Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Button"/>        一般将字符串存放在res/value文件夹下,后期调用

ImageButton图片按钮控件

<ImageButtom
    abdroid:id="@+id/imageButton1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawableabc_ab_share_pack_holo_light" />    可以不设置,和button一样的显示效果。也可以在图片上带有文字

共同点:

都可以作为一个按钮产生点击事件

产生明显的点击效果

不同点:

Button 有 text 属性,ImageButton 没有

ImageButton 有 src 属性,Button 没有

五、按钮的监听事件

通过匿名内部类实现

private Button loginButton;      // 1、初始化按钮控件
loginButton = (Button) findViewById(R.id.button1);      // 2、赋值  findViewById返回的是View对象,需要转换
loginButton.setOnClickListener(new OnClickListener(){      // 3、设置监听器,通过监听器实现点击事件
    @Override
    public void onClick(View arg0){        // 在当前onClick方法中监听点击按钮的动作
        System.out.println("按钮被点击了");
    }
});

通过外部类监听事件

private Button bt1;
bt1=(Button) findViewById(R.id.button1);

class MyOnClickListener implements OnClickListener{    // 创建自己的外部类
                                    // OnClickListener 是接口
    @Override
    public void onClick(View v){
    Log.i("tag","父类的onClick事件");
        v.setAlpha(0.5f);      // 设置透明度,0-1,0表示完全透明,1表示不透明
    }
}

bt1.setOnClickListener(new MyOnClickListener(){
    @Override
    public void onClick(View v){
        super.onClick(v);    调用父类的onClick方法
        Toast.makeText(MainActivity.this,"bt1要执行的逻辑",1).show();
    }
});

六、AutoCompleteTextView控件

1、功能:

动态匹配输入的内容,如百度搜索引擎当输入文本时,可以根据内容显示匹配的热门信息

2、属性:

android:completionThreshold="2" ---->设置输入多少字符时自动匹配

3、小案例:

activity_main.xml 文件中:

<AutoCompleteTextView
    android:id="@+id/autoCompleteTextView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:completionThreshold="2"        设置输入多少字符时自动匹配
    android:hint="@string/hello_world" >
    <requestFocus />
</AutoCompleteTextView>

MainActivity.java 文件中

public class MainActivity extends Activity{
//初始化AutoCompleteTextView控件
private AutoCompleteTextView autoText=null;
//初始化数据源---匹配文本框输入的内容
private String[] res={"beijing1","beijing2","beijing3","shanghai1","shanghai2"};
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化AutoCompleteTextView控件
        autoText=findViewById(R.id.autoCompleteTextView1);
        //设置适配器
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,res);
        //将适配器与当前AutoComopleteTextView绑定
        autoText.setAdapter(adapter);
    }
}

七、MultiAutoCompleteTextView控件

1、功能:

可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配,

可用在发短信,发邮件时选择联系人这种类型当中

2、属性:

android:completionThreshold="2" ----设置输入多少字符时自动匹配

3、设置分隔符

    mtxt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());    此分隔符为,

4、小案例

与 AutoCompleteTextView 案例一样,只需在 MainActivity.java 文件中多为MultiAutoCompleteTextView 设置分隔符

八、ToggleButton控件

1、功能:

ToggleButton 有两种状态:选中和未选中状态

并且需要为不同的状态设置不同的显示文本

2、属性:

android:checked="true"
android:textOn="开"
android:textOff="关"

九、Acticity的创建和使用

Android四大组件

Activity、Service、BroadcastReceiver、Content Provider

1、在src文件夹下创建一个继承Android中Activity类的类

2、重写Activity中onCreate(Bundle savedInstanceState)方法

3、设置显示的布局
    setContentView(R.layout.layout文件夹中布局文件名);

4、在AndroidManifest.xml文件中,注册activity
    有<intent-filter>标签的为程序运行时显示的主页

十、Activity的生命周期

onCreate();创建
onStart();运行
onResume();获取焦点
onPause();失去焦点
onStop();暂停
onDestroy();销毁
onRestart();

1、从创建到销毁的生命周期

onCreate()-->onStart()-->onResume()-->onPause()-->onStop()-->onDestroy()

2、从启动到后台,再到前台的生命周期

onCreate()-->onStart()-->onResume()-->onPause()-->onStop()-->onRestart()-->onStart()-->onResume()

3、从启动到失去焦点,再到获取焦点的生命周期

onCreate()-->onStart()-->onResume()-->onPause()-->onResume()

十一、ViewPager

ViewPager可以使视左右滑动

android.support.v4.view.ViewPager

1、加载显示的页面

将Layout布局转换为View对象

    (1) LayoutInflater li = getLayoutInflater().from(context);
        li.inflate(resource,root);

    (2) View.inflate(context,resource,root);

2、配置Adapter

    (1) PagerAdapter 数据源:List<View>
    (2) FragmentPagerAdapter 数据源:List<Fragment>
    (3) FragmentStatePagerAdapter 数据源:List<Fragment>

案例:参考 学习案例/AndroidViewPager

十二、OptionsMenu 选项菜单

1、创建选项菜单

重写onCreateOptionsMenu()

-设置菜单项可用代码动态设置 menu.add()

-还可以通过xml设置 MenuInflater.inflate()

2、设置菜单项点击事件

重写onOptionsItemSelected()

案例:

1、新建一个类 MainActivity 继承 Activity

2、重写其中 onCreateOptionsMenu() 方法

@Override
public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.main,menu);
    return true;
}

3、res/menu 文件夹下新建 xml 文件

<menu xmlns:android="">
    <item 
        android:id="@+id/action_menu_item1"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="菜单一" />
    <item 
        android:id="@+id/action_menu_item2"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="菜单二" />
</menu>

4、监听菜单列表点击事件,重写onOptionsItemSelected()

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch(item.getItemId()){
        case R.id.action_menu_item1:
            Toast.makeText(MainActivity.this,"点击了菜单一",Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_menu_item2:
            Toast.makeText(MainActivity.this,"点击了菜单二",Toast.LENGTH_SHORT).show();
            Intent itent = new Intent(MainActivity.this,SecondActivity.class);
            item.setIntent(intent);
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

十三、Dialog对话框

1、要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法

    setTitle:为对话框设置标题
    setIcon:为对话框设置图标
    setMessage:为对话框设置内容
    setView:给对话框设置自定义样式
    setItems:设置对话框要显示的一个list,一般用于显示几个命令时
    setMultiChoiceItems:用来设置对话框显示一系列的复选框
    setSingleChoiceItems:设置单选按钮
    setNeutralButton:普通按钮
    setPositiveButton:给对话框添加“确认”按钮
    setNegativeButton:给对话框添加“取消”按钮

十四、Broadcast广播

1、普通广播

Intent intent = new Intent();
intent.putExtra("msg","这是一条普通广播");
intent.setAction("com.zhidi.broadcast");
sendBroadcast(intent);

十五、Android 四大组件之 Service

定义:

后台运行,不可见,没有界面

优先级高于Activity

用途:

播放音乐、记录地理信息位置的改变、监听某种动作。。。

注意:

运行在主线程,不能用它做耗时的请求或者动作

可以在服务中开一个线程,在线程中做耗时动作

类型:

1、本地服务(Local Service)

应用程序内部

startService
stopService
stopSelf
stopSelfResult
bindService
unbindService

两种方式:

1) Start方式:

服务跟启动源没有任何联系

无法得到服务对象

2) Bind方式:

通过IBinder接口实例,返回ServiceConnection对象给启动源

通过ServiceConnection对象的相关方法可以得到Service对象

学习案例:

2、远程服务(Remote Service)

Android系统内部的应用程序之间

定义IBinder接口

十六、多媒体

1、相机

步骤:

1、在布局文件中添加SurfaceView控件
2、定义变量
    SurfaceView sfv;
    Camera camera;
    SurfaceHolder holder;
    Button bt;
3、实例化变量
    sfv = (SurfaceView)findViewById(R.id.sfv);
    holder = sfv.getHolder();
    bt = (Button)findViewById(R.id.bt);
4、编写异步保存类SavePiture继承Asynctask<parameter,progress,result>
    public String doInBackground(byte[]...pars){
        //保存图片
    }
5、为holder添加回调
    holder.addCallback(new SurfaceHolder.callback()){
        //当预览界面被创建时调用
        surfacecreate(){
            //打开摄像头
            camera = Camera.open();
            //设置预览角度
            camera.setDisplayOritation(90);//角度是90的整数倍
            //设置预览显示器
            camera.setPlayViewDisPlay(holder);
            //开始预览
            camera.startPreView();
        }
        surfacechanged(){
          //获取相机参数
          //设置相机参数
          //开始预览
         }
         surfaceDestroy()   
         {
            //释放相机资源
            camera.release();
            camera = null ;
          }
    });
6、设置按钮的监听事件,在监听事件中进行拍照
    /**
        第一个参数:是按下快门时的操作
        第二个参数:是摄像头获得原始数据时的操作
        第三个参数:是摄像头将原始数据编译处理后的操作
    */
    camera.tackPicture(null,null,new PicturCallback(){
        onPictureTacken(byte[] data, Camera c)
        {
            //保存图片
            new SavePicture().excute(data);
            //开始预览
            camera.startPreView(); 
        }
    });
7、添加权限
    <!-- 调用摄像头功能 -->
    <uses-feature android:name="android.hardware.camera" />
    <!-- 调用自动对焦功能 -->
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <!-- 设置允许拍照的权限-->
    <uses-permission android:name="android.permission.CAMERA" />
    <!-- SD卡创建与删除文件权限-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 配置SD卡权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

十七、反编译

1、反编译 apk 得到 java 源代码

首先要下载两个工具:dex2jar和jd-gui

前者是将 apk 中的 classes.dex 转换成 jar 文件,而 jd-gui 是一个反编译工具,可以查看jar包的源代码。

下载地址:

dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

jd-gui:http://laichao.googlecode.com/files/jdgui.zip

具体步骤:

首先将apk文件的后缀名改为zip,再解压,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar工具,将classes.dex文件复制到d2j-dex2jar.bat所在的目录中;

在命令行定位到dex2jar.bat所在目录:cd C:\Documents and Settings\Administrator\桌面\反编译工具\dex2jar-2.0

运行d2j-dex2jar.bat生成classes-dex2jar.jar文件:d2j-dex2jar ./classes.dex

解压下载的jd-gui工具运行jd-gui.exe,打开前面生成的jar文件,即可看到源码了

十八、应用加密混淆

1、打开project.properties文件,解开proguard.config的注释,定义sdk.dir=和proguard.config=

sdk.dir为sdk的安装路径:sdk.dir=D:/Android/SDK/android-sdk

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

2、保留所有具有公有访问权限的类的其公共成员

-keepclasseswithmembers class *{
    public *;
}

3、删除Log代码

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** i(...);
    public static *** w(...);
    public static *** d(...);
    public static *** e(...);
}

results matching ""

    No results matching ""