我想动态添加布局到android

时间:2014-09-03 17:46:14

标签: android android-layout android-activity

我正在开发简单的评分表应用程序屏幕,其中有四个edittext和一个textview,现在我想要的是一旦输入值,得分就会计算并显示在textviews下,如果得分小于100包含所有这些小部件的新布局会自动添加,我的代码是

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01"
android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:fillViewport="true"
  android:scrollbars="none" 
  androidLid="@+id/main">

 <LinearLayout android:layout_width="match_parent"
 android:layout_height="match_parent"

    >

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="85dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView1"
        android:layout_alignBottom="@+id/textView1"
        android:layout_marginLeft="96dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/meld1"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="45dp"
        android:ems="10"
        android:focusable="true"
        android:inputType="number"
        android:maxLength="3" />

    <EditText
        android:id="@+id/meld2"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/EditText02"
        android:layout_alignBottom="@+id/EditText02"
        android:layout_alignLeft="@+id/textView2"
        android:ems="10"
        android:focusable="true"
        android:inputType="number"
        android:maxLength="3" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignLeft="@+id/EditText02"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/EditText02"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/meld1"
        android:layout_alignBottom="@+id/meld1"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:focusable="true"
        android:inputType="number"
        android:maxLength="3" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView3"
        android:layout_marginLeft="108dp"
        android:layout_toRightOf="@+id/EditText02"
        android:text="Dealer"
        android:textAppearance="?android:attr/textAppearanceLarge" />


    <EditText
        android:id="@+id/EditText04"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:ems="10"
        android:focusable="true"
        android:inputType="number"
        android:maxLength="3" />

    <EditText
        android:id="@+id/EditText05"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/EditText04"
        android:layout_alignBottom="@+id/EditText04"
        android:layout_alignLeft="@+id/meld2"
        android:ems="10"
        android:focusable="true"
        android:inputType="number"
        android:maxLength="3" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/EditText04"
        android:layout_marginTop="23dp"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView7"
        android:layout_alignBottom="@+id/textView7"
        android:layout_alignRight="@+id/EditText05"
        android:layout_marginRight="19dp"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

   </RelativeLayout>

  </LinearLayout>
  </ScrollView>
  and the layout to be added is

  <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/add"
>
<RelativeLayout 
android:layout_width="match_parent"
android:layout_height="match_parent" >

<EditText
    android:id="@+id/editText1"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="71dp"
    android:ems="10" />

<EditText
    android:id="@+id/editText2"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/editText1"
    android:layout_alignBottom="@+id/editText1"
    android:layout_alignParentRight="true"
    android:layout_marginRight="35dp"
    android:ems="10" />

<EditText
    android:id="@+id/meld1"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/editText1"
    android:layout_marginTop="16dp"
    android:ems="10" />

<EditText
    android:id="@+id/EditText02"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/meld1"
    android:layout_alignBottom="@+id/meld1"
    android:layout_alignLeft="@+id/editText2"
    android:ems="10" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/meld1"
    android:layout_marginTop="20dp"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

   <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView1"
    android:layout_alignBottom="@+id/textView1"
    android:layout_alignLeft="@+id/EditText02"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

    </RelativeLayout>
     </LinearLayout>

所以,这里我要做的是在scrollview布局下添加添加布局,在所有四个edittexts中更改文本,我的代码添加布局是

     LinearLayout myLayout = (LinearLayout)findViewById(R.id.main);
     View hiddenInfo = getLayoutInflater().inflate(R.layout.add, scrollview01,    false);
            myLayout.addView(hiddenInfo);

但我无法在滚动视图下添加此布局,添加此布局后,我想在每个edittext上添加文本观察器,并仅更新该布局的文本视图

et.addTextWatcher{
//do something
  tv.settext(something);
  }

现在基于其值的变化,我希望在此添加的布局中更新textviews的值 任何提示或解决方案都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您正在尝试将“ScrollView”转换为LinearLayout并添加子项。定义的ScrollViews只能有1个子元素。请尝试引用您的LinearLayout子视图并为其添加视图。

这样的东西
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="none" 
android:id="@+id/main">

<LinearLayout android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/main_root"
>

//etc...

然后将新视图添加到线性布局

LinearLayout myLayout = (LinearLayout)findViewById(R.id.main_root);
//context references your activity context.
View hiddenInfo = LayoutInflater.from(context).inflate(R.layout.add, myLayout, true);

请参阅LayoutInflater文档

中的“inflate(int resource,ViewGroup root,boolean attachToRoot)”