Mid*_* MP 8 android android-linearlayout android-edittext android-coordinatorlayout
我正面临着EditText
setError
弹出位置的问题.
我正在使用以下代码来创建布局:
activity_profile.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context=".ProfileActivity"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/profile" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
是profile.xml
<RelativeLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ProfileActivity"
tools:showIn="@layout/activity_profile">
<EditText
android:id="@+id/etProfileName"
android:layout_width="match_parent"
android:layout_height="50dp"
android:capitalize="words"
android:hint="@string/et_hint_profile_name"
android:textAlignment="center" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我试过了什么
如果我改变了android.support.design.widget.CoordinatorLayout
与LinearLayout
该setError
问题不会发生,但将在状态栏颜色更改为白色的,我的UI正在奇怪.
我是Android编程的新手,不知道发生了什么,请帮助我.
我有同样的问题。测试了一点 UI,我发现当 EditText 小部件以编程方式获得焦点以显示错误时出现问题,在我的例子中调用.requestFocus()
,但是当再次手动聚焦小部件时,弹出窗口显示正确。
所以我的解决方法是延迟.requestFocus()
对 Runnable 的调用(模拟用户单击 EditText 小部件)。
这是代码:
if (mFocusView != null) mFocusView.clearFocus(); // clear current focus. Needed to simulate a new "manual" focus
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
final Handler handler = new Handler();
final boolean b = handler.postDelayed(new Runnable() {
@Override
public void run() {
mFocusView.requestFocus(); // request focus
}
}, 1); // only delay 1 milisecond
}
});
Run Code Online (Sandbox Code Playgroud)
mFocusView
是当前的 EditText 视图来显示错误。
根据您的使用情况,您可能需要在键盘关闭时处理焦点,因为它会使弹出窗口再次出现在错误的位置。
不知道这是否能解决您的问题。希望谷歌解决这个问题时它能有所帮助。
归档时间: |
|
查看次数: |
1898 次 |
最近记录: |