2014-11-17 6 views
0

Сегодня я нашел несколько сообщений о том, как отключить фокус EditText. Это было recommed сделать это:Устранение фокуса не работает

Установите фокусирования и focuableInTouchMode истина для родительского компоновщика:

<LinearLayout 
    android:id="@+id/my_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#000000" 
    android:orientation="vertical" 
    android:focusable="true" 
    android:focusableInTouchMode="true" > 

    <EditText 
     android:id="@+id/calc_input" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="numberDecimal" /> 

И использовать это в DialogFragment:

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     this.textEditCalcInput = (EditText) view.findViewById(R.id.calc_input); 
     this.textEditCalcInput.clearFocus(); 

     view.findViewById(R.id.my_layout).requestFocus(); 
    } 

Но к сожалению, это не Работа. Текстовое поле всегда имеет фокус, когда появляется ui.

Итак, как удалить фокус?

Portrait with Keyboard up and AlertDialog up

Landscape with Keyboard up and AlertDialog (in Background)

Здесь я хочу, чтобы AlertDialog быть показаны и клавиатура должны быть скрыты.

+0

Вы попробуйте добавить идентификатор к LinearLayout, найдя его, а затем запрашивает фокус ? Возможно, по какой-то причине он не работает с представлением, которое вы получаете в onViewCreated. – mobilepotato7

+0

Нет, к сожалению, это не решает проблему. Я отредактировал мое сообщение, чтобы показать, что вы рекомендовали – Mulgard

ответ

0

Вместо

android:focusable="true" 
android:focusableInTouchMode="true" 

в использовании LinearLayout:

android:descendantFocusability="beforeDescendants" 
android:focusableInTouchMode="true" 

Обратите внимание, что вы можете также использовать

android:windowSoftInputMode="stateHidden" 

в AndroidManifest.xml.

Другим решением является добавление

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

к OnCreate деятельности для того, чтобы скрыть клавиатуру, когда начинается деятельность.

+0

Это довольно близко к решению. Остается одна проблема, когда я вручную устанавливаю фокус для ввода текста, а затем поворачиваю экран в альбомную. Клавиатура не скрывает, но я хочу. Это диалоговое окно. – Mulgard

+0

Мне жаль, что не было 100% правильно. он скрывает. он не скроется, когда клавиатура встала, передняя панель alertdialog и затем поверните устройство в альбомное. я реализовал предупреждения, которые не исчезают, когда устройство вращается. – Mulgard

+0

Во-первых, Какое из вышеупомянутых решений вы использовали? во-вторых, клавиатура находится в невидимом режиме, когда она не находится в ландшафтном режиме, и когда вы поворачиваете экран, она появляется? Потому что, если она не видна, вращение не должно сделать ее невидимой, если вы не коснетесь другой области, кроме edittext – BzH

0

Попробуйте это в манифесте:

<activity 
     android:name=".YourActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:windowSoftInputMode="stateHidden" > 
    </activity> 

и если не работает, попробуйте это в вашей деятельности:

@Override 
public void onConfigurationChanged(Configuration mConfig) { 
    super.onConfigurationChanged(mConfig); 
    int orientation = getResources().getConfiguration().orientation; 
    switch(orientation) { 
     case Configuration.ORIENTATION_LANDSCAPE: 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     //hide keyboard 

      break; 
     case Configuration.ORIENTATION_PORTRAIT: 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

      //do whatever you want 
      break; 
     default: 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
      //do whatever you want 

      break; 
     } 
} 
Смежные вопросы