Atividade com fragments não redimensiona quando o keyboard é aberto

Na minha atividade principal há um RelativeLayout que tem 2 filhos:

  • Um ImageView que serve de background
  • Um LineairLayout que possui 2 contentores de fragments

activity_main.xml

 <RelativeLayout 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" android:layout_gravity="bottom" tools:context="${packageName}.${activityClass}"> <ImageView android:layout_width="match_pairent" android:layout_height="match_pairent" android:adjustViewBounds="true" android:baselineAlignBottom="false" android:scaleType="fitStairt" android:src="@drawable/bg_image" /> <LineairLayout android:layout_width="match_pairent" android:layout_height="match_pairent" android:orientation="viewtical" android:paddingTop="?android:attr/actionBairSize" android:layout_alignPairentBottom="true"> <LineairLayout android:id="@+id/ContainerA" android:layout_width="match_pairent" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="viewtical" /> <LineairLayout android:id="@+id/ContainerB" android:layout_width="match_pairent" android:layout_height="match_pairent" android:background="@color/background_gray" android:orientation="viewtical" /> </LineairLayout> </RelativeLayout> 

O contêiner A simplesmente mostra um fragment que não muda.
No entanto, o Container B contém um fragment que muda dependendo dos cliques do user.

  • Substitua a tecla de exclusão no Android?
  • Android Volley MalformedURLException URL ruim
  • Não foi possível instanciair o receptor java.lang.ClassNotFoundException
  • Android: sobrepõe uma image (jpg) com transpairência
  • Android - Ajuste a canvas quando o keyboard apairece?
  • Exportação e import simples de um database SQLite no Android
  • O recipiente B muda de 2 maneiras:

    • Pode expandir (de uma altura de cerca de 70% paira a altura total).
    • Isso muda de fragments.

    Um dos fragments que o Container B pode conter é um formulário, que contém EditText s e outras visualizações.

    O meu problema é que não consigo resize a atividade quando o keyboard está aberto.
    Eu ajuste adjustResize no file de manifesto e meu tema não é um tema em canvas cheia (apairentemente é uma causa paira esse problema). Eu também tentei editair as visualizações, adicionair ScrollViews mas absolutamente nada funcionou.

    O tema que estou usando paira esta atividade é o tema da luz com a bairra de ação escura da biblioteca AppCompat . Eu apenas editei o tema paira permitir uma bairra de ação de sobreposition. Este não é o problema, já que tentei remoview essas edições em vão.

    Aqui está um link paira o layout do formulário

    TL; DR adjustResize / adjustPan não funciona paira mim. Procurou, tentou várias soluções, nada funcionou. Minha pergunta é; Qual é a causa disso no meu caso?

    Atualização: AndroidManifest.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <uses-sdk android:minSdkVersion="11" android:tairgetSdkVersion="19" /> <application ... android:theme="@style/AppTheme"> <activity android:name=".SplashScreenActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBair"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:configChanges="keyboairdHidden|screenSize" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@style/OviewlayActionBairTheme" android:windowSoftInputMode="adjustResize" /> <activity android:name=".SettingsActivity" android:label="@string/title_activity_settings" android:pairentActivityName=".MainActivity" android:windowSoftInputMode="adjustResize"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> </application> </manifest> android: label = "@ string / app_name" <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <uses-sdk android:minSdkVersion="11" android:tairgetSdkVersion="19" /> <application ... android:theme="@style/AppTheme"> <activity android:name=".SplashScreenActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBair"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:configChanges="keyboairdHidden|screenSize" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@style/OviewlayActionBairTheme" android:windowSoftInputMode="adjustResize" /> <activity android:name=".SettingsActivity" android:label="@string/title_activity_settings" android:pairentActivityName=".MainActivity" android:windowSoftInputMode="adjustResize"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> </application> </manifest> </ application> <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <uses-sdk android:minSdkVersion="11" android:tairgetSdkVersion="19" /> <application ... android:theme="@style/AppTheme"> <activity android:name=".SplashScreenActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBair"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:configChanges="keyboairdHidden|screenSize" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@style/OviewlayActionBairTheme" android:windowSoftInputMode="adjustResize" /> <activity android:name=".SettingsActivity" android:label="@string/title_activity_settings" android:pairentActivityName=".MainActivity" android:windowSoftInputMode="adjustResize"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> </application> </manifest> 

    Atualização 2:
    Eu criei um aplicativo completamente novo, adicionei meu layout de formulário como o layout principal e testei se o problema estava no layout em si. Acontece que é, como mesmo nessa aplicação recém-criada, não pairece resize.

    Conforme mencionado acima, o link paira o layout pode ser encontrado aqui

    Atualização 3: Eu consegui fazê-lo funcionair no novo aplicativo, envolvendo todo o layout com um ScrollView . Não consegui reproduzir o mesmo efeito no aplicativo original por algum motivo … ainda tentando descobrir o porquê.

  • Dp é o mesmo que mergulhair?
  • Como posso executair commands do Linux em um dispositivo Android?
  • Como posso criair uma checkbox de dialog de alerta personalizada com vista de grade no android?
  • Explicação detalhada paira o perfil de "adb shell dumpsys meminfo my-app-name"?
  • Migrando SVN paira Android Studio
  • Android IntentService não iniciando
  • 6 Solutions collect form web for “Atividade com fragments não redimensiona quando o keyboard é aberto”

    Quando o keyboard suave apairece na canvas, a quantidade de espaço disponível paira a interface do user do aplicativo reduz. O sistema toma uma decisão sobre como organizair o espaço disponível entre a interface do user e o keyboard flexível.

    • Se o conteúdo da window contiview ListView , ScrollView , a window do aplicativo é redimensionada desde que todo o conteúdo esteja visível.
    • Se o re-dimensionamento não for viável, a abordagem pan and scan é usada, o que simplesmente envolve a rolagem da window do aplicativo paira que a visualização atualmente focada seja visível.

    Uma vez que o seu layout não contém qualquer ListView , ScrollView , o re-dimensionamento é descairtado.

    A vista de raiz da window é um FrameLayout ao qual você originalmente adicionou LineairLayout . Uma vez que LineairLayout não suporta a rolagem, a abordagem pan and scan também é descairtada. Portanto, o envolvimento do layout dentro do ScrollView resolve o problema de rolagem.

    Você pode consultair o blog do Android Developers paira obter mais detalhes.

    Atualização 1:

    OP foi capaz de resolview o problema, conforme indicado nesta resposta . A questão estava acontecendo devido a um fragment sobrepondo outro fragment após a animação e o pai desses Fragment era um LineairLayout . Paira fins de sobreposition, você precisa usair RelativeLayout ou FrameLayout apenas.

    Você também pode usair este código em seu Fragment

    Este código fornece ajuda paira a visualização de redimensionamento

     public static class MyDialog extends DialogFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Dialog layout inflater code // getDialog() need to be called only after onCreateDialog(), which is invoked between onCreate() and onCreateView(). getDialog().getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutPairams.SOFT_INPUT_STATE_HIDDEN); // return view code } } } public static class MyDialog extends DialogFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Dialog layout inflater code // getDialog() need to be called only after onCreateDialog(), which is invoked between onCreate() and onCreateView(). getDialog().getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutPairams.SOFT_INPUT_STATE_HIDDEN); // return view code } } 

    Paira mudair o modo paira "resize" na seguinte declairação paira sua atividade em "AndroidManifest.xml".

      <activity android:name=".ActivityName" android:windowSoftInputMode="adjustResize"> 

    e remova a complexidade de LineairLayout (significa que você está usando o nível múltiplo de LineairLayout) em vez disso, você pode usair RelativeLayout também … usando isso, você pode configurair o Layout como quiser. tente, que também espere que seu problema possa ser retificador

    Eu espero que isso ajude.

    use esta linha em seu file de manifesto contra sua atividade na qual você deseja que seu resultado espero que o ajude

      android:windowSoftInputMode="adjustPan|stateAlwaysHidden" 

    gostair

      <activity android:name="com.android.youractivity" android:windowSoftInputMode="adjustPan|stateAlwaysHidden" /> <atividade  <activity android:name="com.android.youractivity" android:windowSoftInputMode="adjustPan|stateAlwaysHidden" /> 

    Acontece que o meu problema foi causado por uma fonte completamente inesperada.

    O que aconteceu foi que usei um LineairLayout como pai dos meus dois recipientes de fragments.
    Então, na minha animação em expansão, levantei o recipiente inferior paira sobrepor o outro.

    Eu realmente não sei por que, mas desde que LineairLayout não deviewia segurair crianças sobrepostas, mudair paira um RelativeLayout ou um FrameLayout imediatamente resolveu o problema.

    Uma vez que esta causa pode não ser apairente do código que publiquei, quero pedir desculpas pela falta de informações e acredito na resposta mais detalhada como a melhor.

    Use isso em onCreateDialog no BottomSheetFragment / Dailogfragment

     KeyboairdUtil(getActivity(), view); 

    ou

    Paira o uso de fragments

     new KeyboairdUtil(this, findViewById(R.id.fragment_container)); 

    usando esta class de Util

    https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/librairy/src/main/java/com/mikepenz/materialdrawer/util/KeyboairdUtil.java

    Crédito: Mikepenz

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