9
votes

Comment éviter que autre vue soit poussée hors de l'écran

Ceci est l'exemple XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content" android:orientation="vertical"
        android:layout_margin="5dip" android:background="#FF992222">
        <ScrollView android:layout_height="wrap_content"
            android:layout_width="fill_parent">
            <LinearLayout android:layout_height="wrap_content"
                android:orientation="vertical" android:layout_width="fill_parent">
                <TextView android:layout_width="wrap_content" android:text="TextView"
                    android:layout_height="wrap_content" android:textSize="24dip"></TextView>
            </LinearLayout>
        </ScrollView>
    </LinearLayout>
    <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content" android:orientation="vertical"
        android:layout_margin="5dip" android:background="#FF555555">
        <TextView android:layout_width="wrap_content" android:text="TextView"
            android:layout_height="wrap_content" android:textSize="24dip"></TextView>
    </LinearLayout>
</LinearLayout>


2 commentaires

Pourquoi ne gardez-vous pas tout dans une enveloppe de défilement.


Donc, vous ne voulez pas que la vue de texte grise soit déplacée du tout pendant que les rouges restent défilables, suis-je correct?


3 Réponses :


5
votes

Essayez ceci. La clé utilise layout_weight dans la disposition linéaire.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ScrollView android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="fill_parent">
        ....
    </ScrollView>
    <TextView android:layout_width="fill_parent" android:text="TextView"
        android:layout_height="wrap_content" android:textSize="24dip"/>
</LinearLayout>


3 commentaires

Je sais que je peux réaliser la dernière capture d'écran avec layout_weight. Mais je veux que la première boîte devienne flexible .. Il restera petit si le contenu n'est que 1/2 ligne, et de faire défiler une fois le contenu en train de faire trop de ...


La première case sera flexible si vous modifiez Android: Layout_height = "Fill_Parent" à Android: Layout_height = "Wrap_Content" dans la première linearlayout. Je pense.


Travaillé pour moi .. merci



3
votes

Eh bien, si je comprends bien vous question clairement, vous voulez que le TextView en gris reste immobile, tandis que les visions textuelles en rouge peuvent être défilées, corrigez-moi si je me trompe ici. Si c'est ce que vous voulez, vous pouvez utiliser le relativation pour y parvenir. Voici le code pour produire une sortie comme:
http://imageshack.us/photo/my-images/836/device20111011012652. PNG /
Les entrées ListView sont défilables pendant que le bouton (dans votre cas, il devrait s'agir d'une vue texte) reste là où il se trouve.

code: xxx

juste changer le bouton inférieur en TextView et il correspondrait à ce que vous vouliez.


5 commentaires

Wow génial ... ça n'est pas la réponse que je veux ... mais ça me donne vraiment raison de savoir comment RelativeAnyOut peut faire ... :) Dans votre XML, lorsque Android: Layout_alignparentTom = "vrai" est appelé, le relativelayouout devient Fill_Parent, et je ne veux pas. Au lieu de cela, je m'en débarrasse et ajoutez android: layout_below = "@ + id / box1 en bascule pour le faire comme je veux ... :)


oh non ... ça ne résout pas mon problème .... Je veux réaliser ... Je veux que la première boîte devienne flexible ... Donc, lorsque la première boîte ne contient que 1/2 ligne, elle ressemblera à 1er pic. Et quand le contenu en obtenir trop, cela ressemblera à la 3ème photo ....


OK, cela pourrait être un peu cependant à mettre en œuvre, mais si vous utilisez ListViews (qui, idéalement, vous devez utiliser dans votre cas), vous pouvez remplacer l'écouteur Onscroll et vérifier si la dernière entrée de la liste est visible ou non. S'il est visible, vous devrez alors définir de manière programmative l'alignement du texte grisView au bas du dernier élément, sinon définissez l'alignement sur le bas de l'écran (comme indiqué en réponse). Référence pour vérifier la dernière entrée de ListveIWW: Stackoverflow.com/Questtions/5123675/...


Le lien vidéo dans cette réponse est cassé.


@Lubosz Vous envisagez une réponse de 6 ans, qui ne devraient évidemment pas être suivie. RelativitAjouter a de nouveau cette propriété dans la journée, mais les choses changent en 6 ans. Au lieu de descendre une réponse parfaitement légitime à l'époque, envisagez de laisser une note que cette réponse peut ne plus être valable, car cela sera plus utile pour les futurs visiteurs.



7
votes

Il m'a fallu une quantité de temps insensée pour comprendre cela, il n'y a pas d'informations sur le net, mais je l'ai enfin obtenu. Profitez!

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:orientation="vertical"
 >

<LinearLayout
    android:id="@+id/LL"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"                
    android:gravity="center_vertical"
    android:layout_centerVertical="true"
    android:orientation="vertical"
    android:weightSum="1" >


    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/TV1"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:fillViewport="true" >

        <TextView
            android:id="@+id/TV2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center" />
    </ScrollView>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:layout_weight="0"
        android:orientation="horizontal" >

        <TextView android:layout_width="wrap_content" android:text="TextView"
        android:layout_height="wrap_content" android:textSize="24dip"></TextView>

    </LinearLayout>
</LinearLayout>


1 commentaires

Cela devrait être la réponse acceptée car cela fonctionne.