如何正确从材料设计 TextInputLayout 中获取文本?

Posted

技术标签:

【中文标题】如何正确从材料设计 TextInputLayout 中获取文本?【英文标题】:How to get text from material design TextInputLayout correctly? 【发布时间】:2020-01-07 21:45:04 【问题描述】:

我想使用自定义结束图标从材料设计的 TextInputLayout 中获取文本。

我尝试过这样做:

TextInputLayout textInputCustomEndIcon = findViewById(R.id.editText);
final TextInputEditText editText = new TextInputEditText(textInputCustomEndIcon.getContext());
    
textInputCustomEndIcon.setEndIconOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View view) 
        if (editText.getText() != null) 
            String text = editText.getText().toString();
    
            Log.i("MainActivity", "setEndIconOnClickListener:"+ text);
        
    
);

但我得到一个空文本,不是空的而是空的!!

【问题讨论】:

您的布局 XML 中的 <TextInputLayout> 中有 <TextInputEditText> 吗? 【参考方案1】:

使用类似的东西:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/custom_end_icon"
    ...>

    <com.google.android.material.textfield.TextInputEditText
       ../>

</com.google.android.material.textfield.TextInputLayout>

只需使用:

TextInputLayout textInputLayout = findViewById(R.id.custom_end_icon);
String text = textInputLayout.getEditText().getText();

您的问题在这里:

final TextInputEditText editText = new TextInputEditText(textInputCustomEndIcon.getContext());

您只是在创建TextInputEditText 的新实例,它不是TextInputLayout 中的TextInputEditText

【讨论】:

有没有办法获取/访问TextInputEditTextTextInputLayout,即TextInputLayout 的“内部”,类似于editText.getTextInputLayout getText() 返回可编辑。您必须调用 getText().toString()。我不知道你为什么在布局上使用 getEditText()。我直接使用 TextInputEditText: ((TextInputEditText)getView().findViewById(R.id.etTheText)).getText().toString().【参考方案2】:

我和你有同样的问题。我就是这样解决的。在 String 变量中,我需要使用 .trim()

验证数据是否已正确插入
  String vname=Name.getEditText().getText().toString().trim();

【讨论】:

你没有验证任何东西。你只是修剪你的字符串。【参考方案3】:

第一个活动:

String uname = userV.getEditText().getText().toString();
    
Intent intent1 = new Intent(VolunteerActivity.this, VolunteerView.class);
intent1.putExtra("USER_NAME", uname);
startActivity(intent1);

第二个活动:

Bundle extras = getIntent().getExtras();
if (extras != null) 

    String uname = extras.getString("USER_NAME");
    tv2.setText(uname);

【讨论】:

以上是关于如何正确从材料设计 TextInputLayout 中获取文本?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何更改 TextInputLayout(材料组件)中的文本颜色?

如何在新的 android 设计库中使用 TextInputLayout

Android Material Design 史上最全的材料设计控件大全

材料设计的ButtomSheet没有正确显示 - 快速

复选框材料设计

包含谷歌材料设计图标的语法是正确的?