8

Ich habe ein Problem mit EditTextsetError Popup-Position.KoordinatorLayout verwirrend SetError Popup-Position

Edit Text Error

Ich verwende den folgenden Code in das Layout zu erstellen:

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> 

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> 

Was ich

versucht haben, wenn ich die android.support.design.widget.CoordinatorLayout mit LinearLayout die setError Problem passieren wird sich nicht ändern, aber das wird die Statusleiste Farbe auf Weiß ein und meine UI sucht ungerade ändern.

Corrected, status bar issue

Ich bin neu auf Android-Programmierung und nicht sicher, was los ist, bitte helfen Sie mir.

+0

Versuchen Entfernen 'android: fitsSystemWindows = "true"' –

+0

@AbhishekV: versuchte ich, dass die Zeit beide Fehler auftreten (Popup-Problem und Statusleiste weiße Farbe Problem) –

+1

Ich habe das gleiche Problem, und ich habe den Fehler hier gemeldet https://code.google.com/p/android/issues/list Bug # 193793 fühlen sich frei Kommentare hinzufügen – DSoldo

Antwort

0

Ich hatte das gleiche Problem. Ich habe ein wenig die Benutzeroberfläche getestet und festgestellt, dass das Problem auftrat, als das Widget "EditText" den Fokus programmatisch auf den Fehler lenkte, in meinem Fall .requestFocus(), aber wenn ich mich wieder manuell auf das Widget konzentrierte, erschien das Popup korrekt.

So war meine Problemumgehung, um den Anruf auf .requestFocus() in einem ausführbaren zu verzögern (Simulieren eines Benutzers, der auf das Widget EditText klickt). Hier

ist der Code:

 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 
      } 
     }); 

mFocusView ist die aktuelle EditText Ansicht, die einen Fehler zu zeigen.

Abhängig von Ihrem Anwendungsfall müssen Sie möglicherweise den Fokus behandeln, wenn die Tastatur geschlossen wird, da dies das Popup erneut an der falschen Position erscheinen lässt.

Weiß nicht, ob dies Ihr Problem lösen wird. Hoffe es hilft, während Google dieses Problem löst.

0

Eigentlich ist das Problem nicht die CoordinatorLayout, aber AppBarLayout.ScrollingViewBehavior. Als eine einfache Problemumgehung können Sie die Zeile app:layout_behavior="@string/appbar_scrolling_view_behavior" entfernen und android:layout_marginBottom="?attr/actionBarSize" zu Ihrer verschachtelten Ansicht hinzufügen, wenn Sie geschachteltes Bildlauf nicht benötigen.

2

Was für mich gearbeitet ist ein zusätzliches Linearlayout in activity_main.xml (ja, es):

<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:id="@+id/activityRoot" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.example.biptest.MainActivity"> 

    <!-- *** THIS ONE *** --> 
    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/appbar" 
     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/content_main" /> <!-- FRAGMENT(S) INSIDE --> 

    </LinearLayout> 
    <!-- *** BUT LEAVE THE FAB ALONE *** --> 

    <android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="@dimen/fab_margin" 
    android:src="@android:drawable/ic_dialog_email" 
    android:visibility="gone" 
    /> 

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

Dies auch um das Layout Fehler funktioniert, das zeigt, wenn Sie die Sichtbarkeit einer Ansicht in einem Fragmente wechseln .

Und das nächste Problem ist, weiß-auf-Weiß-Fehlermeldungen in dem Pop-up auf Android 2.x (link)

+0

Ich denke, dass jeder es benutzen kann, während der neue Build in der Produktion sein wird – AEMLoviji