編輯:關於Android編程
這陣子遇到了好多事情,挺久沒來更新博文了,這兩天在學這個開源框架Android Annotations,用起來感覺挺方便的,
相信用過Spring注解的孩子理解起來應該比較容易!就是配置起來比較吃力。
關於AndroidAnnotaions的介紹,網上已經很多了,我這裡不再累贅。
1、AndroidAnnotations官網:http://androidannotations.org/(也許你需要翻牆)
2、eclipse中使用androidannotations的配置方法說明:https://github.com/excilys/androidannotations/wiki/Eclipse-Project-Configuration
3、Android Studio中配置AndroidAnnotations:(這個是我這篇博文中要涉及到的!)
一、Android Studio配置androidannotations環境。
1、首先你建立一個module之後,在對應的app中會有一個名為build.gradle的文件(該module有效),而在整個項目外面也會有一個名為build.gradle的文件(全局有效)【這個工具中的application的目錄下(相當於Eclipse下的workspace)是可以有多個module的(相當於Eclipse下的project)】
2、我們配置的時候大概要分為下面兩步
在局部build.gradle中(加入紅色字體部分):
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def AAVersion = '3.0.1'
android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.tongbu.mytest"
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt {
arguments {
androidManifestFile variant.processResources.manifestFile
resourcePackageName 'com.tongbu.mytest'
}
}
在全局build.gradle中(加入紅色字體部分):
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.3'
}
}
allprojects {
repositories {
jcenter()
}
}
如果以上的都順利完成了,那麼恭喜你已經快配置完了,還需要把AndroidManifest.xml中的Activity的名字後面加上 _(下劃線),因為這個框架解析編譯的時候,比如類MainActivity會被解析成MainActivity_.class,所以在清單文件中我們要在Activity的名字後面加一個下劃線,或者androidannotation會報錯!
但並不會這麼順利,在你補充完下劃線之後,你會發現會提示你找不到MainActivity_這個東東
那麼怎麼辦呢??我們說了它是在編譯的時候整出來的,那我們只要按一下編譯的按鈕即可生成了!!
這樣子androidannotation在android studio上的環境就配置好了,Eclipse的話資料比較多,再這裡就不介紹了
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD48cD48c3Ryb25nPrb+oaLSu7j2RGVtb8C0wcu94mFuZHJvaWRhbm5vdGF0aW9uc7XEsr+31teiveI8L3N0cm9uZz48YnIgLz48L3A+PHA+PHByZSBjbGFzcz0="brush:java;">@NoTitle //無標題
@Fullscreen //全屏
@EActivity(R.layout.activity_my)
public class MyActivity extends ActionBarActivity {
//==============================================基本的注解=================================================
@ViewById
Button button1;
@ViewById
Button button2;
@ViewById(R.id.textview1) //指定id的注入
TextView textView;
@ViewById
ProgressBar progressBar;
@ViewById
ImageView imageView;
//獲取系統service的方法(取代原來的clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);)
@SystemService
ClipboardManager clipboardManager;
@Click({R.id.button1,R.id.button2,R.id.button3,R.id.button4})
public void simpleButtonOnClicked(View view){
switch (view.getId()){
case R.id.button1:{
textView.setText("Button1 is Clicked!");
}
break;
case R.id.button2:{
textView.setText("Button2 is Clicked!");
}
break;
case R.id.button3:{
String content = clipboardManager.getText().toString();
Toast.makeText(getApplicationContext(),"剪貼板內容: " + content, Toast.LENGTH_SHORT).show();
}
break;
case R.id.button4:{
Toast.makeText(getApplicationContext(),"滾動條開始了!",Toast.LENGTH_SHORT).show();
progressBarWorks();
}
break;
}
}
@LongClick({R.id.button2})
public void buttonOnLongClicked(View view){
switch (view.getId()){
case R.id.button1:{
textView.setText("Button1 is LongClicked!");//由於沒注冊,所以不可能被觸發
}
break;
case R.id.button2:{
textView.setText("Button2 is LongClicked!");//可觸發
}
break;
}
}
//===================================================關於資源的注解=========================================
@AnimationRes(R.anim.rotate)
Animation animationRotate;
@DrawableRes(R.drawable.myphoto)
Drawable myphoto;
@ColorRes(R.color.love)
Integer mycolor;
@TextRes(R.string.textres)
CharSequence text;
@Click({R.id.button5,R.id.button6,R.id.button7})
public void animationButtonOnClicked(View view){
switch (view.getId()){
case R.id.button5:{
imageView.startAnimation(animationRotate);
}
break;
case R.id.button6:{
imageView.setImageDrawable(myphoto);
}
break;
case R.id.button7:{
Toast.makeText(getApplicationContext(),text.toString(),Toast.LENGTH_SHORT).show();
}
break;
}
}
//==============================================關於線程的注解================================================
//相當於一個新的任務AsyncTask或者新線程Thread
@Background
public void progressBarWorks(){
//相當於一個新的線程中執行: @Background
int i = 1;
while (i <= 10){
Log.e("progress","進度: " + i);
try {
Thread.sleep(1000);
updateProgressBar(i);
//直接progressBar.setProgress(i);也可以的,所以@Background注解內部可能實現了handler機制
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//指代UI線程
@UiThread
public void updateProgressBar(int i){
progressBar.setProgress(i);
if (i == 10){
Toast.makeText(getApplicationContext(), "滾動條結束",Toast.LENGTH_SHORT).show();
}
}
//=======================================關於幾個事件的先後順序===============================================
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("FirstToLast", "onCreate");
//可省略!
//setContentView(R.layout.activity_my);
//progressBar.setMax(100); 報錯,空指針異常
//因為在onCreate()被調用的時候,@ViewById還沒有被set,也就是都為null
//所以如果你要對組件進行一定的初始化,那麼你要用@AfterViews注解
}
@AfterViews
public void init(){
Log.e("FirstToLast","init");
progressBar.setMax(10);
}
@Override
protected void onResume() {
super.onResume();
Log.e("FirstToLast","onResume");
}
@Override
protected void onStart() {
super.onStart();
Log.e("FirstToLast","onStart");
}
}
幾個方法的先後調用順序:
資源涉及的注解(不一一列舉):
一、Vold工作機制Vold是Volume Daemon的縮寫,它是Android平台中外部存儲系統的管控中心,是管理和控制Android平台外部存儲設備的後台進程。其功
**前言**在Android中,我們一般通過RadioGroup來管理一組RadioButton 來達到 單選按鈕的互斥效果。但是,有些需求中,需要完成N行N列這樣的Ra
介紹A toast provides simple feedback about an operation in a small popup. It only fills
很多人在用刷機精靈最新版時,除了看到很多確實可以用到的功能,也發現了一個根本沒想過會去用也並不了解的功能,那就是adb命令工具。如果你在刷機過程中有點閱歷,