1
votes

La hauteur de EditText ne s'étend pas à la hauteur de son parent

J'ai placé un texte d'édition dans une vue de défilement avec height = match_parent et je m'attendais à ce que sa hauteur soit égale à la vue de défilement, mais ce n'est pas le cas. Sa hauteur se comporte comme wrap_content ce qui signifie que s'il n'y a pas de texte dans le EditText, je devrai pointer le curseur sur la première "ligne" pour que le clavier virtuel apparaisse, ce que je veux c'est que je puisse toucher n'importe où sur l'écran (la vue de défilement) et le clavier virtuel apparaît.

Ci-dessous se trouve la mise en page, merci pour votre aide.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/transparent"
            android:gravity="top"
            android:padding="10dp"
            android:textSize="16sp"
            android:textColor="@android:color/black">
        </EditText>
    </ScrollView>

    <Button
        android:id="@+id/btnPaste"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/paste"
        android:gravity="center"
        android:onClick="pasteData"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="6dp"
        android:layout_marginBottom="5dp"
        android:background="@drawable/rounded_corner_button"
        android:textColor="@android:color/white"/>
</LinearLayout>

Capture de la mise en page: p >

 entrez la description de l'image ici


5 commentaires

Vous voulez que votre edittext puisse défiler?


@primo c'est scrollable, c'est pourquoi je l'ai mis dans un ScrollView.


vous n'avez pas besoin d'utiliser la vue de défilement pour cela, définissez android: layout_height = "0dp" android: layout_weight = "1" sur EditText et vérifiez si cela fonctionne


@VamsiSmart Merci pour la réponse, je sais que le EditText lui-même peut faire défiler, mais ce sera un peu "laggy", le placer dans un ScrollView rendra le "scroll" plus fluide.


Essayez la solution donnée ici stackoverflow.com/a/24428854/8101634


3 Réponses :


0
votes

Implémentez ceci dans votre EditText dans un fichier xml:

 editText.setMovementMethod(new ScrollingMovementMethod());

Implémentez ceci dans onCreate ():

android:scrollbars="vertical"

Ensuite, vous n'aurez pas besoin de la vue de défilement si vous ne l'utilisez que pour la vue de texte, elle ne fait simplement défiler que votre vue de texte.


0 commentaires

1
votes

Vous pouvez contrôler le texte d'édition en changeant l'attribut minLines

par exemple:

android:scrollbars="vertical"

et au lieu d'encapsuler le EditText par scrollView add cet attribut à editText

<EditText
            android:id="@+id/ed_comment"
            style="@style/EditText.NoBackground"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top"
            android:hint="@string/write_comment_hint"
            android:minLines="40"
            android:textSize="16sp"/>

résultat:

entrez la description de l'image ici


1 commentaires

merci pour le commentaire, je sais que je peux utiliser l'option scrollBars pour que le EditText devienne scrollable, mais cette option ne fonctionne pas aussi "lisse" qu'une scrollview. Par exemple, si la barre de défilement est longue, avec un ScrollView, vous ne pouvez faire défiler vers le bas / vers le haut qu'avec une seule touche et l'écran fonctionne avec. Mais avec cette option uniquement, vous ne pouvez pas 、 vous devez continuer à balayer vers le haut / le bas jusqu'en haut / bas.



2
votes

Ajoutez cette ligne dans votre ScrollView .

android:fillViewport="true"


0 commentaires