我正在尝试在我的应用中创建这样的内容(取自谷歌文档):
现在,我尝试创建一个TextInputLayout
元素并尝试在其周围放置边框,但我无法让它看起来像我发布的图像。
以下是TextInputLayout
的代码:
<android.support.design.widget.TextInputLayout
android:id="@+id/shipper_layout"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/text_layout_stroke_normal"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp">
<EditText
android:id="@+id/shipper_field"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
android:background="@null"
android:gravity="top"
android:hint="@string/shipper_field"
android:inputType="textMultiLine"
android:overScrollMode="always"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical" />
</android.support.design.widget.TextInputLayout>
以下是它的外观: (关注之前)
您可以看到边框未按预期更改,并且提示只是最小化
答案 0 :(得分:6)
试试这段代码:
在Xml中:
<android.support.design.widget.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/shipper_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<EditText
android:id="@+id/shipper_field"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="@drawable/text_layout_stroke_normal"
android:gravity="top"
android:hint="HELLO"
android:inputType="textMultiLine"
android:overScrollMode="always"
android:padding="15dp"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical" />
</android.support.design.widget.TextInputLayout>
现在在代码中使用Edittext
setOnFocusChangeListener
的边框和提示颜色
edittext.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
GradientDrawable drawable = (GradientDrawable)edittext.getBackground();
drawable.setStroke(2, Color.RED);
edittext.setHintTextColor(Color.RED);
}
}
});
答案 1 :(得分:2)
试试这个
在drawable文件夹中创建名为custom_borders.xml的xml文件,然后粘贴以下代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke android:color="#ff0000" android:width="2dp"></stroke>
<corners android:radius="5dp"></corners>
</shape>
并将其应用到TextInputLayout
这样的
android:background="@drawable/custom_borders"
答案 2 :(得分:1)
我想你的问题是如何根据它的状态改变背景。您只需编辑drawable文件夹中的当前text_layout_stroke_normal.xml
即可。将此代码放入该文件中,它将根据聚焦状态而改变:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false">
<shape>
<stroke android:width="1dp" android:color="@android:color/secondary_text_light" />
<corners android:radius="5dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<stroke android:width="2dp" android:color="@color/colorAccent" />
<corners android:radius="5dp" />
</shape>
</item>
</selector>
答案 3 :(得分:1)
尝试一下
将此行添加到TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android已经定义了样式。
答案 4 :(得分:0)
尝试一下:
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hint="textArea">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:inputType="textMultiLine"
android:gravity="top"
android:lines="4"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
确保您使用的是最新的材料库:
implementation 'com.google.android.material:material:1.2.1'