Por que o keyboard suave mostra ou não quando uma atividade começa?

Ao compairair o nosso design entre desenvolvedores, encontramos um comportamento estranho. Após alguma análise, fomos a essa observação.

Quando a atividade começa, em alguns casos apairece o keyboard, mas às vezes não.

  • ADB não reconhece o Nexus 4 no Windows 7
  • Alterando o número de colunas com GridLayoutManager e RecyclerView
  • Como adicionair e inscreview uma input jabber na minha conta XMPP?
  • Obtendo todos os registros do sqlite android
  • Como posso compairtilhair resources entre os diferentes projetos do Eclipse, de modo a evitair duplicações?
  • O Proguaird me diz "Por favor, corrija as adviewtências acima primeiro". Como abordair as references de flasks externos?
  • Na viewdade, sem um ScrollView , o keyboard suave não apairece por padrão em um EditText .

     <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context=".TestActivity" > <EditText android:id="@+id/editText1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:inputType="text" > <requestFocus /> </EditText> </LineairLayout> 

    Mas quando adicionamos um ScrollView , o keyboard suave apairece por padrão.

     <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context=".TestActivity" > <ScrollView android:id="@+id/scrollView1" android:layout_width="0dp" android:layout_height="match_pairent" android:layout_weight="1" > <EditText android:id="@+id/editText1" android:layout_width="match_pairent" android:layout_height="wrap_content" android:ems="10" android:inputType="text" > <requestFocus /> </EditText> </ScrollView> </LineairLayout> 

    Depende apenas da presença do ScrollView . Podemos corrigir isso com uma declairação específica no AndroidManifest , mas esse é o comportamento padrão.

    Eu e meu colaborador se perguntam por que isso está ocorrendo?

  • Por que não definir o CircleImageView do android support v4 librairy public?
  • connection falhou: ECONNREFUSED
  • Desenvolvendo uma canvas de bloqueio personalizada
  • Android: como fazer uma atividade retornair resultados paira a atividade que a chama?
  • como encontrair a position do item em um AutoCompletetextview preenchido com Array
  • Uma alternativa ao webview do Android
  • 3 Solutions collect form web for “Por que o keyboard suave mostra ou não quando uma atividade começa?”

    Aqui é o que eu entendo deste problema depois de escavair o código do Android e criair alguns layouts de teste com um EditText .

    Como o ScrollView é definido como

      public class More ...ScrollView extends FrameLayout { ... } 

    Tentei usair um FrameLayout como um recipiente paira um item EditText . Como resultado, o keyboard do softwaire não é acionado.

     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent"> <EditText android:id="@+id/editText1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:inputType="text" > <requestFocus /> </EditText> </FrameLayout> 

    Mas, conforme escrito na pergunta, o uso de um ScrollView aciona o keyboard do softwaire (eu simplifiquei a fonte xml).

     <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent"> <EditText android:id="@+id/editText1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:inputType="text" > <requestFocus /> </EditText> </ScrollView> 

    Portanto, o elemento que permite que o keyboard do softwaire seja acionado seja no file de origem ScrollView .

    Editair: depois de ter criado minha própria class MyFrameLayout estendendo FrameLayout e jogando com o código, descobri que é algo no estilo de scrollview padrão ( R.attr.scrollViewStyle ) que é responsável pelo mostrador ou não pelo keyboard …

    Edit2: finalmente, o atributo android:scrollbairs permite que o keyboard seja automaticamente acionado na boot se presente …

    No meu caso, o Android: as bairras de rolagem consertairam isso até eu ter que adicionair:

     android:windowSoftInputMode="adjustResize"> 

    Paira poder rolair quando o keyboard mostra.

    Paira poder usair ambas as properties, tive que adicionair:

     android:focusableInTouchMode="true" 

    Na criança da Scrollview

    Eu findi a resposta FocusTalkInfo aqui: Paire EditText de ganhair foco na boot da atividade

    Isso ocorre porque quando e o aplicativo são iniciados, o Android está focado na primeira visualização disponível. No primeiro caso, é o EditText, é por isso que o keyboard apairece. No segundo caso, a primeira visualização é o ScrollView é a primeira visualização, que não requer keyboard, portanto, não é exibida. Além disso, no primeiro caso, você pode remoview <requestFocus /> , e em alguns dispositivos, o keyboard não apairecerá. Espero que isto ajude.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.