J'ai une vue de liste et le dernier élément de la liste contient EditText:
<RelativeLayout
Android:id="@+id/contentLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="30dp"
Android:orientation="vertical" >
<ImageView
Android:id="@+id/test"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignRight="@+id/messageEditText"
Android:layout_below="@+id/messageEditText"
Android:layout_marginRight="14dp"
Android:src="@drawable/test" />
<EditText
Android:id="@+id/messageEditText"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:layout_toLeftOf="@+id/sendImageButton"
Android:ems="10"
Android:gravity="top"
Android:hint="@string/messageEditText"
Android:inputType="textMultiLine"
Android:minHeight="55dp"
Android:paddingLeft="10dp"
Android:paddingRight="10dp"
Android:paddingTop="10dp" />
<ImageButton
Android:id="@+id/sendImageButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBottom="@id/messageEditText"
Android:layout_alignParentRight="true"
Android:layout_alignTop="@id/messageEditText"
Android:adjustViewBounds="true"
Android:maxHeight="55dp"
Android:maxWidth="55dp"
Android:padding="12dp"
Android:scaleType="centerInside"
Android:src="@drawable/sendmessage" />
</RelativeLayout>
La moitié du EditText est masquée. Je ne peux pas non plus faire défiler la liste. Toute solution?
La solution consistait à définir un Android:softInputMode
attribut à adjustResize
dans le manifeste et placez la disposition (pas la liste des éléments) dans un ScrollView.
J'ai eu un problème similaire, alors j'ai utilisé Android:windowSoftInputMode="adjustResize|stateHidden"
comme mentionné ici .. Cela fonctionne très bien pour moi ..
Depuis mes débuts en tant que développeur Android, j'ai eu du mal avec le clavier virtuel. Je suis étonné que Android ne donne toujours pas de solution élégante et claire pour cela.
Voici donc la solution de contournement qui mettra ce gâchis derrière vous. cela fonctionnera sans la solution de contournement ScrollView ou sans afficher votre indicateur plein écran.
compile'net.yslibrary.keyboardvisibilityevent: keyboardvisibilityevent: 1.0.1 '
Android: windowSoftInputMode = "adjustResize"
envelopper votre EditText avec un LinearLayout vertical et ajouter une vue avec une visibilité du passé:
<com.ylimitapp.ylimitadmin.views.NormalFontEditText
Android:id="@+id/input_et"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="textCapSentences|textMultiLine"
Android:imeOptions="actionSend"
Android:paddingStart="20dp"
Android:paddingEnd="40dp"
Android:paddingTop="10dp"
Android:maxHeight="120dp"
Android:adjustViewBounds= "true"
Android:scrollHorizontally="false"
Android:textColorHint="#7b7b7b"
Android:hint="@string/type_your_message"
Android:background="@drawable/msg_inputfield_bg"
Android:textColor="@color/black_text_color"
Android:textSize="15.33sp"
/>
<View
Android:id="@+id/keyboard_view"
Android:layout_width="match_parent"
Android:layout_height="20dp"
Android:visibility="gone"
/>
</LinearLayout>
calculer la taille de l'écran pour pouvoir calculer la hauteur de la vue qui pousse le EditText:
private void storeScreenHeightForKeyboardHeightCalculations() {
Rect r = new Rect();
View rootview = getActivity().getWindow().getDecorView();
rootview.getWindowVisibleDisplayFrame(r);
mOriginalScreenHeight = r.height();
Rect rectangle = new Rect();
Window window = getActivity().getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight = rectangle.top;
int contentViewTop =
window.findViewById(Window.ID_Android_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;
if (titleBarHeight == 0) {
mOriginalScreenHeight -= (24 * Utils.getDensity(getContext()));
}
}
private void addkeyBoardlistener() { KeyboardVisibilityEvent.setEventListener( getActivity(), new KeyboardVisibilityEventListener() { @Override public void onVisibilityChanged(boolean isOpen) { if (isOpen) { Rect r = new Rect(); View rootview = getActivity().getWindow().getDecorView(); // this = activity rootview.getWindowVisibleDisplayFrame(r); int keyboardHeight = (mOriginalScreenHeight - r.height()); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) keyboard_view.getLayoutParams(); params.height = (int) ((keyboardHeight + 5 * Utils.getDensity(getContext()))); keyboard_view.setLayoutParams(params); keyboard_view.setVisibility(View.VISIBLE); } else { keyboard_view.setVisibility(View.GONE); } } }); }
Voici le résultat:
this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN );
Définissez un Android:softInputMode
attribut pour votre élément Activity dans votre Manifest.
Voir documentation du manifeste pour une liste complète des valeurs valides et leur effet. Ceux qui vous intéressent particulièrement seront probablement adjustPan
et adjustResize
.