2011-07-22 19 views
35

Witam wszystkich Właśnie zaimplementowałem ListView wewnątrz LinearLayout, ale muszę zdefiniować wysokość LinearLayout (musi to być 50% wysokości ekranu).android: layout_height 50% rozmiaru ekranu

<LinearLayout 
    android:id="@+id/widget34" 
    android:layout_width="300px" 
    android:layout_height="235px" 
    android:orientation="vertical" 
    android:layout_below="@+id/tv_scanning_for" 
    android:layout_centerHorizontal="true"> 

    <ListView 
     android:id="@+id/lv_events" 
     android:textSize="18sp"   
     android:cacheColorHint="#00000000" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tv_scanning_for" 
     android:layout_centerHorizontal="true"> 
    </ListView> 

</LinearLayout> 

Czy to możliwe?

Zrobiłem coś podobnego do przycisku i EditText, ale wydaje się nie działać na układach.

To jest mój kod:

//capture the size of the devices screen 
    Display display = getWindowManager().getDefaultDisplay(); 
    double width = display.getWidth(); 

    //my EditText will be smaller than full screen (80%)   
    double doubleSize = (width/5)*4; 
    int editTextSize = (int) doubleSize; 

    //define the EditText 
    userName = (EditText) this.findViewById(R.id.userName); 
    password = (EditText) this.findViewById(R.id.password); 

    //set the size 
    userName.setWidth(editTextSize); 
    password.setWidth(editTextSize); 

Dziękujemy! :)

+0

Czy próbowałeś użyć RelativeLayout wokół LinearLayout i rozmiar RelativeLayout? –

+0

Czy mogę wprowadzić procent w parametrze wysokości RelativeLayout? –

+0

używać niestandardowych LayoutParams: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html z RelativeLayout.setLayoutParams(): http://developer.android.com/reference/android/view/View .html # setLayoutParams% 28android.view.ViewGroup.LayoutParams% 29. ustaw wysokość na display.getHeight()/2 –

Odpowiedz

70

ustawić jego layout_height="0dp" *, dodać pustą View pod nim (lub pusty ImageView czy tylko FrameLayout) z layout_height także równej 0dp i ustaw obu widokach mieć layout_weight="1"

Ten potrwają każdy Zobacz równo, jak wypełnia ekran. Ponieważ obie mają taką samą wagę, każda z nich zajmie 50% ekranu.

* Zobacz komentarz adampa, dlaczego tak działa i inne przydatne przydatne ciekawostki.

+0

Dokładnie to zrobię. – Rob

+17

Kiedy używasz wagi, pamiętaj, że waga rozkłada * resztki * spacji po zmierzeniu wszystkich widoków podrzędnych. Jeśli chcesz polegać tylko na wadze, musisz ustawić 'layout_height =" 0dp "' zamiast 'wrap_content'. Ponadto możesz ustawić 'weightSum' na LinearLayout jawnie zamiast dodawać puste widoki tylko po to, aby zwiększyć całkowitą wagę. – adamp

+0

@adamp To naprawdę świetna informacja, której nie znałem. Wielkie dzięki. – LeffelMania

6

Jest to łatwe do zrobienia w xml. Ustaw swój górny kontener jako LinearLayout i ustaw atrybut orientacji według własnego uznania. Następnie wewnątrz tego miejsca znajdują się dwa liniowe układy, które obaj mają "wypełnij rodzica" na szerokość i wysokość. Wreszcie, należy ustawić atrybut weigth tych dwóch linearlayouts do 1.

0

Powinieneś zrobić coś takiego:

<LinearLayout 
    android:id="@+id/widget34" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:layout_below="@+id/tv_scanning_for" 
    android:layout_centerHorizontal="true"> 

    <ListView 
     android:id="@+id/lv_events" 
     android:textSize="18sp"   
     android:cacheColorHint="#00000000" 
     android:layout_height="1" 
     android:layout_width="fill_parent" 
     android:layout_weight="0dp" 
     android:layout_below="@+id/tv_scanning_for" 
     android:layout_centerHorizontal="true" 
     /> 

</LinearLayout> 

Również użyć DP zamiast px lub przeczytać o tym here.

+2

Zamień swoje wartości wzrostu i wagi, a to będzie poprawne. ;) – adamp

+0

Tak, będzie to poprawne, ale tylko dla bieżącej rozdzielczości urządzenia. Co się stanie, jeśli test będzie miał inną rozdzielczość? Wtedy dostanie mniej lub więcej niż 50% w zależności od nowej rozdzielczości wyświetlacza! A to jest trochę trudne ze statycznymi wartościami dla wysokości/szerokości! Dowiedz się, jak używać wymiarów proporcjonalnych dla komponentów interfejsu użytkownika! – nenito

+0

waga i wzrost nadal mają wartości wymieniane. –

5

To moja android: layout_height = 50% działalność:

<?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/alipay_login" 
     style="@style/loginType" 
     android:background="#27b" > 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/taobao_login" 
     style="@style/loginType" 
     android:background="#ed6d00" > 
    </LinearLayout> 

</LinearLayout> 

styl:

<style name="loginType"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">match_parent</item> 
    <item name="android:layout_weight">0.5</item> 
    <item name="android:orientation">vertical</item> 
</style> 
0

jest to tak proste, jeśli chcesz podzielić ekran dwuczęściowy pionie (TOP30% + bottom70%)

<LinearLayout 
      android:id="@+id/LinearLayoutTop" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="2"> 

    </LinearLayout> 
    <LinearLayout 
      android:id="@+id/LinearLayoutBottom" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"> 

    </LinearLayout> 
3

najlepszym sposobem jest używać

layout_height = "0DP" layout_weight = "0.5"

np

<WebView 
    android:id="@+id/wvHelp" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" /> 

<TextView 
    android:id="@+id/txtTEMP" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" 
    android:text="TextView" /> 

widoku sieci Web, TextView mają 50% wysokości ekranu

0

upewnić się, że wysokość w świetle jest 50% ekranu, wtedy możemy utworzyć dwa sub LinearLayouts w LinearLayout. Każde z dzieci LinearLayout powinno mieć "android: layout_weight" z 0.5 pokryć połowę ekranu

LinearLAyout rodzic powinien mieć "android: orientacja" ustawiony pionowej

.

.

tutaj jest kod dla odniesienia .... kod ten zawiera dwa przyciski wysokości pół ekranu

<LinearLayout 
android:orientation="vertical" 
android:layout_height="match_parent"> 

<LinearLayout 

    android:layout_weight="0.5" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <Button 
     android:padding="10dp" 
     android:layout_weight="0.5" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:text="button1" 
     android:id="@+id/button1" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentBottom="true" 
     /> 

    <Button 
     android:padding="10dp" 
     android:layout_weight="0.5" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:text="button2" 
     android:id="@+id/button2" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentBottom="true" 
     /> 

    </LinearLayout> 

<LinearLayout 

    android:layout_weight="0.5" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 


    </LinearLayout> 
    </LinearLayout> 
0

Ten rodzaj pracował dla mnie. Chociaż FAB nie unosi się niezależnie, ale teraz nie jest zepchnięty.

przestrzegać ciężarów podane wewnątrz LinearLayout

<LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:id="@+id/andsanddkasd"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/sharedResourcesRecyclerView" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_weight="4" 
       /> 

      <android.support.design.widget.FloatingActionButton 
       android:id="@+id/fab" 
       android:layout_width="wrap_content" 
       android:layout_height="0dp" 
       android:layout_gravity="bottom|right" 
       android:src="@android:drawable/ic_input_add" 
       android:layout_weight="1"/> 

     </LinearLayout> 

nadzieję, że to pomaga :)

0

Aby osiągnąć ten wyczyn, zdefiniować zewnętrzny układ liniowy z weightSum={amount of weight to distribute}.

definiuje maksymalną wagę. Jeśli nie jest to określone, suma jest obliczana przez dodanie wartości layout_weight dla wszystkich dzieci. Może to być użyte na przykład, aby dać dziecku 50% całkowitej dostępnej przestrzeni, nadając mu wartość layout_weight równą 0,5 i ustawiając weightSum na 1.0. Innym przykładem byłoby ustawienie weightSum = 2, a jeśli dwoje dzieci ustawi layout_weight=1, wtedy każde dostanie 50% dostępnej przestrzeni.

Waga jest zależna od liczby dzieci w układzie nadrzędnym.

+0

dziećmi w tym przypadku może być każda grupa widoków (FrameLayout) lub dowolny widok, taki jak imageView itp. – Remario

Powiązane problemy