Acties:
  • 0 Henk 'm!

  • The_Worst
  • Registratie: November 2005
  • Nu online
Ik ben sinds een paar dagen begonnen met het programmeren voor Android (2.1). Nu ben ik aan het prutsen met de layout_weight-attribuut maar ik snap de logica niet. De interface doet wat anders dan verwacht.

Ik ben bezig met een eenvoudige scoreboard. Bovenaan 4 spelersnamen, dan volgen de scores en onderaan de mogelijkheid om scores in te voeren. Nu moeten de namen en de invoervelden altijd in beeld blijven en de scorelijst moet scrollable zijn.

Afbeeldingslocatie: http://storage.seanbeernink.nl/android-scorelijst.png

Uittreksel View-code:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?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">
    <!-- spelersnamen -->
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="0"
        android:layout_gravity="center">
        </LinearLayout>
    <!-- scorelijst -->
    <ScrollView android:id="@+id/scroll"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:layout_gravity="top">
        <!-- scores speler 1 -->
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical"
                android:layout_weight="1">
            </LinearLayout>
        <!-- scores speler 2 -->
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical"
                android:layout_weight="1">
            </LinearLayout>
        <!-- scores speler 3 -->
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical"
                android:layout_weight="1">
            </LinearLayout>
        <!-- scores speler 4 -->
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical"
                android:layout_weight="1">
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
    <!-- invoervelden scores-->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="0">
    </LinearLayout>
</LinearLayout>


Zoals je hierboven kunt zien staan de huidige layout_weights op 0, 1, 0 voor respectievelijk de namen, scorelijst en invoervelden. Ik zou echter verwachten dan hierdoor de scorelijst juist het hele scherm zou vullen omdat deze het zwaarst weegt. Wat zie ik over het hoofd?

Is het daarnaast 'normaal' dat je zoveel LinearLayout's gebruikt in een view?

If you hide your whole life, you'll forget who you even are. Uplay: TheWorstNL | Steam + Origin + PSN: The_Worst_NL


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Waarom heb je niet gewoon gebruik gemaakt van een table layout? Dan ben je meteen van die linear layouts af en maak je met een kleine hack een oplossing voor je probleem mogelijk. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Ram0n
  • Registratie: Maart 2002
  • Laatst online: 20-04 16:44

Ram0n

Bierbrouwende nerd

The_Worst schreef op vrijdag 22 juli 2011 @ 15:47:
Zoals je hierboven kunt zien staan de huidige layout_weights op 0, 1, 0 voor respectievelijk de namen, scorelijst en invoervelden. Ik zou echter verwachten dan hierdoor de scorelijst juist het hele scherm zou vullen omdat deze het zwaarst weegt. Wat zie ik over het hoofd?
De weight geeft aan hoeveel van de overgebleven ruimte er wordt toegekend aan de betreffende elementen. Elk element krijgt dus sowieso de ruimte die het nodig heeft, en alle overige ruimte wordt verdeeld over de elementen met een weight groter dan nul.

Uit de manual (http://developer.android....r_android:layout_weight):
Indicates how much of the extra space in the LinearLayout will be allocated to the view associated with these LayoutParams. Specify 0 if the view should not be stretched. Otherwise the extra pixels will be pro-rated among all views whose weight is greater than 0.

Eigenaar/brouwer Milky Road Brewery