Szerokość procentowa w relacji

Pracuję nad układem formularza logowania Activity w mojej aplikacji na Androida. Poniższy obrazek wygląda tak, jak chcę, aby wyglądał:

Tutaj wpisz opis obrazka

Udało mi się osiągnąć ten układ za pomocą następującego XML. Problem w tym, że to trochę hakerskie. Musiałem zakodować szerokość dla EditText hosta. W szczególności musiałem podać:

android:layout_width="172dp" 

Naprawdę chciałbym podać procentową szerokość hosta i portu EditText ' s . (Coś jak 80% dla gospodarza, 20% dla port. Czy to możliwe? Poniższy XML działa na moim Droidzie, ale wydaje się, że nie działa na wszystkich ekranach. Naprawdę chciałbym bardziej solidnego rozwiązania.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/host_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/home"
        android:paddingLeft="15dp"
        android:paddingTop="0dp"
        android:text="host"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <TextView
        android:id="@+id/port_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/home"
        android:layout_toRightOf="@+id/host_input"
        android:paddingTop="0dp"
        android:text="port"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/host_input"
        android:layout_width="172dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/host_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/port_input"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/host_label"
        android:layout_marginTop="4dp"
        android:layout_toRightOf="@id/host_input"
        android:background="@android:drawable/editbox_background"
        android:inputType="number" />

    <TextView
        android:id="@+id/username_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/host_input"
        android:paddingLeft="15dp"
        android:paddingTop="15dp"
        android:text="username"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/username_input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/username_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textEmailAddress" />

    <TextView
        android:id="@+id/password_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/username_input"
        android:paddingLeft="15dp"
        android:paddingTop="15dp"
        android:text="password"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/password_input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/password_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textPassword" />

    <ImageView
        android:id="@+id/home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="false"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="15dp"
        android:scaleType="fitStart"
        android:src="@drawable/home" />

    <Button
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/password_input"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:text="   login   "
        android:textSize="18sp" >
    </Button>

</RelativeLayout>
Author: JasonMArcher, 2011-02-10

14 answers

Szukasz atrybutu android:layout_weight. Pozwoli Ci to na użycie procentów do zdefiniowania układu.

W poniższym przykładzie lewy przycisk zajmuje 70% spacji, a prawy 30%.

<LinearLayout
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:text="left" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".70" /> 

    <Button
        android:text="right" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".30" />

</LinearLayout>

To działa tak samo z każdego rodzaju widoku, można zastąpić przyciski z jakiegoś EditText do swoich potrzeb.

Upewnij się, że ustawisz layout_width na 0dp, w przeciwnym razie twoje widoki mogą nie być odpowiednio skalowane.

Zauważ, że suma wagi nie musi być równa 1, po prostu ją znajduję łatwiej się czyta w ten sposób. Możesz ustawić pierwszą wagę na 7, a drugą na 3 i da to ten sam wynik.

 780
Author: Dalmas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-07 12:48:11

To nie do końca odpowiada na pierwotne pytanie, które dotyczyło podziału 70/30, ale w szczególnym przypadku podziału 50/50 między Komponenty jest sposób: umieść niewidzialną rozpórkę na środku i użyj jej do umieszczenia dwóch interesujących elementów.

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <View android:id="@+id/strut"
        android:layout_width="0dp"
        android:layout_height="0dp" 
        android:layout_centerHorizontal="true"/>
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignRight="@id/strut"
        android:layout_alignParentLeft="true"
        android:text="Left"/> 
    <Button 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/strut"
        android:layout_alignParentRight="true"
        android:text="Right"/>
</RelativeLayout>
Ponieważ jest to dość powszechny przypadek, To rozwiązanie jest czymś więcej niż ciekawostką. Jest to trochę hack, ale skuteczny jeden, ponieważ pusty, zerowej wielkości rozpórka powinna kosztować bardzo niewiele.

Ogólnie jednak najlepiej nie oczekuj zbyt wiele od układów Android akcji...

 292
Author: olefevre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-23 22:22:51

Update 1

Jak wskazał @EmJiHash Procentrelativelayout jest przestarzały w API poziom 26.0.0

Poniżej cytując komentarz google:

Ta klasa była przestarzała w API na poziomie 26.0.0. zamiast tego rozważ użycie ConstraintLayout i powiązanych układów. Poniżej przedstawiono jak replikować funkcjonalność układów procentowych za pomocą ConstraintLayout


Google wprowadziło nowe API o nazwie android.wsparcie.procent

Następnie możesz po prostu określić procent do wzięcia przez Widok

Dodaj zależność kompilacji jak

implementation 'com.android.support:percent:22.2.0

W tym, Procentrelativelayout jest to, co możemy zrobić procent mądry układ

 <android.support.percent.PercentRelativeLayout
     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
         app:layout_widthPercent="50%"
         app:layout_heightPercent="50%"
         app:layout_marginTopPercent="25%"
         app:layout_marginLeftPercent="25%"/>
 </android.support.percent.PercentRelativeLayout>
 138
Author: N J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Nie można używać procentów do definiowania wymiarów widoku wewnątrz RelativeLayout. Najlepszym sposobem na to jest użycie LinearLayout i wag lub niestandardowego układu.

 81
Author: Romain Guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 19:04:03

Możesz rzucić okiem na nową bibliotekę procent wsparcia.

compile 'com.android.support:percent:22.2.0'

Docs

Próbka

 31
Author: gbero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-09 05:46:59

Możesz użyć Procentrelativelayout, jest to niedawny nieudokumentowany dodatek do biblioteki Design Support Library, umożliwia określenie nie tylko elementów względem siebie, ale także całkowitego procentu dostępnej przestrzeni.

Podklasa RelativeLayout, która obsługuje wymiary oparte na procentach i marginesy. Wymiar lub margines potomka można określić za pomocą atrybuty z przyrostkiem "procent".

<android.support.percent.PercentRelativeLayout
     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:layout_width="match_parent"
      android:layout_height="match_parent"
      app:layout_widthPercent="50%"
      app:layout_heightPercent="50%"
      app:layout_marginTopPercent="25%"
      app:layout_marginLeftPercent="25%"/>
</android.support.percent.PercentFrameLayout>

Procent pakiet zawiera interfejsy API do obsługi dodawania i zarządzania wymiarami procentowymi w aplikacji.

Aby użyć, musisz dodać tę bibliotekę do listy zależności Gradle:

dependencies {
    compile 'com.android.support:percent:22.2.0'//23.1.1
}
 19
Author: IntelliJ Amiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 05:38:20

Ponieważ Procentrelativelayout został wycofany w wersji 26.0.0 i zagnieżdżone układy, takie jak LinearLayout wewnątrz RelativeLayout, mają negatywny wpływ na wydajność (zrozumienie korzyści wydajności ConstraintLayout ), najlepszą opcją dla osiągnięcia szerokości procentowej jest zastąpienie RelativeLayout ConstraintLayout.

Można to rozwiązać na dwa sposoby.

Rozwiązanie # 1 z wykorzystaniem wytycznych z procentem offset

Edytor Układu

<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">

    <TextView
        android:id="@+id/host_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Host"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/host_input" />

    <TextView
        android:id="@+id/port_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Port"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/port_input" />

    <EditText
        android:id="@+id/host_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="textEmailAddress"
        app:layout_constraintTop_toBottomOf="@+id/host_label"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/guideline" />

    <EditText
        android:id="@+id/port_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="number"
        app:layout_constraintTop_toBottomOf="@+id/port_label"
        app:layout_constraintLeft_toLeftOf="@+id/guideline"
        app:layout_constraintRight_toRightOf="parent" />

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.8" />

</android.support.constraint.ConstraintLayout>

Rozwiązanie # 2 z wykorzystaniem łańcucha o ważonej szerokości dla EditText

Edytor Układu

<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">

    <TextView
        android:id="@+id/host_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Host"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/host_input" />

    <TextView
        android:id="@+id/port_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Port"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/port_input" />

    <EditText
        android:id="@+id/host_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="textEmailAddress"
        app:layout_constraintHorizontal_weight="0.8"
        app:layout_constraintTop_toBottomOf="@+id/host_label"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/port_input" />

    <EditText
        android:id="@+id/port_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="number"
        app:layout_constraintHorizontal_weight="0.2"
        app:layout_constraintTop_toBottomOf="@+id/port_label"
        app:layout_constraintLeft_toRightOf="@+id/host_input"
        app:layout_constraintRight_toRightOf="parent" />

</android.support.constraint.ConstraintLayout>

W obu przypadkach dostajesz coś takiego

Widok Wyniku

 13
Author: Eugene Brusov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-24 17:33:49

Rozwiązałem to tworząc własny widok:

public class FractionalSizeView extends View {
  public FractionalSizeView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public FractionalSizeView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    setMeasuredDimension(width * 70 / 100, 0);
  }
}

To jest niewidzialna strut, której mogę użyć do wyrównania innych widoków w RelativeLayout.

 12
Author: Ivan Volosyuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-07 06:27:15

Update

Jak wskazuje @EmJiHash PercentRelativeLayout i PercentFrameLayout jest przestarzały na poziomie API 26.0.0

Rozważ Użycie ConstraintLayout

Google wprowadziło nowe API o nazwie android.wsparcie.procent

1)Procentrelativelayout

2)PercentFrameLayout

Dodaj zależność kompilacji jak

compile 'com.android.support:percent:23.1.1'

Możesz określić wymiar w procentach, aby uzyskać oba korzyść RelativeLayout i procent

 <android.support.percent.PercentRelativeLayout
         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"/>
     <TextView
         app:layout_widthPercent="40%"
         app:layout_heightPercent="40%"
         app:layout_marginTopPercent="15%"
         app:layout_marginLeftPercent="15%"/>
 </android.support.percent.PercentRelativeLayout/>
 11
Author: CrabsStew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-12 16:52:00

Procentrelativelayout jest przestarzały z wersji 26.0.0 biblioteki wsparcia.

Google wprowadziło nowy Layout o nazwie ConstraintLayout .

Dodaj bibliotekę jako zależność w budowaniu na poziomie modułu.plik:

     dependencies {
        compile 'com.android.support.constraint:constraint-layout:1.0.1'
      }

Wystarczy dodać w pliku układu:

<?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">
</android.support.constraint.ConstraintLayout>

Ograniczenia

Ograniczenia pomagają utrzymać zgodność widżetów. Możesz użyć kotwic, takich jak uchwyty ograniczające pokazane poniżej, aby określ reguły wyrównania między różnymi widżetami.

  1. Wrap Content: widok rozszerza się w razie potrzeby, aby dopasować jego zawartość.
  2. Match Constraints: widok rozszerza się w razie potrzeby, aby spełnić definicję jego ograniczeń po uwzględnieniu marginesów. Jeśli jednak dany wymiar ma tylko jedno ograniczenie, to Widok rozszerza się tak, aby pasował do jego zawartości. Korzystanie z tego trybu na wysokości lub szerokości pozwala również ustawić stosunek wielkości.
  3. Fixed: podajesz określony wymiar w polu tekstowym poniżej lub poprzez zmianę rozmiaru widoku w edytorze.
  4. Spread: widoki są równomiernie rozłożone (po uwzględnieniu marginesów). Jest to wartość domyślna.
  5. Spread inside: pierwszy i ostatni Widok są przymocowane do ograniczeń na każdym końcu łańcucha, a reszta jest równomiernie rozłożona.
  6. Weighted: gdy łańcuch jest ustawiony na spread lub spread inside, możesz wypełnić pozostałe miejsce, ustawiając jeden lub więcej widoków na "dopasuj ograniczenia" (0dp). Przez domyślnie przestrzeń jest równomiernie rozłożona między każdym widokiem ustawionym na "dopasuj ograniczenia", ale można przypisać wagę do każdego widoku za pomocą atrybutów layout_constraintHorizontal_weight i layout_constraintVertical_weight. Jeśli znasz layout_weight w układzie liniowym, działa to w ten sam sposób. Tak więc widok o najwyższej wadze otrzymuje największą ilość miejsca; widoki o tej samej wadze otrzymują taką samą ilość miejsca.
  7. Packed: widoki są pakowane razem(po uwzględnieniu marginesów). Następnie można dostosować odchylenie całego łańcucha (lewo/prawo lub góra/dół), zmieniając odchylenie głowy łańcucha.
  8. Center Horizontally or Center Vertically: aby szybko utworzyć łańcuch widoków, zaznacz je wszystkie, Kliknij prawym przyciskiem myszy jeden z widoków, a następnie wybierz środek w poziomie lub środek w pionie, aby utworzyć łańcuch w poziomie lub w pionie]}
  9. Baseline alignment: Wyrównaj linię bazową tekstu widoku do linii bazowej tekstu innego widoku.
  10. Constrain to a guideline: Możesz dodaj pionowe lub poziome wytyczne, do których możesz ograniczyć widoki, a wytyczne będą niewidoczne dla użytkowników aplikacji. Wytyczne można ustawić w obrębie układu w oparciu o jednostki dp lub procent, względem krawędzi układu.
  11. Adjust the constraint bias: po dodaniu ograniczenia po obu stronach widoku (a rozmiar widoku dla tego samego wymiaru to "stała" lub "zawartość zawijania"), widok staje się wyśrodkowany między tymi dwoma ograniczeniami z domyślnym odchyleniem 50%. Możesz dostosować przesunięcie suwaka odchylenia w oknie Właściwości]}
  12. Set size as a ratio: możesz ustawić rozmiar widoku na stosunek taki jak 16: 9, Jeśli co najmniej jeden z wymiarów widoku jest ustawiony na "dopasuj ograniczenia" (0dp).
Więcej informacji można znaleźć w oficjalnym dokumencie doc.

 7
Author: Darish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-26 11:02:49

Można to osiągnąć za pomocą wag układu. Waga dyktuje, jak nieodebrane części ekranu są podzielone. Nadaj każdemu Edittextowi layout_width równą 0 i pewną proporcjonalną wagę. To znaczy, daj jeden ciężar 2, a drugi ciężar 1, jeśli chcesz, aby pierwszy zajmował dwa razy więcej miejsca.

 3
Author: Cheryl Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 19:05:34

Co ciekawe, opierając się na odpowiedzi od @ olefevre, można nie tylko robić układy 50/50 z "niewidzialnymi rozpórkami", ale wszelkiego rodzaju layouty z udziałem mocy dwóch.

Na przykład, oto układ, który tnie szerokość na cztery równe części (właściwie trzy, o wagach 1, 1, 2):

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

    <View
        android:id="@+id/strut"
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:background="#000000" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/strut" >

        <View
            android:id="@+id/left_strut"
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@+id/strut"
            android:layout_centerHorizontal="true"
            android:background="#000000" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignRight="@+id/left_strut"
            android:text="Far Left" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_toRightOf="@+id/left_strut"
            android:text="Near Left" />
    </RelativeLayout>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@id/strut"
            android:layout_alignParentRight="true"
            android:text="Right" />

</RelativeLayout>
 3
Author: coco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-07 16:55:55

Po prostu umieść dwa hosty i port textviews w niezależnej linii poziomej i użyj android: layout_weight, aby utworzyć procent

 3
Author: Cyatophilum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-19 17:45:57

Sprawdź https://github.com/mmin18/FlexLayout , którego można użyć procent lub java expression bezpośrednio w layout xml.

<EditText
    app:layout_left="0%"
    app:layout_right="60%"
    app:layout_height="wrap_content"/>
<EditText
    app:layout_left="prev.right+10dp"
    app:layout_right="100%"
    app:layout_height="wrap_content"/>
 1
Author: mmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-15 13:03:53