天天看点

Android开发框架androidannotations使用初步

  • 一.简介

    我们在开发J2EE项目的时候,经常感觉Spring很方便,因此,当我们开发android的时候,自然而然会想有没有类似的框架。本次博客主要讲一下比较流行的android开发框架AndroidAnnotations,它除了有依赖注入的特性以外,还集成了Ormlite,Spring-android中的REST模板。使用起来非常方便,大大提高了开发效率。

    二.使用步骤

    1.下载AndroidAnnotations:

    $ git clone https://github.com/excilys/androidannotations.git

    项目中重要的两个jar包分别是:androidannotations-api-3.0.1.jar和androidannotations-3.0.1.jar

    2.新建一个android项目,然后将androidannotations-api-3.0.1.jar复制到libs目录下,在项目的根目录新建一个文件夹,命名为compile-libs,然后将androidannotations-3.0.1.jar复制到该目录下

    3.然后设置项目属性:右键->Properties->Java Compiler->Annotation Processing 在该页面选中Enable project specific settings。

    Android开发框架androidannotations使用初步
    然后点击Annotation Processing的子项Factory Path页面,选中Enable project specific settings,然后添加编译所需的jar包。点击“Add JARs”将之前complie-libs目录下的androidannotations-3.0.1.jar导入,保存后退出。
    Android开发框架androidannotations使用初步

    4.下面我们就看一下如下代码

    首先是布局文件

    view source print ?

    01.

    <?xml version=

    "1.0"

    encoding=

    "utf-8"

    ?>

    02.

    <LinearLayout xmlns:android=

    "http://schemas.android.com/apk/res/android"

    03.

    android:orientation=

    "vertical"

    04.

    android:layout_width=

    "fill_parent"

    05.

    android:layout_height=

    "fill_parent"

    06.

    >

    07.

    <EditText 

    08.

    android:id=

    "@+id/myInput"

    09.

    android:layout_width=

    "fill_parent"

    10.

    android:layout_height=

    "wrap_content"

    11.

    />

    12.

    <Button 

    13.

    android:id=

    "@+id/myButton"

    14.

    android:layout_width=

    "fill_parent"

    15.

    android:layout_height=

    "wrap_content"

    16.

    android:text=

    "Click me!"

    17.

    />

    18.

    <TextView 

    19.

    android:id=

    "@+id/myTextView"

    20.

    android:layout_width=

    "fill_parent"

    21.

    android:layout_height=

    "wrap_content"

    22.

    />   

    23.

    </LinearLayout>

    上述布局文件和普通项目的布局文件没有什么差别,下面我们看一下对应的Activity的java文件

    view source print ?

    01.

    package

    com.example.testaa;

    02.

    03.

    import

    org.androidannotations.annotations.AfterViews;

    04.

    import

    org.androidannotations.annotations.Click;

    05.

    import

    org.androidannotations.annotations.EActivity;

    06.

    import

    org.androidannotations.annotations.UiThread;

    07.

    import

    org.androidannotations.annotations.ViewById;

    08.

    09.

    import

    android.app.Activity;

    10.

    import

    android.content.Intent;

    11.

    import

    android.widget.Button;

    12.

    import

    android.widget.EditText;

    13.

    import

    android.widget.TextView;

    14.

    import

    android.widget.Toast;

    15.

    @EActivity

    (R.layout.activity_main)

    16.

    public

    class

    MainActivity 

    extends

    Activity {

    17.

    @ViewById

    (R.id.myInput)

    18.

    EditText myEditText;

    19.

    20.

    @ViewById

    21.

    Button myButton;

    22.

    23.

    @ViewById

    24.

    TextView myTextView;

    25.

    28.

    @AfterViews

    29.

    void

    afterViewProcess(){

    30.

    myButton.setText(

    "Next"

    );

    31.

    myTextView.setText(

    "第一个Activity页面"

    );

    32.

    }

    33.

    34.

    37.

    @Click

    (R.id.myButton)

    38.

    void

    processClick(){

    39.

    Intent intent=

    new

    Intent(

    this

    ,SubActivity_.

    class

    );

    40.

    intent.putExtra(

    "input_value"

    , myEditText.getEditableText().toString());

    41.

    startActivity(intent);

    42.

    }

    43.

    44.

    48.

    @UiThread

    49.

    void

    showToast(String content){

    50.

    Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();

    51.

    }

    52.

    56.

    @UiThread

    (delay=

    1000

    )

    57.

    void

    showToastDelay(String content){

    58.

    Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();

    59.

    }

    60.

    }

    可以看出,我们通过注解的方式,大大简化了原有的代码。

    注解1:@ViewById 与findViewById功能相似,如果ViewById后没有设置资源ID的话,就是自动查找与变量名称相同的id资源。

    注解2:@Click 点击事件处理的注解。

    注解3:@UiThread 后台Ui线程的注解,省去了Handler等等。

    注解4:@EActivity 提示Activity的注解,注意,该注解将Activity编译成Activity_,注意,多一个下划线“_”,因此在AndroidManifest.xml文件中需要将其添加下滑线

    注解5:@AfterViews 是指View类注入完毕之后执行的代码。

    我们第二个页面的布局文件与第一个相同,我们主要看一下它的java文件

    view source print ?

    01.

    07.

    package

    com.example.testaa;

    08.

    09.

    import

    org.androidannotations.annotations.AfterViews;

    10.

    import

    org.androidannotations.annotations.Click;

    11.

    import

    org.androidannotations.annotations.EActivity;

    12.

    import

    org.androidannotations.annotations.Extra;

    13.

    import

    org.androidannotations.annotations.UiThread;

    14.

    import

    org.androidannotations.annotations.ViewById;

    15.

    16.

    import

    android.app.Activity;

    17.

    import

    android.widget.Button;

    18.

    import

    android.widget.EditText;

    19.

    import

    android.widget.TextView;

    20.

    import

    android.widget.Toast;

    21.

    28.

    @EActivity

    (R.layout.activity_sub)

    29.

    public

    class

    SubActivity 

    extends

    Activity{

    30.

    @ViewById

    (R.id.myInput)

    31.

    EditText myEditText;

    32.

    33.

    @ViewById

    34.

    Button myButton;

    35.

    36.

    @ViewById

    37.

    TextView myTextView;

    38.

    39.

    @Extra

    (value=

    "input_value"

    )

    40.

    String inputString;

    41.

    42.

    @AfterViews

    43.

    void

    afterViewProcess(){

    44.

    myTextView.setText(inputString);

    45.

    }

    46.

    47.

    @Click

    (R.id.myButton)

    48.

    void

    processClick(){

    49.

    showToast(

    "Clicked me !"

    );

    50.

    }

    51.

    52.

    @UiThread

    53.

    void

    showToast(String content){

    54.

    Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();

    55.

    }

    56.

    }

    这里面多一个@Extra注解,这个注解的含义和getIntent().getExtra()相同,目的是获取上一个Activity通过Intent传递过来的值。

    下面是AndroidManifest.xml文件

    view source print ?

    01.

    <?xml version=

    "1.0"

    encoding=

    "utf-8"

    ?>

    02.

    <manifest xmlns:android=

    "http://schemas.android.com/apk/res/android"

    03.

    package

    =

    "com.example.testaa"

    04.

    android:versionCode=

    "1"

    05.

    android:versionName=

    "1.0"

    >

    06.

    07.

    <uses-sdk

    08.

    android:minSdkVersion=

    "8"

    09.

    android:targetSdkVersion=

    "17"

    />

    10.

    11.

    <application

    12.

    android:allowBackup=

    "true"

    13.

    android:icon=

    "@drawable/ic_launcher"

    14.

    android:label=

    "@string/app_name"

    15.

    android:theme=

    "@style/AppTheme"

    >

    16.

    <activity

    17.

    android:name=

    "com.example.testaa.MainActivity_"

    18.

    android:label=

    "@string/app_name"

    >

    19.

    <intent-filter>

    20.

    <action android:name=

    "android.intent.action.MAIN"

    />

    21.

    22.

    <category android:name=

    "android.intent.category.LAUNCHER"

    />

    23.

    </intent-filter>

    24.

    </activity>

    25.

    <activity

    26.

    android:name=

    "com.example.testaa.SubActivity_"

    ></activity>

    27.

    </application>

    28.

    29.

    </manifest>

    注意Activity的声明,多添加了下划线“_”

    框架的其他注解:https://github.com/excilys/androidannotations/wiki/AvailableAnnotations 

  • 该文章引用别人的博客 :http://www.it165.net/pro/html/201404/12213.html

继续阅读