2017-09-20 34 views
9

Oto: dwa działania z przejściem do elementu współużytkowanego (przycisk). Drugi Activity ma TextInputLayout z nutą:Problem związany z przejściem do elementu współdzielonego TextInputLayout

<LinearLayout 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="match_parent" 
       android:focusable="true" 
       android:focusableInTouchMode="true" 
       android:gravity="center_horizontal" 
       android:orientation="vertical"> 

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:text="GO" 
      android:transitionName="test"/> 

    <android.support.design.widget.TextInputLayout android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:hint="WTF?!"> 
     <android.support.design.widget.TextInputEditText android:layout_width="match_parent" 
                 android:layout_height="wrap_content"/> 
    </android.support.design.widget.TextInputLayout> 
</LinearLayout> 

Przejście wprowadzić drugiego Activity jest opóźniony o wyjaśnienie problemu: Podpowiedź z TextInputLayout ignoruje animację przejścia i wyświetlane natychmiast po przejściu jest uruchomiona. Na końcu animacji możesz zobaczyć prawidłowo animowane tło EditText (linia pozioma) pod wskazówką. Czy to błąd, czy też coś mi brakuje? Oto drugi Activity:

public class SecondActivity extends AppCompatActivity { 

    public static void launch(Activity activity, View sharedElement) { 
     Intent intent = new Intent(activity, SecondActivity.class); 

     ActivityOptionsCompat options = ActivityOptionsCompat. 
       makeSceneTransitionAnimation(activity, sharedElement, "test"); 
     activity.startActivity(intent, options.toBundle()); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      getWindow().setEnterTransition(new Slide().setDuration(5000)); 
     } 
    } 
} 

EDIT: Ten błąd może być „stałym”, dodając tło układ Drugie działanie użytkownika.

without backgroundwith background

+0

Jaki jest twój element współdzielony? Czego oczekujesz? – azizbekian

+0

Współdzielonym elementem jest przycisk, jak widać na przykładzie kodu. Oczekuje się, że wskazówka TextInputLayout jest odpowiednio animowana jako część przejścia Activity, podobnie jak reszta widoku (spójrz na właściwe przejście tła EditText w filmie wideo). – artkoenig

+0

Proszę, wyjaśnij swoje pytanie. Twój animowany GIF wygląda ładnie, mamy go. To całkiem fajna animacja. Ale nie rozumiem, o co chodzi? gdzie to jest? Co widzę, jeśli niebieska linia porusza się w górę. To wszystko. Następnie pod polem wprowadzania pojawia się krótka linia migania. Czy to jest oczekiwane? Czy nie jest to oczekiwane? Wtf? – babay

Odpowiedz

0

myślę swój błąd z TextInputLayout. Usunąłem go i podałem podpowiedź do TextInputEditText i działało zgodnie z oczekiwaniami.

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

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="GO" 
     android:transitionName="test" /> 


    <android.support.design.widget.TextInputEditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="WTF?!" /> 

</LinearLayout> 
0

Wydaje się być błędem. Przesłałem new issue.

Można tego uniknąć, definiując android:background dla drugiego działania.

0

dla API 21+

android:transitionGroup="true" 

Dodaj tę linię w TextInputLayout. To by to naprawiło. Lub jeśli masz kilka TextInputLayout, a następnie dodaj tę linię do swojego kontenera.