2010-12-15 89 views
2

我是Android開發的新手,並且正在努力工作。我想創建一個TextView,EditText和SkillDiceButton(它是Button類的擴展)的複合視圖(稱爲SkillDiceGroup)。我把它放在這在我的XML佈局工作,宣佈我SkillDiceGroup作爲純代碼的時候,和:Android XML Composite View

<com.jeremybush.d20.SkillDiceGroup android:id="@+id/skillDiceTest" 
    android:title="Foobar!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    </com.jeremybush.d20.SkillDiceGroup> 

而且我有這樣的代碼:

public class SkillDiceGroup extends LinearLayout 
{ 
// The View components 
private TextView mTitle; 
private EditText mSkill; 
private SkillDiceButton mDice; 

public SkillDiceGroup(Context context, AttributeSet attrs) 
{ 
    super(context); 

    this.setOrientation(HORIZONTAL); 

    mTitle = new TextView(context); 
     mTitle.setText("foobar"); 
    addView(mTitle, new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT 
)); 

    mSkill = new EditText(context); 
    addView(mSkill, new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT 
)); 

    mDice = new SkillDiceButton(context, attrs); 
    mDice.setText("d20"); 
    addView(mDice, new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT 
)); 
} 

private class SkillDiceButton extends DiceButton 
{ 
    public SkillDiceButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    public void onClick(View view) 
    { 
    modifier = Integer.parseInt(mSkill.getText().toString()); 

    super.onClick(view); 
    } 
} 
} 

這工作我是怎麼想的,但我會喜歡在xml視圖中自行聲明三個項目。我怎樣才能做到這一點?

回答

1

您應該看看Android提供的有關xml佈局的大量文檔,例如:declaring layoutcommon layout objectshello views,其中有每種佈局類型的詳細示例。

直接與3項取自的LinearLayout教程,佈局:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1"> 
    <TextView 
     android:text="row one" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row two" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row three" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row four" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    </LinearLayout> 

只需更換有一個EditText和SkillDiceButton第二兩個文本的意見。

+0

我一直在閱讀文檔,但我不確定這個示例是否完全相同。請注意,在我的代碼結尾處,我有修飾符賦值,其中引用了mSkill變量。由於我需要的邏輯,我不認爲你的例子是直接翻譯。雖然我可能(可能是)錯了。 – zombor 2010-12-15 18:41:38

+0

任何邏輯都應該在你的Activity類中,而不是你的視圖類中。如果您想查看其中的文本或添加點擊偵聽器,則可以通過ID訪問佈局的元素。它可以幫助您完成其中一個完整的示例,例如記事本教程:http://developer.android.com/guide/tutorials/notepad/index.html,以瞭解所有內容如何組合在一起。 – 2010-12-15 19:00:13

+0

這是正確的方法,如果您的自定義視圖需要自己的額外屬性,您也可以添加自己的xmlns。該項目中的面板小部件提供了一個如何添加自己的屬性的示例。 http://code.google.com/p/android-misc-widgets/您還可以使用findViewById獲取對您的活動中的自定義視圖的引用,並手動設置額外的屬性。這兩種解決方案都不會是錯的。 – schwiz 2010-12-15 19:03:58

0

如果您wan't創建自己的看法/小工具,「隱藏」內部佈局結構,並可以在不同的地方重複使用 - 你應該閱讀文檔有關creating custom components

還閱讀標籤,並LayoutInflater

但是,如果只想使用SkillDiceGroup一次 - 只需按照Mayra建議的佈局創建佈局

+0

對,就像我在其他評論中所說的那樣,我會重複使用這個東西15-20次。 – zombor 2010-12-15 19:29:15