J'utilise une bibliothèque externe appelée DragListView
here. 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.