anu*_*912 1 android android-textinputlayout android-textinputedittext
我必须使用浮动提示标签制作一个textinputlayout,它需要具有白色背景。一些与此类似的东西
设计预期:
但是到目前为止,我所能做的就是:
使用TextInputLayout的实际设计:

当前,TextInputLayout中的提示标签具有透明背景。有人可以帮助我,告诉如何实现这一目标吗?
这是我的代码(texinput布局):
<android.support.design.widget.TextInputLayout
android:id="@+id/til_login_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/text_input_layout_background"
app:hintTextAppearance="@style/TextStyle.Small.Hint">
<EditText
android:id="@+id/login_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:gravity="center_vertical"
android:hint="Email / Mobile"
android:inputType="text"
android:textSize="14sp" />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
我正在使用的背景
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:gravity="bottom"
android:top="5dp">
<shape android:shape="rectangle">
<stroke
android:width="1px"
android:color="@color/Grey300" />
<corners android:radius="100dp" />
<solid android:color="@color/transparent" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
提前致谢!
您应该对“ 轮廓框”使用“材料设计”样式。简单地说:
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
Run Code Online (Sandbox Code Playgroud)
给你TextInputLayout。
对于圆角使用:
boxCornerRadiusTopStart
boxCornerRadiusTopEnd
boxCornerRadiusBottomStart
boxCornerRadiusBottomEnd
Run Code Online (Sandbox Code Playgroud)
请参阅文本字段为Android在材料设计指南

这是一个解决方法:
1.设计你的
layout结构如下:
活动测试.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:background="@android:color/white">
<!-- Mobile number -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginTop="10dp"
android:background="@drawable/bg_rounded_input_field" />
<TextView
android:id="@+id/text_dummy_hint_mobile_number"
android:layout_width="wrap_content"
android:layout_height="2dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="28dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:text="Mobile Number"
android:textSize="16sp"
android:background="@android:color/white"
android:visibility="invisible"/>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="28dp"
android:layout_marginRight="28dp"
android:hint="Mobile Number"
android:textColorHint="@android:color/black"
app:hintTextAppearance="@style/HintTextStyle">
<EditText
android:id="@+id/edit_mobile_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:backgroundTint="@android:color/transparent"/>
</android.support.design.widget.TextInputLayout>
</RelativeLayout>
<!-- Promo code -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<View
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginTop="10dp"
android:background="@drawable/bg_rounded_input_field" />
<TextView
android:id="@+id/text_dummy_hint_promo_code"
android:layout_width="wrap_content"
android:layout_height="2dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="28dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:text="Promo Code"
android:textSize="16sp"
android:background="@android:color/white"
android:visibility="invisible"/>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="28dp"
android:layout_marginRight="28dp"
android:hint="Promo Code"
android:textColorHint="@android:color/black"
app:hintTextAppearance="@style/HintTextStyle">
<EditText
android:id="@+id/edit_promo_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:backgroundTint="@android:color/transparent"/>
</android.support.design.widget.TextInputLayout>
</RelativeLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
2.使用下面的可绘制
bg_rounded_input_field.xml圆角。
res/drawable/bg_rounded_input_field.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke
android:color="@android:color/black"
android:width="2dp">
</stroke>
<corners
android:radius="1000dp">
</corners>
</shape>
Run Code Online (Sandbox Code Playgroud)
3.下面使用
HintTextStyle,以TextInputLayout通过增加属性app:hintTextAppearance="@style/HintTextStyle"。
res/values/styles.xml
<style name="HintTextStyle" parent="TextAppearance.Design.Hint">
<item name="android:textSize">16sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
4.最后,在你
Activity刚刚show/hide在text_dummy_hint_mobile_number和text_dummy_hint_promo_code期间focus变化。仅供参考,我已经使用
Handler延迟100 millis来显示TextView与TextInputLayout提示文本 同步的虚拟提示animation。
测试活动.java
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class TestActivity extends AppCompatActivity {
TextView textDummyHintMobileNumber;
TextView textDummyHintPromoCode;
EditText editMobileNumber;
EditText editPromoCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
textDummyHintMobileNumber = (TextView) findViewById(R.id.text_dummy_hint_mobile_number);
textDummyHintPromoCode = (TextView) findViewById(R.id.text_dummy_hint_promo_code);
editMobileNumber = (EditText) findViewById(R.id.edit_mobile_number);
editPromoCode = (EditText) findViewById(R.id.edit_promo_code);
// Mobile number
editMobileNumber.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Show white background behind floating label
textDummyHintMobileNumber.setVisibility(View.VISIBLE);
}
}, 100);
} else {
// Required to show/hide white background behind floating label during focus change
if (editMobileNumber.getText().length() > 0)
textDummyHintMobileNumber.setVisibility(View.VISIBLE);
else
textDummyHintMobileNumber.setVisibility(View.INVISIBLE);
}
}
});
// Promo code
editPromoCode.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Show white background behind floating label
textDummyHintPromoCode.setVisibility(View.VISIBLE);
}
}, 100);
} else {
// Required to show/hide white background behind floating label during focus change
if (editPromoCode.getText().length() > 0)
textDummyHintPromoCode.setVisibility(View.VISIBLE);
else
textDummyHintPromoCode.setVisibility(View.INVISIBLE);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
希望这会有所帮助~
| 归档时间: |
|
| 查看次数: |
4328 次 |
| 最近记录: |