2017-06-11 3 views
0

Ich habe eine ImageView und darunter einen EditText. Ich möchte in der Lage sein, in den EditText zu schreiben, während ich das ImageView ansehe. Der EditText ist zu diesem Zeitpunkt nicht sichtbar. Hat jemand eine Idee, wie man das erreicht? Ich habe es mit einem TextWatcher versucht, aber das scrollTo im afterTextChanged hat nicht funktioniert.Android: Scrollen in afterTextChanged funktioniert nicht

myImageView.setImageBitmap(myImageBitmap); 
TextWatcher textWatcher = new TextWatcher() { 
    int xBefore; 
    int yBefore; 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     yBefore = myScrollView.getScrollY(); 
     xBefore = myScrollView.getScrollX(); 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     myScrollView.scrollTo(xBefore, yBefore); 
    } 
}; 
myEditText.addTextChangedListener(textWatcher); 

Die xml sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/myScrollView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<LinearLayout 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="ch.ethz.somr.smartphonebattle.FastestCameraActivity" 
    android:orientation="vertical"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/myImageView" 
     android:scaleType="fitStart" 
     android:adjustViewBounds="true"/> 

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

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/myEditText" 
      android:inputType="number" 
      android:hint="@string/my_hint"/> 

    </LinearLayout> 

</LinearLayout> 
</ScrollView> 
+0

Ich habe nicht zu viel in diese, aber hier sind ein paar Punkte zu prüfen: 1. Stellen Sie sicher, dass die vor und nach Text ändern Methoden tatsächlich genannt werden 2. Wenn Ihr Ziel ist, das Bild zu halten In Anbetracht dessen könnte es am besten sein, einen "fließenden" Bearbeitungstext zu erstellen, der direkt über der Tastatur oder der virtuellen Tastatur sitzt. Dies befindet sich außerhalb Ihrer scrollView, aber immer im Blick, was Ihr Problem lösen und einfacher zu verwenden sein kann. –

Antwort

0

Ich fand heraus, dass mein Code funktioniert, wenn Sie für eine kurze Zeit in der afterTextChanged warten, das heißt wie, dass es funktioniert:

Runnable myRunnable = new Runnable() { 
    @Override 
    public void run() { 
     findViewById(R.id.fast_scrollView).scrollTo(xBefore, yBefore); 
    } 
}; 

@Override 
public void afterTextChanged(Editable s) { 
    Handler handler = new Handler(); 
    handler.postDelayed(myRunnable, 10); 
} 
Verwandte Themen