无法将EditText动态添加到LinearLayout

时间:2013-08-26 07:07:02

标签: java android android-linearlayout

我看过很多类似的帖子,但没有一个解决了我的问题。另一个有趣的事情是,在模拟器上保存edittext的位置(意味着其他小部件向下移动),但未显示,另一方面,真实手机上的相同实现甚至没有显示小部件的位置。我在LinearLayout内部EditText点击TextView 添加团队成员时需要动态添加<LinearLayout android:id="@+id/layout_add_task" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/separator" android:layout_margin="5dp" android:background="@color/yellow_background" android:orientation="vertical" android:padding="5dp"> <LinearLayout android:id="@+id/layout_task_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/iv_check_research_tasks" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_check_empty" /> <EditText android:id="@+id/et_task_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:selectAllOnFocus="true" android:text="Task Name" android:textSize="20dp" android:textStyle="bold" /> </LinearLayout> <TextView android:id="@+id/tv_add_team_member" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginTop="5dp" android:text="Add a team member" android:textColor="@color/text_green" android:textSize="15dp" android:textStyle="bold" /> <LinearLayout android:id="@+id/ll_add_task" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tv_add_team_member" android:orientation="horizontal" android:weightSum="100" > <ImageView android:id="@+id/iv_create_assignment_attach" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="10" android:src="@drawable/icon_flag_alt" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="5dp" android:layout_weight="15" android:text="Due" android:textSize="15dp" /> <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="65" android:hint="None" android:selectAllOnFocus="true" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="10" android:src="@drawable/icon_calendar_empty" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:id="@+id/btn_create_assignment_trash" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="30dp" android:layout_marginTop="5dp" android:text="Trash" /> <Button android:id="@+id/btn_create_assignment_done" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="5dp" android:text="Done" /> </LinearLayout> </LinearLayout> 窗口小部件。

onClickListener

这是Java代码,TextView的tvAddTeamMember.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { LinearLayout ll = (LinearLayout) getActivity().findViewById(R.id.layout_task_name); EditText et = new EditText(getActivity()); LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); et.setLayoutParams(p); et.setText("Text"); ll.addView(et); } 实现。

{{1}}

6 个答案:

答案 0 :(得分:3)

你可以这样做!这不是你想要的。但是你的问题会得到解决。

1)默认情况下,在XML中添加EditText视图并使其不可见。

2)单击TextView,使其可见。

享受!

答案 1 :(得分:3)

您好@Anas Azeem:您的代码是正确的。通过您的代码我们可以动态地将editetxt添加到线性布局。问题是在布局文件中。在布局中提到添加布局的方向为“水平”,而不是那个使用“垂直”如下所示

<LinearLayout
            android:id="@+id/layout_task_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/iv_check_research_tasks"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />

            <EditText
                android:id="@+id/et_task_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:selectAllOnFocus="true"
                android:text="Task Name"
                android:textSize="20dp"
                android:textStyle="bold" />
        </LinearLayout>

答案 2 :(得分:1)

尝试更改该行:

 LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

有了这个:

  android.widget.LinearLayout.LayoutParams p= new android.widget.LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 //Then do your work

答案 3 :(得分:0)

如果您知道可能正在添加布局,则可以始终声明ViewStub。之后你只需找到viewStub并在其上调用inflate():

ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();

这是Android SDK中推广的方法。多亏了你可以在xml文件中定义infalte布局。

答案 4 :(得分:0)

尝试使用此代码。 替换ur行ll.addView(et);

通过:: ll.addView(等,P);

并删除你的行et.setLayoutParams(p);

答案 5 :(得分:0)

一种简单的方法。

        Button add = (Button) findViewById(R.id.add_checkpoint);
        final LinearLayout layout = (LinearLayout) findViewById(R.id.addLayout);        
        // layout has assigned weight = "1.0" in xml & it's a child of ScrollView
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                LayoutInflater oLayoutInflater = getLayoutInflater();
                // oView is declared globally & Layout "row_checkpoint" contains a EditText
                oView = oLayoutInflater.inflate(R.layout.row_checkpoint, null);

                final EditText speciesEditText = (EditText) oView
                        .findViewById(R.id.checkpoint); 
                speciesEditText.setId(layout.getChildCount());
                // Perform whatever required over EditText, same way you can add more elements.
                layout.addView(oView);
            }
        });

希望它会有所帮助。