5

Tworzę układ (plik XML) w systemie Android, który ma dwa widoki podrzędne (jeden po prawej stronie ekranu i drugi po lewej). Chcę, aby widok z prawej strony wziął wcześniej określoną przestrzeń (w dp) i widok po lewej zajęłby całą pozostałą przestrzeń do limitu, w którym to momencie przestanie się rozwijać i oba układy będą po prostu idź dalej, gdy ekran się powiększy.Układ Androida z widokiem z prawej strony, który zajmuje wstępnie ustawione miejsce i widok po lewej stronie, aby wypełnić resztę ekranu do pewnego limitu

Dziwne jest to, że byłoby to bardzo łatwe, gdybym chciał, aby widok po prawej stronie był tym, który się rozszerza, a widok po lewej to taki, który zajmuje zadaną przestrzeń. Jeśli ustawisz każdy widok na żądaną szerokość (w poziomym układzie liniowym), Android zmniejszy się automatycznie po lewej stronie, jeśli oba widoki nie pasują.

Chciałbym to zrobić w jednym pliku układu; ten układ jest już zaprojektowany dla wyświetlaczy między sw512dp-land i sw765dp-land.

Poniższy kod zadziała, jeśli uda mi się znaleźć sposób, aby zminimalizować układ po lewej stronie (gdy układy nie mieszczą się w określonym rozmiarze). Ale domyślnie system zmniejszy układ po prawej stronie.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" > 

<RelativeLayout 
    android:id="@+id/left" 
    android:layout_width="150dip" 
    android:layout_height="fill_parent" 
    android:background="@color/red" > 
</RelativeLayout> 

<LinearLayout 
    android:id="@+id/right" 
    android:layout_width="100dip" 
    android:layout_height="fill_parent" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="@color/green" > 
</LinearLayout> 

Kod ten (zawierający od @Lokesh) będzie działać, jeśli nie potrzebujesz układu po lewej, aby powstrzymać rozszerzanie w pewnym momencie.

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

<LinearLayout 
    android:id="@+id/left" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_toLeftOf="@+id/right" 
    android:background="@color/red" > 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/right" 
    android:layout_width="100dip" 
    android:layout_height="fill_parent" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="@color/green" > 
</LinearLayout> 

Byłoby również miło wiedzieć, czy ktoś uważa, że ​​to nie jest możliwe, aby można było uciec się do robi to pragmatycznie lub zmienia moje podejście do układu.

Dzięki!

+0

Czym dokładnie są te * widoki *, o których mówisz? Mam na myśli układy lub widżety? –

+0

Spróbuj wysłać kod – Chaitanya

+0

To powinno być łatwe do zrobienia, ale zależy od tego, co masz na myśli, mówiąc: * zajmujesz całą pozostałą przestrzeń do limitu *. – Luksprog

Odpowiedz

3

To działa dla mnie. Ustawiłem odpowiedni układ na 100dip, zmieniaj zgodnie z Twoimi potrzebami.

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

    <LinearLayout 
     android:id="@+id/left" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_toLeftOf="@+id/right" 
     android:background="@color/red" > 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/right" 
     android:layout_width="100dip" 
     android:layout_height="fill_parent" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="@color/green" > 
    </LinearLayout> 

</RelativeLayout> 

EDIT 1: użyłem koloru tła po prostu wyraźnie pokazują układy. W ogóle nie jest konieczne. :)

EDIT 2: Jeśli chcesz sposób poszerzyć lewy układ upto jedynie limitem następnie spróbuj tego -

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

    <LinearLayout 
     android:id="@+id/left" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_toLeftOf="@+id/right"> 
     <LinearLayout 
          android:id="@+id/inner" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent"   
      android:background="@color/yellow"> 

      <TextView 
       android:id="@+id/myTextView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="This will expand only to a limit" 
       android:maxWidth="300dip" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:background="@color/red" /> 

     </LinearLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/right" 
     android:layout_width="100dip" 
     android:layout_height="fill_parent" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="@color/green" > 
    </LinearLayout> 

</RelativeLayout> 

Tutaj trzeba umieszczać widżety w inner układ i to, co to wygląda na różnych ekranach.

3.1in HVGA 3.2in HVGA

5.2in QVGA 5.2in QVGA

kolory wykorzystywane: czerwony (# FFFF00), żółty (# ffffff00), zielony (# FF00FF00).

+0

Dzięki, dodałem ten i inny przykład z tymi samymi identyfikatorami układu do głównego postu jako odniesień. Problem polega na tym, że układ po lewej nigdy nie przestanie się rozszerzać wraz z powiększaniem ekranu. Jeśli układ po lewej stronie ma przypisaną wartość dip, to gdy przestanie się rozszerzać, odsunie się od lewej strony ekranu, a nie od przestrzeni pomiędzy dwoma układami. – zjuhasz

+0

Nie jestem pewien, czy możesz osiągnąć to, co chcesz bezpośrednio, ale jeśli umieścisz "Widgety" w swoim układzie, można to osiągnąć poprzez umieszczenie wewnętrznego Układu po lewej stronie z 'wrap_content', a następnie umieszczenie' Widgetów' z '' 'android: maxWidth'. Poczekaj, edytuję swoją odpowiedź. –

+0

Sprytny, działa dla mnie, wielkie dzięki! – zjuhasz