动态地和以编程方式添加已定义的TextInputLayout

时间:2016-07-05 13:15:52

标签: java android xml material-design

我正在尝试使用EditText添加一个TextInputLayout,该EditText基于用户从Spinner中选择的数字。我已经在XML中定义了TextInputLayout属性,并且希望简单地根据用户从微调器中选择的数字以编程方式添加它们:

XML:     

<FrameLayout
    android:background="@drawable/image_border"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight=".525">

    <Button
        android:id="@+id/add_image_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Click to Add Image" />
</FrameLayout>

<LinearLayout
    android:orientation="vertical"
    android:padding="4dp"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight=".475">

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <EditText
            android:id="@+id/create_poll_question_editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:imeOptions="actionDone"
            android:singleLine="true"
            android:hint="@string/create_poll_question" />
    </android.support.design.widget.TextInputLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/how_many_answers_textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/how_many_answers_text"
            android:textColor="@color/black"
            android:textSize="16sp" />

        <Spinner
            android:id="@+id/number_of_answers_spinner"
            android:layout_width="wrap_content"
            android:layout_gravity="bottom"
            android:layout_height="24dp"
            android:background="@android:drawable/btn_dropdown" />

    </LinearLayout>

  <!--Want to Add Programatically -->
    <android.support.design.widget.TextInputLayout
        android:id="@+id/create_poll_answer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <EditText
            android:id="@+id/create_poll_answer_editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:imeOptions="actionDone"
            android:singleLine="true"
            />
    </android.support.design.widget.TextInputLayout>

</LinearLayout>

以下是我目前使用的代码,但它不会根据我已经创建的视图动态添加:

public class YourItemSelectedListener implements AdapterView.OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        String selected = parent.getItemAtPosition(pos).toString();
        Toast.makeText(getActivity().getApplicationContext(), selected, Toast.LENGTH_SHORT).show();
        for (int i = 0; i < Integer.parseInt(selected); i++) {
            ViewGroup layout = (ViewGroup) mRootView.findViewById(R.id.create_poll_linearlayout);
            EditText editText = new EditText(getActivity());
            editText.setHint("Poll Answer");
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            editText.setLayoutParams(layoutParams);
            TextInputLayout newAnswer = new TextInputLayout(getActivity());
            newAnswer.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            newAnswer.addView(editText, layoutParams);
            layout.addView(newAnswer);
        }

    }

2 个答案:

答案 0 :(得分:1)

这种动态注入视图的最简单方法是使用JakeWharton的ButterKnife库

http://jakewharton.github.io/butterknife/

您可以像在活动的声明部分中那样使用它:

@BindView(R.id.title) TextInputLayout textInputLayout;

然后将它绑定在onCreate()内部,如:

ButterKnife.bind(this);

这大致相当于通过id充气和查找视图。

此外,该库有助于动态设置drawable等。也很轻松

答案 1 :(得分:1)

添加

  

<强>机器人:ID = “@ + ID / create_poll_linearlayout”

到您的根LinearLayout。