以编程方式创建EditText的文本输入布局

3
我在Android的Activity.java文件中以编程方式创建了EditTexts。我想为这些EditTexts添加TextInputLayout。有没有什么方法可以做到这一点?我已经在XML文件中包装了EditText。我希望能够对以编程方式创建的EditTexts进行相同的操作。
提前感谢您的帮助。
public class FirstFragment extends Fragment {


      EditText emailText;
      EditText passText;
      Button loginButton;
      TextView registerView;
      int counter=0;


    public FirstFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.fragment_first, container, false);
        emailText  = (EditText) view.findViewById(R.id.emailText);
        passText = (EditText) view.findViewById(R.id.passwordText);
        loginButton = (Button) view.findViewById(R.id.LoginButton);
        registerView = (TextView) view.findViewById(R.id.RegisterView);



        final TextInputLayout nameText = new TextInputLayout(getActivity());
        final TextInputLayout DeptText = new TextInputLayout(getActivity());
        final EditText phoneNumber = new EditText(getActivity());
        final Button registerButton = new Button(getActivity());
        final LinearLayout layout = (LinearLayout)view.findViewById(R.id.fragmentLayout);
        phoneNumber.setInputType(InputType.TYPE_CLASS_PHONE);
        LinearLayout.LayoutParams parameters1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) ;
        nameText.setLayoutParams(parameters1);
        DeptText.setLayoutParams(parameters1);
        phoneNumber.setLayoutParams(parameters1);
        LinearLayout.LayoutParams parameters2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) ;
        parameters2.gravity = Gravity.CENTER;
        registerButton.setLayoutParams(parameters2);
        nameText.setHint("Enter Name");
        DeptText.setHint("Enter Department");
        phoneNumber.setHint("Enter Phone Number");
        registerButton.setText("Register");
        registerView.setTextColor(Color.BLUE);
        registerView.setTextSize(17);



        registerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {



                counter++;
                if(counter==1) {
                    layout.addView(nameText,1 );
                    layout.addView(DeptText, 2);
                    layout.addView(phoneNumber,3);
                    layout.removeView(loginButton);
                    layout.addView(registerButton,5);
                    registerView.setText("Already signed Up? login");
                }
                else{
                    layout.removeView(nameText);
                    layout.removeView(DeptText);
                    layout.removeView(phoneNumber);
                    layout.removeView(registerButton);
                    layout.addView(loginButton,2);
                    registerView.setText("New User? Sign Up");
                    counter=0;

                }


            }
        });
     return view;
    }


}

1
随意创建一个 TextInputLayout 实例,然后在其上调用 addView() 方法以添加 EditText - CommonsWare
尝试了,但不起作用。运行时编辑文本未显示出来。 - Vedant Aggrawal
1
请提供一个 [mcve] 来展示您的问题。 - CommonsWare
2
我希望对通过编程创建的EditText做同样的操作。你只是通过编程创建了一个EditText(名为phoneNumber)。你没有在TextInputLayout上调用addView(),并传递phoneNumber作为参数。其他的EditText小部件是从被充气的布局资源中获取的;请将这些EditText包装在同一个布局资源的TextInputLayout中。 - CommonsWare
我很努力地尝试理解,但仍然无法理解。您能给一个例子以便澄清吗?谢谢。 - Vedant Aggrawal
2个回答

1

尝试将TextInputLayout视为EditText字段的包装器,例如:

    LinearLayout assessmentLayout = (LinearLayout) findViewById(R.id.assessmentsLayout);
    LinearLayout.LayoutParams layoutParams =
            new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
    assert assessmentLayout != null;

    TextView screenTitle = new TextView(this);
    screenTitle.setLayoutParams(layoutParams);
    screenTitle.setText(String.format("Assessment: %s", course.getName()));
    assessmentLayout.addView(screenTitle);

    TextInputLayout titleWrapper = new TextInputLayout(this);
    titleWrapper.setLayoutParams(layoutParams);
    titleWrapper.setHint("Assessment Title:");
    assessmentLayout.addView(titleWrapper);

    title = new EditText(this);
    title.setLayoutParams(layoutParams);
    title.setText(assessment.getTitle());
    titleWrapper.addView(title);

    TextInputLayout descriptionWrapper = new TextInputLayout(this);
    descriptionWrapper.setLayoutParams(layoutParams);
    descriptionWrapper.setHint("Description:");
    assessmentLayout.addView(descriptionWrapper);

    description = new EditText(this);
    description.setLayoutParams(layoutParams);
    description.setText(assessment.getDescription());
    descriptionWrapper.addView(description);

您需要将EditText视图添加到TextInputLayout包装器中,而不是直接添加到活动布局中。

1
你可以像这样从XML文件中填充布局:
在Layout res中创建text_input_layout.xml。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.TextInputEditText
        android:inputType="phone"
        android:hint="change hint"
        android:id="@+id/text_input_edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>

然后在您的代码中填充它。
TextInputLayout txtInputLayout = (TextInputLayout) LayoutInflater.from(getActivity()).inflate(R.layout.text_input_layout,null);
TextInputEditText txtInputEditText = (TextInputEditText) txtInputLayout.findViewById(R.id.text_input_edit_text);
mRoot.addView(txtInputLayout);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接