0

J'utilise une bibliothèque externe appelée DragListViewhere. Ce DragListView étend un FrameLayout et il contient un RecyclerView à l'intérieur. La structure est similaire:Android - AdjustResize ne fonctionne pas avec la bibliothèque externe qui s'étend FrameLayout

DragListView extends FrameLayout { 
    RecyclerView mRecyclerView; 
} 

Les éléments peuplés en RecyclerView contient un EditText. Avec le EditText près du haut de l'écran (qui n'est pas couvert si le clavier logiciel apparaît) fonctionne très bien. Mais celui qui est couvert par le clavier virtuel va gagner la mise au point puis perdre la mise au point à la fois lorsqu'il est appelé myEditText.requestFocus(); puis le clavier couvre EditText.

Voici la présentation de mon activité.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.example.ui.activities.ChecklistsActivity"> 

<include layout="@layout/custom_action_bar" 
    android:id="@+id/action_bar"/> 

<com.woxthebox.draglistview.DragListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="top" 
    android:id="@+id/recycler_view_checklists" 
    /> 

    </LinearLayout> 

android:layout_gravity="top" fonctionne pour moi une fois avec ma vieille structure où l'DragListView est un enfant imbriqué dans un RecyclerView (je mets la gravité supérieure pour la RecyclerView), mais il ne fonctionne plus dans ce cas.

Je ne peux pas utiliser AdjustPan parce que ça va pousser ma barre d'action (mais ça marche, malheureusement). Mine application n'est pas en plein écran (encore capable de voir la barre d'état, je suppose que ce n'est pas en plein écran, corrigez-moi si je me trompe s'il vous plaît). J'ai essayé quelques petites choses mais rien ne fonctionne. J'ai appelé myEditText.setFocusable(true); et myEditText.setFocusableInTouchMode(true); juste avant myEditText.requestFocus();.

Je mets android:descendantFocusability="afterDescendants" pour le DragListView ou la racine LinearLayout.

J'ai essayé différentes façons d'appeler le clavier au popup comme

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 

ou avec KeyboardUtils qui a reçu l'activité pour getCurrentFocus();

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); 

Et une chose juste au cas où. Je ne sais pas s'il y a quelque chose lié à mon clavier "personnalisé" avec edtSubItemName.setImeActionLabel("Done", KeyEvent.KEYCODE_ENTER); parce que je veux un multi-ligne EditText avec la touche d'action "Terminé". Le xml de l'élément EditText est ici:

<EditText 
     android:id="@+id/edit_text_sub_checklist_item" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"    
     android:layout_marginLeft="@dimen/height_checklist_setting" 
     android:layout_marginRight="@dimen/height_checklist_setting" 
     android:inputType="text" 
     android:imeOptions="actionDone" 
     android:maxLength="256" 
     android:textSize="@dimen/text_size_default" 
     android:visibility="invisible" /> 

Le android:visibility="invisible" est parce qu'il ya un bouton appuyer pour le rendre visible. Je me fâche avec ça pendant quelques jours. Ai-je oublié quelque chose? N'hésitez pas à demander plus d'informations.

Merci à tous pour votre précieux temps.

Répondre

0

Je l'ai résolu en mettant layoutManager.setStackFromEnd(true); pour le gestionnaire de mise en page avant de myDragListView.setLayoutManager(layoutManager);

La liste puis commencer au dernier point, donc je viens appeler myDragListView.scrollToPosition(0); après setAdapter pour le faire revenir au sommet comme normal. La chose intéressante est que la position des objets est toujours la même (toujours de haut en bas) donc il n'y a pas grand chose à faire.

Espérons que cela aide quelqu'un.