it-swarm.com.de

android-Layoutränder mit Prozentsatz

Ich möchte die Ränder nach Prozent festlegen. Ich habe 4 Bildansichten in einem linearen Layout und möchte die linken, rechten, oberen und unteren Ränder festlegen, die für jede Bildschirmgröße denselben Prozentsatz beibehalten.

ist es möglich ?

hier ist eine Demo, was ich will ..enter image description here

Und hier habe ich es versucht und funktioniert nicht

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

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:weightSum="10" >

        <Thumbnail
            Android:id="@+id/thumb1"
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="4" />

        <Thumbnail
            Android:id="@+id/thumb2"
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="4" />

    </LinearLayout>

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:weightSum="10" >

         <Thumbnail
             Android:id="@+id/thumb3"
             Android:layout_width="0dp"
             Android:layout_height="match_parent"
             Android:layout_weight="4" >
         </Thumbnail>

        <Thumbnail
            Android:id="@+id/thumb4"
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="4" />

    </LinearLayout>

</LinearLayout>

Danke für Ihre Hilfe

24
dracula

Sie können unsichtbare Views in Ihren LinearLayouts als Abstandhalter verwenden und ihnen mit dem layout_weight-Mechanismus die relative Größe zuweisen.

Beispiel:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_weight="1">

    <Thumbnail
        Android:id="@+id/thumb1"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="4" />

    <View
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:layout_weight="2"
        Android:visibility="invisible"/>

    <Thumbnail
        Android:id="@+id/thumb2"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="4" />

</LinearLayout>
24
laalto

Hinzugefügt am 1. August 2017: 

Die beiden Layouts dieser Antwort sind nun veraltet, es wird jedoch eine Beschreibung gegeben, wie mit ConstraintLayout dieselbe Funktionalität abgerufen wird. Vielen Dank an dpg für diesen Hinweis.

Wenn Sie planen, die Prozentsätze mit Ressourcen zu verwenden, kann diese Antwort nützlich sein.


Alte Antwort:

Es gibt jetzt einen besseren Weg, der mit der Unterstützungsbibliothek Version 23.0.0 herausgekommen ist (zur rechten Zeit, oder?). Sie können jetzt PercentFrameLayout oder PercentRelativeLayout verwenden. Sie haben beide die folgenden Eigenschaften:

  • layout_widthPercent
  • layout_heightPercent
  • layout_marginPercent
  • layout_marginLeftPercent
  • layout_marginTopPercent
  • layout_marginRightPercent
  • layout_marginBottomPercent
  • layout_marginStartPercent
  • layout_marginEndPercent

Sie können auch einen Blick auf PercentLayoutHelper.PercentLayoutParams werfen

19
neits

Sie können die Ränder mit den Prozentwerten festlegen, indem Sie ConstraintLayout-Richtlinien verwenden.

Angenommen, Sie möchten für Ihr Layout folgende Prozentwerte definieren:

 Requested percentage values

Dann fügen Sie Ihrem Layout einfach folgende Richtlinien hinzu:

 Layout Editor

<?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"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <ImageView
        Android:id="@+id/imageView1"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:scaleType="centerCrop"
        app:srcCompat="@drawable/ic_launcher_background"
        app:layout_constraintTop_toTopOf="@+id/horGuideline1"
        app:layout_constraintStart_toStartOf="@+id/verGuideline1"
        app:layout_constraintEnd_toStartOf="@+id/verGuideline2"
        app:layout_constraintBottom_toTopOf="@+id/horGuideline2" />

    <ImageView
        Android:id="@+id/imageView2"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:scaleType="centerCrop"
        app:srcCompat="@drawable/ic_launcher_background"
        app:layout_constraintTop_toTopOf="@+id/horGuideline1"
        app:layout_constraintStart_toStartOf="@+id/verGuideline3"
        app:layout_constraintEnd_toStartOf="@+id/verGuideline4"
        app:layout_constraintBottom_toTopOf="@+id/horGuideline2" />

    <ImageView
        Android:id="@+id/imageView3"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:scaleType="centerCrop"
        app:srcCompat="@drawable/ic_launcher_background"
        app:layout_constraintTop_toTopOf="@+id/horGuideline3"
        app:layout_constraintStart_toStartOf="@+id/verGuideline1"
        app:layout_constraintEnd_toStartOf="@+id/verGuideline2"
        app:layout_constraintBottom_toTopOf="@+id/horGuideline4" />

    <ImageView
        Android:id="@+id/imageView4"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:scaleType="centerCrop"
        app:srcCompat="@drawable/ic_launcher_background"
        app:layout_constraintTop_toTopOf="@+id/horGuideline3"
        app:layout_constraintStart_toStartOf="@+id/verGuideline3"
        app:layout_constraintEnd_toStartOf="@+id/verGuideline4"
        app:layout_constraintBottom_toTopOf="@+id/horGuideline4" />

    <Android.support.constraint.Guideline
        Android:id="@+id/verGuideline1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        app:layout_constraintGuide_percent="0.05" />

    <Android.support.constraint.Guideline
        Android:id="@+id/verGuideline2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        app:layout_constraintGuide_percent="0.35" />

    <Android.support.constraint.Guideline
        Android:id="@+id/verGuideline3"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        app:layout_constraintGuide_percent="0.65" />

    <Android.support.constraint.Guideline
        Android:id="@+id/verGuideline4"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        app:layout_constraintGuide_percent="0.95" />

    <Android.support.constraint.Guideline
        Android:id="@+id/horGuideline1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.12" />

    <Android.support.constraint.Guideline
        Android:id="@+id/horGuideline2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.47" />

    <Android.support.constraint.Guideline
        Android:id="@+id/horGuideline3"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.53" />

    <Android.support.constraint.Guideline
        Android:id="@+id/horGuideline4"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.88" />

</Android.support.constraint.ConstraintLayout>

Ihr Layout sieht daher ungefähr so ​​aus:

 Result view

5
Eugene Brusov

Wenn Sie Ihr Bild hier betrachten, können Sie dies tun, indem Sie ein relatives Layout verwenden und das lineare Layout einfügen. Sie können auch die weightSum verwenden, wenn Sie möchten, dass die Bildansichten richtig passen.

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginLeft="5dp"
    Android:layout_marginLeft="5dp" >

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:orientation="vertical" >

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentRight="true"
        Android:orientation="vertical" >

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </LinearLayout>

</RelativeLayout>
0
deepdroid