2014-09-14 2 views
2

Я создаю пользовательский интерфейс для моей компании, у которого есть текст редактирования сверху и макет кадра внизу. эта рамка-макет содержит микрофонное изображение и анимацию при нажатии, из которых она проходит через 3 основных состояния, таких как listen.thinking и режим ожидания. Таким образом, пользователь может предоставить запрос либо путем ввода текста редактирования, либо путем предоставления команды по голосу. Моя проблема возникает, когда пользователь нажимает на edit-text для предоставления текстовой команды. Когда пользователь делает это, клавиатура Android появляется и пользователь вводит текст, но после ввода текста, если пользователь нажимает кнопку «Назад», весь пользовательский интерфейс появляется перед спуском. Все это происходит очень быстро, и пользователю он производит плохое впечатление. Похоже, что пользовательский интерфейс застревает, но по умолчанию он работает с Android. Есть ли способ, которым я могу остановить это мерцание или сделать этот ход плавно.?UI мерцает при нажатии на андроид

В настоящее время я делаю этот макет кадра невидимым, когда пользователь начинает редактирование и видно, когда пользователь закончил редактирование, но это также не помогает.

Я знаю, что, не предоставляя полный код, это не является хорошим способом задать сомнение.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainLayout" 
    style="@style/main_style_mainLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <RelativeLayout 
     android:id="@+id/dialog" 
     style="@style/main_style_dialog" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <LinearLayout 
      android:layout_width="360dp" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

      <ScrollView 
       > 

       <!--will dynamically add here widgets and edit text button as required> 

       <LinearLayout 
        android:id="@+id/linearLayout" 
        style="@style/main_style_scrollViewlinearLayout" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" > 
       </LinearLayout> 

      </ScrollView> 
     </LinearLayout> 
    </RelativeLayout> 

    <FrameLayout 
     android:id="@+id/mainControlLL" 
     style="@style/main_style_mainControlLL" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > // Act as parent container for mic image and text view 

     <FrameLayout> //contains text view which gets displayed on top of mic image 

      <TextView/> 
     </FrameLayout> 

     <FrameLayout 
      android:id="@+id/mic_btn_layout" 
      style="@style/main_style_mic_btn_layout" 
      android:layout_width="wrap_content" 
      android:layout_height="118dp" >// contains mic images 

      <FrameLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:clipChildren="false" >// contains mic image for listening state 

       <ImageView/>    
       <ImageButton /> 
       <ImageButton/> 
       <ImageView /> 

      </FrameLayout> 

      <RelativeLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal|center_vertical|center" >//contain mic images for thinking state 
       <ImageButton /> 
       <ImageButton /> 

       <ImageView /> 
      </RelativeLayout> 

      <ImageButton />//contains mic image for idle state 
     </FrameLayout> 
    </FrameLayout> 

</RelativeLayout> 

И в моем манифесте У меня есть

android:windowSoftInputMode="stateAlwaysHidden|adjustResize" and 
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|locale" 

Пожалуйста, дайте мне знать, как я могу исправить свое поведение пользовательского интерфейса.

+0

У любого есть идеи, как это сделать? –

+0

Вы что-то делаете в 'onConfigurationChanged'? Правильно ли работает 'adjustResize'? (т. е. ваш макет устанавливается в оставшееся пространство после отображения клавиатуры). Также без позиций и ширины/высоты в макете я не могу воспроизвести ваш случай. Можете ли вы разместить макет, который имеет все расположение/размеры, а также содержит набор типично отображаемых (динамически добавленных) виджетов? – Gyebro

+0

У меня есть getWindow(). AddFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN); в onCreate. Если я удалю этот пользовательский интерфейс, он не мерцает, но рамка, содержащая часть микрофона, выходит за клавиатуру. И мне нужен полный экран. –

ответ

1

Ниже приведена API, которую я изменил, чтобы перестать мерцать.

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
     this.clearFocus(); 
     //Fix- Ui Flicker 
     // this.setFocusable(false); 
     // this.setFocusableInTouchMode(false);   
     return false; 
    } 
    return super.dispatchKeyEvent(event); 
} 

В вышеприведенном API я прокомментировал фрагмент кода, показанный выше. Но может ли кто-нибудь объяснить, почему он вызывает прыжки (вверх) UI. Это было отключением фокуса.

+0

Хотя он разрешил мою проблему, но я не знаю, почему это произошло. Может кто-то объяснить это. ? –

1

Вы должны поместить свое состояние активности в стек, поскольку вы используете фрагменты (подробнее об этом here) и переопределите функцию onBackPressed() и восстановите там состояние фрагмента.

+0

. Я уже использовал это, но не решил проблему. –

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