Android-layout met ListView en knoppen

Ok, deze specifieke lay-out irriteert me gewoon. En kan geen manier vinden om een ​​lijstweergave te hebben, met een rij knoppen aan de onderkant, zodat de lijstweergave niet over de bovenkant van de knoppen uitsteekt, en de knoppen dus altijd onder aan het scherm worden vastgeklikt. Dit is wat ik wil:

dode ImageShack-link verwijderd

Het lijkt alsof het zo gemakkelijk zou moeten zijn, maar alles wat ik heb geprobeerd is mislukt. Hulp?

Dit is mijn huidige code:

   RelativeLayout container = new RelativeLayout(this);
    container.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
    //** Add LinearLayout with button(s)
    LinearLayout buttons = new LinearLayout(this);
    RelativeLayout.LayoutParams bottomNavParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    bottomNavParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    bottomNavParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    buttons.setLayoutParams(bottomNavParams);
    ImageButton newLayer = new ImageButton(this);
    newLayer.setImageResource(R.drawable.newlayer);
    newLayer.setLayoutParams(new LinearLayout.LayoutParams(45, LayoutParams.FILL_PARENT));
    buttons.addView(newLayer);
    container.addView(buttons);
    //** Add ListView
    layerview = new ListView(this);
    RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    listParams.addRule(RelativeLayout.ABOVE, buttons.getId());
    layerview.setLayoutParams(listParams);
    container.addView(layerview);

Antwoord 1, autoriteit 100%

Ik denk dat dit is wat u zoekt.

<?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">
    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:id="@+id/testbutton"
        android:text="@string/hello" android:layout_alignParentBottom="true" />
    <ListView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:id="@+id/list"
        android:layout_alignParentTop="true" android:layout_above="@id/testbutton" />
</RelativeLayout>

Antwoord 2, autoriteit 42%

Ik had al tijden hetzelfde probleem.

De oplossing om de ListView boven de knoppen te houden, maar te voorkomen dat deze worden bedekt als de lijst lang is, is om android:layout_weight=”1.0″ in de ListView in te stellen. Laat het layout_gewicht op de knoppen uitgeschakeld zodat ze hun natuurlijke grootte behouden, anders worden de knoppen geschaald. Dit werkt met LinearLayout.

Er staat een voorbeeld in de Android ApiDemos:
ApiDemos/res/layout/linear_layout_9.xml


Antwoord 3, autoriteit 15%

Ik was net op zoek naar een antwoord op deze vraag en dit was een van de eerste resultaten. Ik heb het gevoel dat alle antwoorden, inclusief het antwoord dat momenteel als het “beste antwoord” is gekozen, niet ingaan op het probleem waarnaar wordt gevraagd. Het probleem dat wordt gesteld is dat er een overlap is tussen de twee componenten Buttonen ListViewdoordat de ListView het volledige scherm beslaat en de Button visueel zweeft boven (voor) de ListView (blokkering van weergave/toegang tot het laatste item in de ListView)

Op basis van de antwoorden die ik hier en op andere forums heb gezien, ben ik uiteindelijk tot een conclusie gekomen over hoe dit op te lossen.

Oorspronkelijk had ik:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#FF394952">
  <ListView
    android:id="@+id/game_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    />
  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    style="@android:style/ButtonBar">
    <Button
      android:id="@+id/new_game"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/new_game"
      android:textColor="#FFFFFFFF"
      android:background="@drawable/button_background" />
  </LinearLayout>
</RelativeLayout>

Let op het gebruik van RelativeLayoutals het hoofdknooppunt.

Dit is de laatste, werkende versie waarin de knop de ListViewniet overlapt:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#FF394952">
  <ListView
    android:id="@+id/game_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_weight="1.0" />
  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    style="@android:style/ButtonBar">
    <Button
      android:id="@+id/new_game"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/new_game"
      android:textColor="#FFFFFFFF"
      android:background="@drawable/button_background" />
  </LinearLayout>
</LinearLayout>

Er zijn slechts twee verschillen. Ten eerste ben ik overgestapt op het gebruik van een LinearLayout. Dit helpt bij het volgende stukje, namelijk het toevoegen van android:layout_weightaan mijn ListView

Ik hoop dat dit helpt.


Antwoord 4, autoriteit 6%

De beste manier is een relatieve lay-out die de knoppen onder de lijstweergave instelt. In dit voorbeeld zijn de knoppen ook in een lineaire lay-out omdat het gemakkelijker is om ze even groot naast elkaar te plaatsen.

<RelativeLayout android:id="@+id/RelativeLayout01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent">
<ListView android:id="@+id/ListView01" 
android:layout_alignParentTop="true"
android:layout_width="fill_parent" 
android:layout_height="fill_parent">
</ListView>
<LinearLayout android:id="@+id/LinearLayout01" 
android:layout_below="@+id/ListView01" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true">
<Button android:id="@+id/ButtonJoin" 
android:text="Join"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_alignParentBottom="true">
</Button>
<Button android:id="@+id/ButtonJoin" 
android:layout_alignRight="@id/ButtonCancel" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Cancel"
android:layout_alignParentBottom="true">
</Button>
</LinearLayout>
</RelativeLayout>

Antwoord 5

Ik weet dat dit bericht nogal oud is, maar om de vraag van de oorspronkelijke poster te beantwoorden, de reden waarom de code niet werkte, was buttons.getId() geeft -1 terug. Als je dit gaat doen, moet je iets doen als call buttons.setId(10). Als je dat doet, werkt de code prima.


Antwoord 6

de gemakkelijkste oplossing zou zijn om twee lineaire lay-outs te maken, één met de knop en de andere met de lijstweergave (inhoud inpakken op de hoogte van de knop en overeenkomen met ouder op de hoogte van de lijstlay-out). maak dan alleen een scroll view over de layout met de lijst view en de button layout wordt genegeerd. ik hoop dat het helpt, sorry dat ik geen zin had om de code uit te schrijven.


Antwoord 7

dit zou moeten werken. om ook knoppen boven de lijstweergave te hebben, plaatst u de knoppen in een andere lineaire lay-out.

<LinearLayout> main container // vertical
<LinearLayout> scrollview must be contained in a linear layout //vertical - height to fill parent
    <ScrollView> set the height of this to fill parent
        <ListView> will be contained in the scrollview
        </ListView>
    </ScrollView>
</LinearLayout>
<LinearLayout> //horizontal - height to wrap content
<Button>
</Button>
</LinearLayout>
</LinearLayout>

Other episodes