gpt4 book ai didi

android - EditText setError 在 BottomSheetDialog 中不合适

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:18 35 4
gpt4 key购买 nike

调用 editText.setError("...") 时,我的 EditText 的错误指示器位置出现问题。

如您在屏幕截图中所见,我使用的是 BottomSheetDialog,其中包含 EditText。当我显示错误指示器时,文本完全不合适。对话框似乎“认为”它是全屏的,但实际上不是。

enter image description here

这是我的对话框布局文件 (phone_dialog.xml):

<android.support.constraint.ConstraintLayout 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="wrap_content"
android:layout_weight="0"
android:orientation="vertical">

<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center"
android:padding="@dimen/padding_layout_normal"
android:text="@string/dialog_title_edit_phone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>

<EditText
android:id="@+id/etPhone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center"
android:inputType="phone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvTitle"/>


<Button
android:id="@+id/btnSavePhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etPhone"/>

</android.support.constraint.ConstraintLayout>

我的Activity布局文件(activity_contacts.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v7.widget.RecyclerView
android:id="@+id/rvContacts"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>

这就是我在 Activity 中显示对话框的方式:

PhoneBottomDialog dialog = new PhoneBottomDialog(Context);
dialog.show();

这是我的 PhoneBottomDialog 类:

public class PhoneBottomDialog extends BottomSheetDialog {

public PhoneBottomDialog(Context context) {
super(context);

View view = getLayoutInflater().inflate(R.layout.phone_dialog, null);
setContentView(view);

// additional setup below this...
}

// ...
}

我没有在我的自定义 PhoneButtomDialog 中执行任何其他布局。将我的对话框的根布局更改为 RelativeLayoutLinearLayout 以及添加 ScrollView 并没有改变任何东西。这也不是设备或特定 Android 版本相关的问题,因为该问题出现在我的所有测试设备上,从 Android 5.0 到 7.1,它也出现在模拟器上。

有人知道为什么会这样吗?

最佳答案

您可以使用 TextInputLayout 并在其中定义 Edit Text

我对你的phone_dialog.xml做了一些修改。

phone_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_gravity="bottom"
android:background="@android:color/holo_blue_light"
android:padding="10dp"
app:behavior_hideable="true"
app:behavior_peekHeight="60dp"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">


<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="8dp"
android:gravity="center"
android:padding="10dp"
android:text="dialog_title_edit_phone" />

<android.support.design.widget.TextInputLayout
android:id="@+id/inputPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/TextInputLayoutLabel">

<EditText
android:id="@+id/etPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter phone"
android:imeOptions="actionDone"
android:inputType="phone"
android:maxLines="1"
android:textSize="20sp" />

</android.support.design.widget.TextInputLayout>


<Button
android:id="@+id/btnSavePhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/etPhone"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="8dp"
android:text="Save" />

</LinearLayout>

</FrameLayout>

style.xml 中添加这个。

<style name="TextInputLayoutLabel" parent="Widget.Design.TextInputLayout">
<!-- Hint color and label color in FALSE state -->
<item name="android:textColorHint">@android:color/black</item>
<item name="android:textSize">15sp</item>
<!-- Label color in TRUE state and bar color FALSE and TRUE State -->
<item name="colorAccent">@color/colorPrimary</item>
<item name="colorControlNormal">@color/colorAccent</item>
<item name="colorControlActivated">@color/colorAccent</item>
</style>

PhoneBottomDialog.java

public class PhoneBottomDialog extends BottomSheetDialog {

TextInputLayout inputPhone;
EditText edtPhone;
Button btnSave;

public PhoneBottomDialog(Context context) {
super(context);

View view = getLayoutInflater().inflate(R.layout.phone_dialog, null);
setContentView(view);

// additional setup below this...

inputPhone = (TextInputLayout) view.findViewById(R.id.inputPhone);

edtPhone = (EditText) view.findViewById(R.id.etPhone);
btnSave = (Button) view.findViewById(R.id.btnSavePhone);

btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!validatePhone())
return;
}
});

}

private boolean validatePhone() {
if (edtPhone.getText().toString().isEmpty()) {
inputPhone.setError("Please enter valid phone number with country code.");
requestFocus(edtPhone);
return false;
} else {
inputPhone.setErrorEnabled(false);
}
return true;
}

private void requestFocus(View view) {
if (view.requestFocus()) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}

// ...
}

Activity 中。

@SuppressLint("SetTextI18n")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test24);
mContext = this;

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

PhoneBottomDialog dialog = new PhoneBottomDialog(mContext);
dialog.show();
}

您可以在下面看到它的输出。

enter image description here

关于android - EditText setError 在 BottomSheetDialog 中不合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43951160/

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