2
votes

XML Android: la barre de recherche verticale dans Android avec la disposition parent de correspondance ne fonctionne pas correctement

J'ai déjà vu un autre article lié à ce sujet avant de publier cette question, donc je peux certainement dire que cette question n'est pas un doublon. J'ai un problème différent que je n'ai pas pu résoudre ni trouver de solution.

Problème: J'ai créé une barre de recherche verticale en utilisant la nouvelle code> vue. Cela a l'air bien quand je vois l'aperçu dans Android Studio mais sur l'appareil, la SeekBar ne remplit pas la hauteur de l'écran. J'ai fait pivoter la vue SeekBar avec 90 degrés et j'ai essayé de définir la height: match_parent et la width: wrap_content mais cela ne fonctionne pas du tout comme J'esperais. J'ai donc réglé la hauteur sur une valeur codée en dur et cela avait l'air bien. Le seul problème est que je vais devoir vérifier la hauteur de la vue dans laquelle elle est peuplée et définir la hauteur de la SeekBar de manière problématique, ce que je veux éviter.

slider.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/app_bar_main">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <RelativeLayout
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <include
                layout="@layout/maingrid"
                android:background="@color/colorAccent"
                android:layout_centerInParent="true"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
            <LinearLayout
                android:background="@android:color/transparent"
                android:layout_centerInParent="true"
                android:id="@+id/radarCanvas"
                android:layout_width="300dp"
                android:layout_height="300dp"
                android:orientation="vertical">
            </LinearLayout>
            <include
                android:layout_alignParentBottom="true"
                layout="@layout/biosignals"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" /> 

             <!--- this is where i am including slider layout -->
             <include
                android:layout_alignParentRight="true"
                layout="@layout/slider"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_margin="24dp" /> 

        </RelativeLayout>
    </LinearLayout>
</android.support.constraint.ConstraintLayout> 

 entrez la description de l'image ici

Mise à jour

Merci Reaz pour votre réponse

entrez la description de l'image ici

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slider"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/roundcorner"
    android:backgroundTint="@color/design_default_color_primary"
    android:gravity="center"
    android:layout_gravity="center"
    android:elevation="5dp"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:textColor="#fff"
        android:text="@string/RangeValue"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"/>
    <FrameLayout
        android:layout_weight="1"
        android:background="#fff"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <SeekBar
            android:id="@+id/seeker"
            android:layout_width="wrap_content" <!-- Set this to 400dp and it looks fine -->
            android:layout_height="match_parent"
            android:rotation="270"
            android:layout_gravity="center"/>
    </FrameLayout>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_round_done_24px"
        android:layout_gravity="center"
        android:padding="16dp"  />

</LinearLayout>  


2 commentaires

Jetez un œil à stackoverflow.com/questions/3333658/…


Veuillez vérifier ma réponse ci-dessous.


3 Réponses :


0
votes

Vous définissez le poids à l'intérieur du Framelayout lorsque l'orientation est verticale et en même temps la hauteur de FrameLayout est définie sur match_parent. Si vous réglez ainsi, le poids n'aura aucun effet. Essayez de régler la hauteur sur 0dp , cela fonctionnera à coup sûr.

<FrameLayout
    android:layout_weight="1"
    android:background="#fff"
    android:layout_width="match_parent"
    android:layout_height="0dp">

    <SeekBar
        android:id="@+id/seeker"
        android:layout_width="wrap_content" // set this to 400dp and it looks fine
        android:layout_height="match_parent"
        android:rotation="270"
        android:layout_gravity="center"/>

</FrameLayout>

 entrez la description de l'image ici

Ceci est mon résultat


2 commentaires

Veuillez jeter un œil à l'image ci-dessus, votre mise en page ressemble-t-elle à l'image ci-dessus?


Essayez de déplacer la SeekBar, s'il vous plaît.



0
votes

Vous devez vous débarrasser de votre FrameLayout qui limite la largeur de la SeekBar . J'ai essayé d'implémenter la mise en page comme suit et je pense qu'elle devrait également s'adapter à votre cas.

Une autre chose importante que vous devriez remarquer est qu'en raison de votre rotation, la largeur et la hauteur sont interchangées dans la vue de votre SeekBar . J'ai donc créé le layout_width = "match_parent" . J'espère que ça t'as aidé!

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slider"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:elevation="5dp">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:padding="16dp"
        android:text="100"
        android:textAlignment="center" />

    <SeekBar
        android:id="@+id/seeker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:rotation="270" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:padding="16dp"
        android:src="@android:drawable/star_on" />

</RelativeLayout>

Voici le résultat que j'ai obtenu.

 entrez la description de l'image ici


8 commentaires

donc même si nous modifions la rotation, la hauteur de la barre de recherche ne changera pas à moins que nous changions la largeur. Est-ce exact?


Vous le faites pivoter de 270 degrés, ce qui traduit également la hauteur et la largeur dans cet angle. Par conséquent, pour couvrir la région verticale, vous devez modifier la largeur. Faites-moi savoir si cela résout votre problème. :)


@ReazMurshed Merci :) Votre solution fonctionne mais je rencontrais quelques problèmes et j'essayais de les réparer avant de revenir vers vous. Je n'ai pas pu les réparer, alors je demande à nouveau votre aide - (1) Pour le moment, ce curseur prend le plein écran au lieu de s'asseoir bien (2) Mon icône et mon texte viennent au-dessus du curseur, je ne sais pas comment vous avez réussi à le faire. Je vais mettre à jour mon message. Vérifiez s'il vous plaît.


Chose sûre. Je vérifierai dès que possible.


J'obtiens le résultat que j'ai montré dans l'image où le curseur est petit avec votre mise en page mise à jour. Avec une disposition relative, au moins j'obtenais la pleine hauteur du curseur, mais lenearlayout me donne mon résultat précédent comme indiqué dans ma première image.


Je vois. Laissez-moi essayer avec le RelativeLayout alors.


J'ai essayé d'ajouter une marge supérieure et inférieure à TextView et à ImageView . Veuillez vérifier le code mis à jour.


Le problème est donc que la disposition relative prend tout l'écran horizontalement. Vous pouvez vérifier en définissant la couleur d'arrière-plan sur une couleur au lieu de aucune couleur qui se trouve essentiellement au-dessus d'une autre mise en page et la rend non cliquable. J'inclus slider.xml dans content_main.xml dans un Relativelayout, veuillez vérifier dans le post, qui héberge essentiellement trois mises en page gridview, canvas (linearlayout) et slider.xml. J'ai une mise en page relative amusante dans content_main.xml parce que je veux que le canevas et la grille soient placés l'un sur l'autre tandis que le curseur doit être placé à droite au lieu de prendre tout l'écran.



0
votes
<RelativeLayout
    android:layout_width="400dp"
    android:layout_height="200dp"
    android:layout_gravity="center">
    <SeekBar
        android:layout_width="400dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:maxHeight="4dp"
        android:minHeight="4dp"
        android:progress="50"
        android:progressDrawable="@drawable/custom_seek_bar"
        android:rotation="270"
        android:thumb="@drawable/seekbar_thumb" />
</RelativeLayout>
Use this code, you will get desired result

0 commentaires