gpt4 book ai didi

android - 如何以编程方式使用 OutlineBox 创建 TextInputLayout

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:59:20 24 4
gpt4 key购买 nike

我想创建具有 Widget.MaterialComponents.TextInputLayout.OutlinedBox 样式的 TextInputLayout。我尝试了很多方法,但无法获得所需的结果。这是我的代码。

TextInputLayout textInputLayout = new TextInputLayout(getActivity(),null,R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox);
textInputLayout.setHint("My Hint");
TextInputEditText editText = new TextInputEditText(textInputLayout.getContext());
textInputLayout.addView(editText);
parentView.addView(textInputLayout);

我也试过:

TextInputLayout textInputLayout = new TextInputLayout(getActivity(),null,TextInputLayout.BOX_BACKGROUND_OUTLINE);

我想创建这样的 View 。 enter image description here

最佳答案

更新

感谢@Mike M。

您需要使用 TextInputLayout.setBoxBackgroundMode() OutlineBox样式的使用方法

setBoxBackgroundMode (int boxBackgroundMode)

  • 设置框背景的模式(填充、轮廓或无)。

然后你需要使用TextInputLayout.BOX_BACKGROUND_OUTLINE)常量

NOTE: To get the corner in your OutlineBox of TextInputLayout you need to use setBoxCornerRadii() method

示例代码

public class MainActivity extends AppCompatActivity {

LinearLayout parentView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

parentView = findViewById(R.id.parentView);

TextInputLayout emailTextInputLayout = new TextInputLayout(this, null, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox);

emailTextInputLayout.setHint("Please Enter Email Address");
emailTextInputLayout.setBoxBackgroundMode(TextInputLayout.BOX_BACKGROUND_OUTLINE);
emailTextInputLayout.setBoxCornerRadii(5, 5, 5, 5);
TextInputEditText edtEmail = new TextInputEditText(emailTextInputLayout.getContext());
emailTextInputLayout.addView(edtEmail);

parentView.addView(emailTextInputLayout);


TextInputLayout passTextInputLayout = new TextInputLayout(this, null, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox);

passTextInputLayout.setHint("Please Enter Password");
passTextInputLayout.setBoxBackgroundMode(TextInputLayout.BOX_BACKGROUND_OUTLINE);
passTextInputLayout.setBoxCornerRadii(5, 5, 5, 5);
TextInputEditText edtPass = new TextInputEditText(passTextInputLayout.getContext());
passTextInputLayout.addView(edtPass);

parentView.addView(passTextInputLayout);


}

}

输出

enter image description here

基于这个答案:https://stackoverflow.com/questions/3246447/how-to-set-the-style-attribute-programmatically-in-android

  • 目前不支持动态样式更改。您必须在创建 View 之前设置样式(在 XML 中)。

这就是 TextInputLayout 不以编程方式接受设置轮廓框样式的原因。

这是一个简单的解决方案:

您可以使用 LayoutInflater

  • 将布局 XML 文件实例化到其对应的 View 对象中。

演示

Create a new layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/userIDTextInputLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">

<android.support.design.widget.TextInputEditText
android:id="@+id/userIDTextInputEditText"
android:layout_width="match_parent"
android:hint="Enter User Name"
android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>

AndroidX (+ Material Components for Android ):

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.textfield.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/userIDTextInputLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/userIDTextInputEditText"
android:layout_width="match_parent"
android:hint="Enter User Name"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>

Now using LayoutInflater add that TextInputLayout in your required layout

public class MainActivity extends AppCompatActivity {

LinearLayout rootView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

rootView = findViewById(R.id.rootView);

View view = LayoutInflater.from(this).inflate(R.layout.temp_layout, null);
TextInputLayout userNameIDTextInputLayout=view.findViewById(R.id.userIDTextInputLayout);
TextInputEditText userNameInputEditText = view.findViewById(R.id.userIDTextInputEditText);
userNameIDTextInputLayout.setHint("Please Enter User Name");
rootView.addView(view);
}
}

输出

Screenshot of app with an outlined text input

注意事项

如果您想从 XML 添加 TextInputLayout,请查看以下答案:

如果您想以编程方式添加超过 5 个 TextInputLayout,请考虑使用 RecyclerView。查看以下答案:

希望这对您有所帮助!

关于android - 如何以编程方式使用 OutlineBox 创建 TextInputLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52989087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com