本节导言:

前面讲了一堆看似和咱们Android开发无关的东西是吧,当然是现在看似罢了,今后你回头看就知道了! 好吧,本节咱们就来曾经面创立的Hello World项目为进口,来了解工程结构, 以及Android中的资源拜访的两种办法!后续教程运用的IDE是Android Studio,由于在前几天谷歌正式宣告,在年末前停止对其他IDE开发环境的支撑!


1.工程项目结构解析:

咱们开发大部分时刻都花在下面这个部分上:

接下来咱们对要害部分进行解说:

  • java:咱们写Java代码的当地,事务功用都在这儿完结
  • res:寄存咱们各种资源文件的当地,有图片,字符串,动画,音频等,还有各种办法的XML文件

1.res资源文件夹介绍:

PS:提到这个res目录,别的还有提下这个assets目录,尽管这儿没有,可是咱们能够自己创立,两者的差异在于是否前者下一切的资源文件都会在R.java文件下生成对应的资源id,而后者并不会;前者咱们能够直接经过资源id拜访到对应的资源;而后者则需求咱们经过AssetManager以二进制流的办法来读取!对了,这个R文件能够理解为字典,res下每个资源都都会在这儿生成一个仅有的id!

接着说下res这个资源目录下的相关目录:

PS:下述mipmap的目录,在Eclipse并不存在这个,Eclipse中都是drawable最初的,其实差异不大,仅仅运用mipmap会在图片缩放在供给必定的功能优化,分辨率不同体系会依据屏幕分辨率来挑选hdpi,mdpi,xmdpi,xxhdpi下的对应图片,所以你解压他人的apk能够看到上述目录同一称号的图片,在四个文件夹下都有,仅仅巨细和像素不一样罢了!当然,这也不是肯定的,比方咱们把一切的图片都丢在了drawable-hdpi下的话,即便手机 本该加载ldpi文件夹下的图片资源,可是ldpi下没有,那么加载的还会是hdpi下的图片! 别的,还有一种状况:比方是hdpi,mdpi目录下有,ldpi下没有,那么会加载mdpi中的资源! 原则是运用最接近的密度等级!别的假如你想制止Android不跟从屏幕密度加载不同文件夹的资源,只需在AndroidManifest.xml文件中增加android:anyDensity="false"字段即可!

1.先说下图片资源:

  • drawable:寄存各种位图文件,(.png,.jpg,.9png,.gif等)除此之外或许是一些其他的drawable类型的XML文件
  • mipmap-hdpi:高分辨率,一般咱们把图片丢这儿
  • mipmap-mdpi:中等分辨率,很少,除非兼容的的手机很旧
  • mipmap-xhdpi:超高分辨率,手机屏幕原料越来越好,今后估计会渐渐往这儿过渡
  • mipmap-xxhdpi:超超高分辨率,这个在高端机上有所表现

2.接着说下布局资源:

  • layout:该目录下寄存的便是咱们的布局文件,别的在一些特定的机型上,咱们做屏幕适配,比方480*320这样的手机,咱们会别的创立一套布局,就行:layout-480x320这样的文件夹!

3.接下来说下菜单资源:

  • menu:在曾经有物理菜单按钮,即menu键的手机上,用的较多,现在用的并不多,菜单项相关的资源xml可在这儿编写,不知道谷歌会不会出新的东西来代替菜单了~

4.接下来说下values目录:

  • demens.xml:界说尺度资源
  • string.xml:界说字符串资源
  • styles.xml:界说款式资源
  • colors.xml:界说色彩援助
  • arrays.xml:界说数组资源
  • attrs.xml:自界说控件时用的较多,自界说控件的特点!
  • theme主题文件,和styles很类似,可是会对整个运用中的Actvitiy或指定Activity起效果,一般是改动窗口外观的!可在Java代码中经过setTheme运用,或许在Androidmanifest.xml中为<application...>增加theme的特点! PS:你或许看到过这样的values目录:values-w820dp,values-v11等,前者w代表平板设备,820dp代表屏幕宽度;而v11这样代表在API(11),即android 3.0后才会用到的!

5.在接着说下这个raw目录: 用于寄存各种原生资源(音频,视频,一些XML文件等),咱们能够经过openRawResource(int id)来取得资源的二进制流!其实和Assets差不多,不过这儿面的资源会在R文件那里生成一个资源id罢了

6.终究还有个动画的,动画有两种:特点动画和补间动画:

  • animator:寄存特点动画的XML文件
  • anim:寄存补间动画的XML文件

2.怎样去运用这些资源

嗯,知道有什么资源,接下来就来了解该怎样用了: 前面也说了,咱们一切的资源文件都会在R.java文件下生成一个资源id,咱们能够经过这个资源id来完结资源的拜访,运用状况有两种:Java代码中运用和XML代码中运用: Java代码中运用:

Java 文字:txtName.setText(getResources().getText(R.string.name)); 
图片:imgIcon.setBackgroundDrawableResource(R.drawable.icon); 
色彩:txtName.setTextColor(getResouces().getColor(R.color.red)); 
布局:setContentView(R.layout.main);
控件:txtName = (TextView)findViewById(R.id.txt_name);

XML代码中运用:

经过@xxx即可得到,比方这儿获取文本和图片:

<TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background = "@drawable/img_back"/>

2.深化了解三个文件:

好了,接下来咱们就要剖析工程里三个比较重要的文件: MainActivity.java,布局文件:activity_main和Android配置文件:AndroidManifest.xml PS:图片内容或许有点距离,没时刻做图,望谅解~

MainActivity.java:

代码如下

package jay.com.example.firstapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

代码剖析:

布局文件:activity_main.xml:

代码如下:

<RelativeLayout 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"
    tools:context=".MainActivity">

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

</RelativeLayout>

代码剖析:

咱们界说了一个LinearLayout线性布局,在xml命名空间中界说咱们所需求运用的架构,来自于①

AndroidManifest.xml配置文件:

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jay.com.example.firstapp" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

代码剖析:

除了上述内容外:

①假如app包括其他组件的话,都要运用类型阐明语法在该文件中进行声明 Server:元素 BroadcastReceiver元素 ContentProvider元素 IntentFilter<intent-filter>元素

②权限的声明: 在该文件中显式地声明程序需求的权限,避免app过错地运用服务, 不恰当地拜访 资源,终究进步android app的健壮性 android.permission.SEND_SMS 有这句话表明app需求运用发送信息的权限,装置的时分就会提示用户, 相关权限能够在sdk参考手册查找!


本节小结:

本节咱们对咱们的Hello World项目进行了具体的了解,相关目录是做什么的,res下的资源文件有哪些,有什么效果,怎样运用这些资源!一起来经过画图的办法具体地解说了工程中三个最重要的文件!到这儿相信你对Android项目已经有个大体的了解了!谢谢~