13

我的问题是我的 EditTexts 中的错误消息在操作栏顶部滚动。这是一个android错误,还是我做错了什么?

即使在键盘关闭时也会发生此错误,它恰好在屏幕截图中出现。

这就是我所说的:http: //imgur.com/fG8bd3E,uFzhOXa#1 <- 有两个图像

这是我的布局,我将代码中的 EditTexts 添加到 kiosk_form_table LinearLayout

<ScrollView
    style="@style/DefaultBackground"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.6"
    android:fadeScrollbars="false"
    android:padding="20dp" >

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

        <LinearLayout
            android:id="@+id/kiosk_form_table"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" />

        <Button
            android:id="@+id/kiosk_submit_large"
            style="@style/LoginButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:onClick="submit"
            android:text="@string/submit" />
    </LinearLayout>
</ScrollView>

我如何添加 EditTexts

kiosk_form.addView(getKioskRow(R.layout.kiosk_text_row, "First Name", true, null));

private View getKioskRow(int layout, String header, boolean required, String buttonName)
{
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(layout, null);
    view.setTag(required);
    addHeader((TextView) inflater.inflate(R.layout.field_header, null), header);
    if (required)
        ((TextView) view.findViewById(R.id.kiosk_input)).setHint("Required");
    if (buttonName != null)
        ((Button) view.findViewById(R.id.kiosk_input_button)).setText(buttonName);
    return view;
}

private void addHeader(TextView view, String header)
{
    view.setTag(false);
    view.setText(header);
    kiosk_form.addView(view);
}

我如何设置错误

(TextView) view).setError(getString(R.string.error_field_required));
4

4 回答 4

4

这是Android操作系统错误。您可以在此处跟踪其进度

于 2016-02-17T16:31:13.610 回答
3

我有同样的问题。像这样解决它:

private void processingErrorPopupsWhenScrolling(Rect scrollBounds, TextInputEditText... views) {
    boolean isViewInFocus = false;
    for (TextInputEditText textInputEditText : views) {
        if (textInputEditText.getError() != null) {
            if (textInputEditText.getLocalVisibleRect(scrollBounds)) {
                textInputEditText.setVisibility(View.VISIBLE);

                if (!isViewInFocus) {
                    textInputEditText.requestFocus();
                    isViewInFocus = true;
                }
            } else {
                textInputEditText.setVisibility(View.INVISIBLE);
            }
        }
    }
}

// in onCreate(){
Rect scrollBounds = new Rect();
mScrollView.getHitRect(scrollBounds);

mScrollView.getViewTreeObserver().addOnScrollChangedListener(() ->
        processingErrorPopupsWhenScrolling(scrollBounds,
                mLink,
                mTitle,
                mPrice)
);}
于 2019-05-08T13:22:23.940 回答
1

我通过设置标志解决了类似的问题

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
于 2015-11-18T19:47:05.533 回答
0

你想在哪里看到错误信息?如果你想在 EditText 上设置它,在 editText 上设置它。

((EditText) findViewByID(R.id.my_edit_text)).setError ...... // and so on

编辑:原始答案没有帮助。

这是一种可能的解决方案:您可以在用户滚动视图时隐藏错误消息。滚动完成后,您可以重新设置错误消息,它应该出现在正确的位置!以下是如何检测滚动何时结束: Android:如何检测滚动何时结束

于 2013-06-24T01:21:13.687 回答