8

Mam do czynienia z problemem z pozycją wyskakującą EditTextsetError.KoordynatorLayout zmywa setError popup pozycja

Edit Text Error

Używam następujący kod w celu utworzenia układu:

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> 

Co Próbowałem

Gdybym zmienić android.support.design.widget.CoordinatorLayout z LinearLayoutsetError problem się nie stanie, ale że będzie zmienić kolor paska stanu na białym jeden i mój UI wygląda dziwnie.

Corrected, status bar issue

Jestem nowy w programowaniu na Androida i nie wiem, co się dzieje, proszę mi pomóc.

+0

Spróbuj usunąć 'android: fitsSystemWindows = "true"' –

+0

@AbhishekV: Próbowałem, że czas wystąpił oba błędy (problem z wyskakującymi okienkami i biały pasek stanu) –

+1

Mam ten sam problem i zgłosiłem błąd tutaj https://code.google.com/p/android/issues/list bug # 193793 Czuję się wolny dodawać komentarze! – DSoldo

Odpowiedz

0

Miałem ten sam problem. Testując trochę interfejs użytkownika, stwierdziłem, że problem pojawił się, gdy widżet EditText programowo ustawił fokus, aby pokazać błąd, w moim przypadku wywołując .requestFocus(), ale przy ręcznym ustawieniu ostrości na widżecie popup pojawił się poprawnie.

Tak więc moim obejściem było opóźnienie wywołania do .requestFocus() w trybie Runnable (symulując użytkownika klikającego widżet EditText).

Oto kod:

 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 jest obecny widok EditText pokazać błąd.

W zależności od przypadku użycia może zaistnieć potrzeba ustawienia ostrości, gdy klawiatura zostanie odrzucona, ponieważ spowoduje to ponowne wyświetlenie wyskakującego okienka w niewłaściwym miejscu.

Nie wiem, czy to rozwiąże Twój problem. Mam nadzieję, że pomoże, a Google rozwiąże ten problem.

0

Faktycznie, problem nie jest CoordinatorLayout, ale AppBarLayout.ScrollingViewBehavior. W prosty sposób możesz usunąć linię app:layout_behavior="@string/appbar_scrolling_view_behavior" i dodać android:layout_marginBottom="?attr/actionBarSize" do zagnieżdżonego widoku, jeśli nie potrzebujesz zagnieżdżonego przewijania.

2

Co pracował dla mnie jest dodatkowa LinearLayout w activity_main.xml (tak, nie):

<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> 

Działa to również wokół bug układu, który pokazuje kiedy przełączać widoczność widokiem we fragmencie .

I Kolejnym problemem jest białe na białym komunikatów o błędach w popup na Android 2.x (link)

+0

Myślę, że każdy może z niego korzystać, a nowa wersja będzie produkowana – AEMLoviji