ОБНОВЛЕНИЕ
Благодаря @Mike M.
Вам необходимо использовать TextInputLayout.setBoxBackgroundMode()
метод для использованияСтиль OutlineBox
setBoxBackgroundMode (int boxBackgroundMode)
- Установка режима для фона поля (заполненный, контур или без).
Тогда вам нужно использовать TextInputLayout.BOX_BACKGROUND_OUTLINE)
Константы
ПРИМЕЧАНИЕ: Чтобы получить угол вваш OutlineBox TextInputLayout вам нужно использовать setBoxCornerRadii()
метод
SAMPLE CODE
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://i.stack.imgur.com/t2stI.png)
На основании этого ответа: /3117463/kak-ustanovit-atribut-stilya-programmno-v-android
- Динамический стильизменение в настоящее время не поддерживается.Вы должны установить стиль перед созданием представления (в XML).
Это причина того, что TextInputLayout
программно не принимает установку стиля рамок в рамке.
Вотпростое решение:
Вы можете использовать LayoutInflater
- Создание файла макета
XML
в соответствующих View
объектах.
DEMO
Создание нового макета
<?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 (+ Материальные компоненты для 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>
Теперь, используя LayoutInflater
, добавьте TextInputLayout
в нужный вам макет
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);
}
}
OUTPUT
![Screenshot of app with an outlined text input](https://i.stack.imgur.com/cd0tD.png)
Примечание
Если вы хотите добавить TextInputLayout
из XML, тогда, пожалуйста, проверьте следующий ответ:
Если вы хотите добавить более 5 TextInputLayout
s программно, тогда, пожалуйста, подумайте об использовании RecyclerView
.Ознакомьтесь со следующими ответами:
Надеюсь, это поможет!