zoukankan      html  css  js  c++  java
  • android 工程结构,它到底是怎么运行的。

    为了帮助理解,我决定先上传一个工程截图,这个是我做的一个小作业,3、4个小时完成,没什么含金量,就是交差用的,这里给大家做个模板吧。

    我把一个工程分6个部分,如左面的图所示,然后来一一说好了。

    1. 这里就是存放我们写的类的,由于我这个简单,就没有分很多包了,一个包搞定一切。

    2. 这个是编译生成的,里面有个R.java文件,千万不要乱动它,会导致很可怕的错误,另外,如果明明写的很对,但是就是编译通不过的话,一定是这个东西除了问题,可以上网搜搜解决办法,不知道能不能删了这个文件重新编译。

    3. 这个三个文件夹是用来放图片的,比如自己做的按钮啊什么的,分高(hdpi)中(mdpi)低(ldpi)三种像素图片文件夹,在不同屏幕下调用不同像素的图片。

    4. 看名字就知道,这是些UI的地方,这里写好了以后,在java文件里调用。

    5. 这个是存放一些字符串的,比如有些字符串常用到啊,多处被引用的话,就给它取个名字放到这里,然后就可以实现字符串共享了。

    6. 就是上一篇介绍过的,声明activity和权限的地方。

    所以,综上所述,一个android程序被运行的时候,程序先在manifest文件里找到入口类,然后进入入口类的onCreate()函数开始执行,其中UI在layout文件夹中调用,图片在res文件夹中调用。

    接下来我们进入代码,用代码稍微分析一下,就清楚了:

    首先,我们看到在manifest文件里申明了入口类是SecretDiaryActivity.java:

    <activity android:name=".SecretDiaryActivity"
    android:label
    ="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>

    接着我们进入到SecretDiaryActivity.java文件,找到onCreate()函数:

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.diary_list);
    mDbHelper = new DiaryDbAdapter(this);
    ll=(LinearLayout)findViewById(R.id.bg); //part one
    mDbHelper.open();
    // code=(EditText)
    //取回所有库中的日记显示
    // if(currentbg)

    if(mDbHelper.isCode()){
    Intent i = new Intent(this, EnterPage.class);
    startActivityForResult(i, ACTIVITY_ENTER);
    }
    int bg=mDbHelper.getbg();
    Resources resources = getBaseContext().getResources();
    Drawable btnDrawable=resources.getDrawable(R.drawable.bg);
    switch(bg){
    case 0:
    break;
    case 1:
    btnDrawable=resources.getDrawable(R.drawable.bg2);
    break;
    case 2:
    btnDrawable=resources.getDrawable(R.drawable.bg3);
    break;
    }

    ll.setBackgroundDrawable(btnDrawable);
    renderListView(); //part two
    }
    
    

    可以看到,setContentView(R.layout.diary_list);这一句,就是定义了这个activity的layout调用的是哪个xml文件。

    顺带看一下,标注了part one的这一句,就是用来申明一个UI的,根据ID来查找布局,这个时候我们就需要找到名字叫做bg的一个LinearLayout,这个时候用到的就是上面的第二部分,gen文件夹下的R.java文件,编译器从这里找到bg的物理地址,我们看到bg的定义其实在diary_list.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:id
    ="@+id/bg"
    >"

    <ListView android:id="@+id/android:list"
    android:layout_width
    ="wrap_content"
    android:layout_height
    ="wrap_content"
    />"
    <TextView android:id="@+id/android:empty"
    android:layout_width
    ="wrap_content"
    android:layout_height
    ="wrap_content" 
            android:text="还没有开始写日记哦亲!\n点击Menu按钮开始写日记吧:)"
    android:layout_margin
    ="20px"
    android:textSize
    ="17px"
    android:textStyle
    ="bold"
    android:textColor
    ="#000"
    />
    </LinearLayout>

    文件第五行进行了对一个layout布局的id定义,这里任何一个控件,布局,都可以给它一个id,以方便在java文件中调用并操作它,利用ID找到它之后,我们就可以通过ll来操作它了,比如这里我用ll给bg设置了一个背景。


    这就是一个android软件的大致架构了,知道了运作流程,可以很方便的知道什么时候该在哪里写东西了,接下来如何去做具体的功能还是要查看官方的guide了~。

  • 相关阅读:
    深入分析JavaWeb Item13 -- jsp指令具体解释
    Caused by: Unable to locate parent package [json-default] for [class com.you.user.action.StudentActi
    二分图学习整理
    mysql字段去重方式
    谈一谈我最喜欢的诗人--法国诗人波德莱尔
    玩转Web之html+CSS(一)---论坛首页表格的实现
    Windows 7旗舰版安装Visual Studio 2013 Ultimate的系统必备及注意事项
    android 去掉listview之间的黑线
    android 5.0新特性学习--RecyclerView
    ListView random IndexOutOfBoundsException on Froyo
  • 原文地址:https://www.cnblogs.com/jiaozihardworking/p/2350011.html
Copyright © 2011-2022 走看看