2013-09-28 4 views
0

У меня есть счетчик строк для пользователя в моем приложении к блокноту. Однако, когда приложение находится в режиме пейзажа и портрета, количество текста в EditText занимает меньше места, таким образом, меньше линий; поэтому счетчик строк должен обновляться при повороте.Получение getCountLine() для работы при повороте экрана

Вот что я сделал, чтобы решить эту проблему:

я добавил следующий метод для моего класса, и я добавил это к моей деятельности в моем манифесте: android:configChanges="orientation|screenSize"

Я проверил его и его проходит через метод, когда экран вращается.

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 

    TextView linesDisplay = (TextView)findViewById(R.id.linesDisplay); 
    EditText editText = (EditText)findViewById(R.id.editText); 

    editText.setText("" + editText.getText().toString()); // this was just a test to see if the Edit Text needed to be "internally constructed" 
    linesDisplay.setText("Lines: " + editText.getLineCount()); 

} 

Я написал 5 строк на портрете, и он отобразил «Линии: 5» просто отлично. Затем, когда я повернулся к пейзажу, он остался на «Линии: 5» (когда он был на самом деле 4 строки на пейзаже). Вернулся снова к портрету, теперь он перешел на «Линии: 4». Опять же, вернувшись к пейзажу, он отправился в «Линии: 5».

Кажется, что каждый раз, когда я вращаюсь, он отображает количество линий в ориентации до. То есть будет отображаться портрет № линий при повороте в ландшафт, затем пейзажи # строк при повороте назад к портрету и т. Д.

Р -> "Линия: 5" (правильный)
L -> "Линия: 5" (должна быть 4)
Р -> "Линия: 4" (должно быть 5)
L -> «Линии: 5» (должно быть 4)
...

^он работает так же, как если бы я начал с пейзажа и продолжал вращаться назад, он будет один сзади (после первого поворота), как и выше.

Любая помощь? Я предполагаю, что это потому, что он работает через мой код до этого фактически вращается, поэтому количество строк стоит за тем, что должно быть. Есть ли способ запустить мой код после того, как он уверен, что экран полностью повернут?

ответ

1

Поместите это в onCreate метод:

final View view = findViewById(R.id.idOfView); 
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
{ 
    @Override 
    public void onGlobalLayout() 
    { 
     TextView linesDisplay = (TextView)findViewById(R.id.linesDisplay); 
     EditText editText = (EditText)findViewById(R.id.editText); 
     linesDisplay.setText("Lines: " + editText.getLineCount()); 
    } 
}); 

И в вашем XML:

В свойствах компоновки родительских, добавьте это: android:id="@+id/idOfView"

Так, например:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/idOfView" 
    android:windowSoftInputMode="adjustResize" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
     <!-- widgets --> 
    </RelativeLayout> 
</ScrollView> 

или это:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/idOfView" 
    android:windowSoftInputMode="adjustResize" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <!-- widgets --> 
</LinearLayout> 

partial reference

Смежные вопросы