2015-05-29 4 views
1

У меня есть простая MainActivity, где ориентация меняется от портрета к пейзажу и обратно к портрету. На моем экране SecondActivity есть текстовое поле с кнопкой EditText для ввода пользователем. К сожалению, при изменении ориентации от портрета к пейзажу макет не меняется должным образом. Кажется, он не переносится в ландшафтный режим. Текстуры, фоновые цвета и панель инструментов файла макета не загружаются. Отображается только подсказка EditText, а фоновый цвет - белый. Я тестировал на Samsung Galaxy S3 и эмулятор Genymotion с таким же плохим результатом. Наконец, когда устройство или эмулятор повернуты назад к портрету, макет представления загружается правильно ... все отображается правильно, как на оригинальном портрете. Что мне здесь не хватает?Android: почему большая часть макета исчезает при изменении ориентации?

SecondActivity Java файл:

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

EditText Java файл:

public class ListenerEditText extends EditText {  
... 

Layout XML файл:

... 
<LinearLayout 

    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_weight="1" 
    android:background="#FF0000" > 

    <TextView 
     android:id="@+id/createSkycard" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#FFFFFF" 
     android:layout_marginTop="20dp" 
     android:gravity="center_horizontal" 
     android:text="Create a skycard" 
     android:textAppearance="?android:attr/textAppearanceMedium"/> 


</LinearLayout> 


<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_weight="1" 
    android:background="#FF0000"  > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#FFFFFF" 
     android:text=" To Do item: " 
     android:textAppearance="?android:attr/textAppearanceMedium"/> 

<com.example.jdw.secondscreen.ListenerEditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/CEditText" 
     android:inputType="text|textCapSentences|textNoSuggestions" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:hint="Type a new item here" 
     android:textColor="#000000" 
     android:singleLine="true" 
     android:imeOptions="actionNext" > 

     <requestFocus /> 
    </com.example.jdw.secondscreen.ListenerEditText> 
... 

ответ

0

Убедитесь, что в момент изменения ориентации, курсор не находится внутри edittext. Мне кажется, что ваша активность загружается курсором, уже установленным для начала ввода, поэтому, когда вы меняете ориентацию, вы видите только внутри EditText с подсказкой и готовы что-то напечатать.

Теперь, если вы хотите, чтобы он вел себя так, зависит от вас.

+1

Вы можете отключить это, как показано в этом сообщении: http://stackoverflow.com/questions/4336762/disabling-the-fullscreen-editing-view-for-soft-keyboard-input-in-landscape – joaortk

+0

Я думаю, вы правильны, активность загружается курсором все еще в EditText, и я вижу только EditText с подсказкой. Однако я хочу повторно загрузить полный макет, даже если курсор все еще находится в EditText. Это произойдет, если пользователь начнет вводить текст, который будет отображаться на линии EditText, а затем пользователь решит изменить ориентацию, а затем закончить ввод текста в этой строке EditText. Мне интересно, если здесь код в EditText вызывает проблемы. Есть предположения? – AJW

+0

Я не уверен, получил ли я то, что вы хотите выполнить, но для меня у вас есть два варианта: заставить Edittext потерять фокус или попробовать решение, которое я опубликовал в предыдущем комментарии, показывая, как отключить полноэкранный edittext. – joaortk

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