2017-06-07 2 views
0

Ich habe ein Layout-Problem, wo ich ein benutzerdefiniertes Layout habe ich in einem GridView, in dem ein Kontrollkästchen an der unteren rechten Ecke eines ImageView ausrichten soll. Die Vorschau des Layouts zeigt, dass es korrekt aussieht, aber wenn es in die gridView geladen wird, verschiebt es das Kontrollkästchen nach oben links von imageView. Ich habe versucht, das Bild in der GridView kleiner zu machen und auch den Abstand zwischen Objekten in der Gridview zu entfernen, aber ohne Erfolg.android benutzerdefinierte Layout nicht richtig in gridView ausgerichtet

hier ist mein benutzerdefiniertes Layout für jedes Element der gridview

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ImageView 
    android:id="@+id/imgThumb" 
    android:layout_width="100dp" 
    android:layout_height="100dp"/> 

<CheckBox 
    android:id="@+id/chkImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignEnd="@+id/imgThumb" 
    android:layout_alignRight="@+id/imgThumb" 
    android:layout_alignBottom="@+id/imgThumb"/> 

</RelativeLayout> 

und hier ist das Gridview-Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center" 
android:orientation="vertical"> 
<GridView 
    android:id="@+id/grdImages" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:numColumns="3" 
    android:verticalSpacing="5dp" 
    android:horizontalSpacing="5dp" 
    android:columnWidth="90dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center"/> 

<Button 
    android:id="@+id/btnSelect" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Select" 
    android:layout_marginTop="5dp"/> 

</LinearLayout> 

hier ist ein Bild von dem, was ich den Artikel in der gridview möchte aussehen wie, und das ist auch, was die Vorschau zeigt es wird aussehen wie Preview

und das ist, was passiert in der tatsächlichen gridView GridView

+0

Ich kann ein paar Bilder hinzufügen, wenn es jemand versteht, mein Problem zu verstehen. Danke für die Überlegung. – Shawnzey

+0

Probieren Sie LinearLayout anstelle von RelativeLayout für das benutzerdefinierte Layout aus. –

+0

Ich habe das auch ausprobiert, aber ich konnte nicht herausfinden, wie man das Kontrollkästchen in der unteren rechten Ecke des ImageViews erscheinen lässt. Ich habe versucht, Schwerkraft = "top | end", aber das bringt es außerhalb der imageView – Shawnzey

Antwort

0

diesen Code Versuchen:

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

<RelativeLayout 
    android:layout_width="100dp" 
    android:layout_height="100dp"> 

<ImageView 
    android:id="@+id/imgThumb" 
    android:layout_width="100dp" 
    android:layout_height="100dp"/> 

<CheckBox 
    android:id="@+id/chkImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true"/> 
</RelativeLayout> 

+0

das hat perfekt für mich funktioniert danke! – Shawnzey

0

Das Problem trat auf, weil Sie die Ausrichtung für Ihr ImageView nicht festlegen. Setzen Sie alignParentTop = true für ImageView. Richten Sie dann die Checkbox unter der ImageView aus, indem Sie die Eigenschaft layout_below auf die ID von ImageView setzen.

Oder ersetzen Sie RelativeLayout durch LinearLayout mit Ausrichtung ist vertikal, da Sie ImageView witj feste Größe festgelegt haben.

+0

Ich habe gerade Ihre Idee ausprobiert und hatte keine Wirkung.Danke! – Shawnzey

+0

Ich sehe, Sie müssen auch feste Größe für das übergeordnete Layout festlegen. –

+0

ja! das musste ich tun :) danke! – Shawnzey

0

Versuchen Sie, hinzufügen: android:layout_marginStart="xdp" x eine logische Zahl für Ihren Fall (kann nichts sagen, ohne irgendein Bild zu sehen) auf die Xml Bloq für das Kontrollkästchen.

Übrigens sollten Sie constraint layouts verwenden, um diese Art von Problemen zu vermeiden! Und wenn Sie bereits sind, vergessen Sie einfach, die Checkbox zu beschränken.

Viel Glück.

+0

das funktioniert für mich, außer ich bin besorgt, dass es eine andere Ausrichtung für unterschiedlich große Telefone haben wird. Ich suche nach einer besseren und einfacheren Lösung, nehme ich an. – Shawnzey

0

Dies kann helfen.

custom_layout:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

<ImageView 
    android:id="@+id/imgThumb" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_gravity"center"/> 

<CheckBox 
    android:id="@+id/chkImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right|bottom"/> 

</FrameLayout> 
+0

das funktionierte auch gut, aber die Ausrichtung war ein wenig aus, aber danke für Ihre Eingabe werde ich definitiv in FrameLayout mehr schauen, um über sie zu lernen! – Shawnzey

+0

@Shawnzey Sie sind willkommen .. Bitte upvote, wenn es geholfen –

0

Dies funktioniert gut für mich.

<ImageView 
android:id="@+id/imgThumb" 
android:layout_width="100dp" 
android:layout_height="100dp"/> 
<CheckBox 
android:marginTop="80dp" 
android:id="@+id/chkImage" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignRight="@+id/imgThumb"/> 
+0

das funktioniert für mich, außer ich bin besorgt, es wird eine andere Ausrichtung für unterschiedlich große Telefone haben. Ich suche nach einer besseren und einfacheren Lösung, nehme ich an. – Shawnzey

+0

Oh, ich habe nie darüber nachgedacht, eine große Auswahl an Bildschirmen zu unterstützen. Vielleicht hat jemand die bessere Lösung für dein Problem. –

0

Versuchen Sie, diese Gewohnheit Layout.This Sie helfen können.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<LinearLayout 
    android:id="@+id/lin" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/icons" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/gridImg" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginBottom="@dimen/_5sdp" 
     android:layout_marginTop="@dimen/_5sdp" 
     android:src="@mipmap/ic_launcher" /> 

    <CheckBox 
    android:id="@+id/chkImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right"/> 
</LinearLayout> 

</LinearLayout> 
Verwandte Themen