java - 以动态和编程方式添加定义的 TextInputLayout

标签 java android xml material-design

我正在尝试根据用户从 Spinner 中选择的数字添加带有 EditText 的 TextInputLayout。我已经在 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>

这是我当前正在使用的代码,但它不会根据我已经创建的 View 动态添加:

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);
        }

    }

最佳答案

进行此类动态 View 注入(inject)的最简单方法是使用 JakeWharton 的 ButterKnife 库

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

您可以像在 Activity 的声明部分中一样使用它:

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

然后将其绑定(bind)在 onCreate() 内,如下所示:

ButterKnife.bind(this);

这大致相当于通过 id 膨胀并查找 View 。

此外,该库还有助于动态设置可绘制对象等。也轻松

关于java - 以动态和编程方式添加定义的 TextInputLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38204456/

相关文章:

excel - VBA - 从 XML 代码循环特定的子节点

c# - 如何隐藏 XML 配置文件

java - java应用程序中未应用背景颜色

java - 输入不匹配

java - 过滤对象的设计模式

android - listview 按位置获取项目 View

java - org.apache.activemq.broker.TransportConnection serviceTransportException 警告 : java. io.EOFException

android - 在 C# 中使用 BitmapFactory.DecodeFile 时内存占用量较大(对于小图像占用大量内存)

java - 如何检查用户是否从应用程序管理器禁用 Google 文本转语音

php - 当项目名称包含&符号时,eBay API PHP 和 XML 解析错误