2011-08-01 16 views
15

我注意到Android開發中最乏味的部分之一是佈局設計,即使使用佈局構建器。Android:自動爲xml中的所有ID創建變量

與佈局元素設置的圖形,則佈局,使得可變協會之後是非常繁瑣的,如ImageButton myButton = (ImageButton)findViewById(R.id.myButton);

較大的佈局,這可能會很麻煩不斷(憶的名字軌道元素),然後以任何順序添加更多變量的需求會變得令人沮喪。

要稍微緩和這一點,那將是非常方便的,如果所有我在XML中聲明的ID被自動地與他們適當的變量有關,而所有這些數據類型都已經包含在類

有什麼已經這樣做了?

例如,如果我寫

<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/myButton" android:id="@+id/myButton"></ImageButton> 

那麼我想,其中包括該佈局的類已經有

import android.ImageButton; 

ImageButton myButton; 

myButton = (ImageButton)findViewById(R.id.myButton); 

這是一個設置或功能要求?我正在使用Eclipse IDE,這將非常方便

+0

,我知道的,但會很酷 - 也許寫:

你可以在這裏找到它呢? :) – Jords

+0

當然,我從來沒有做過一個自動代碼監聽器的事情......我將如何開始? Android AVD的那部分是否也是開源的? – CQM

回答

15

嘗試使用Android Annotations。它提供了有用的註釋來替換樣板代碼。

例如,見@ViewByIddocumentation:只需要聲明註釋

@ViewById 
EditText myEditText; 

@ViewById(R.id.myTextView) 
TextView textView; 

它取代

EditText myEditText; 

TextView textView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    [...] 
    myEditText = (EditText) findViewById(R.id.myEditText); 
    textView = (TextView) findViewById(R.id.myTextView); 
} 
0

這是一個功能請求。這是非常好的,我認爲這將是非常有用的;另一方面,有些情況下它不能很好地工作,例如,如果動態擴大視圖,並且在編譯時不知道某個特定活動將膨脹的視圖。但是,我傾向於認爲這種情況將是例外而不是規則。

最簡單的方法是編寫一個腳本來掃描佈局XML文件以搜索帶有ID的組件,並使用正確的定義創建.java文件。然後,你的活動可以從那些自動生成的類中派生出來。事情是這樣的:

當你的腳本處理,生成類:

class FooBarLayoutActivityBase extends Activity ... { 
    protected ImageButton myButton; 

    FooBarLayoutActivityBase() { 
    myButton = (ImageButton)findViewById(R.id.myButton); 
    } 
} 

然後,您可以簡單地從基類繼承使用的組件...

腳本方法很簡單,不需要您深入研究工具鏈的代碼 - 但您也可以直接在ADT插件中執行。

+0

您的代碼將無法正常工作,因爲findViewById()方法僅在調用setContentView方法後才能工作 –

25

我做了一個工具來自動生成搭售佈局XML的和程序邏輯一起在Java代碼中的字段。

基本上它需要一個XML佈局,並在瞬間爲您生成所有必需的Java代碼。支持基本的成員變量,ViewHolder模式,ArrayAdapter,CursorAdapter和RoboGuice代碼類型。不Android Layout Finder | Buzzing Android

+0

感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。 –

+2

它真的很好@JesperB .....我使用它,真的很有用... – SK16

+0

幹得好!我會向所有朋友展示這個:D –

相關問題