Android XML Composite View

时间:2010-12-15 18:13:43

标签: android

我是Android开发的新手,我正在努力工作。我想创建一个TextView,EditText和SkillDiceButton(它是Button类的扩展)的复合视图(称为SkillDiceGroup)。当我将SkillDiceGroup声明为纯代码并将其放入我的XML布局时,我有它的工作:

   <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视图中声明这三个项目。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您应该查看Android提供的有关xml布局的大量文档,例如:declaring layoutcommon layout objectshello views,其中包含每种布局类型的详细示例。< / p>

直接从LinearLayout教程中获取包含3个项目的布局:

<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替换后两个文本视图。

答案 1 :(得分:0)

如果您不想创建自己的“隐藏”内部布局结构的视图/窗口小部件,并且可以在各个地方重复使用 - 您应该阅读有关creating custom components的文档

还会阅读有关代码和LayoutInflater

的内容

但是如果只想使用SkillDiceGroup一次 - 只需按照Mayra的建议创建布局