ListView ve Düğmelerle Android Düzeni


101

Pekala, bu özel düzen beni canımı sıkıyor. Ve altta bir sıra düğme bulunan bir listView'e sahip olmanın bir yolunu bulamıyor gibi görünüyor, böylece liste görünümü düğmelerin üstüne uzanmıyor ve bu nedenle düğmeler her zaman ekranın altına yapıştırılıyor. İşte istediğim şey:

ölü ImageShack bağlantısı kaldırıldı

Görünüşe göre çok kolay olmalı, ama denediğim her şey başarısız oldu. Herhangi bir yardım?

İşte mevcut kodum:

    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);

Güzel soru, birçok geliştirici buna takılıp kalacak.
Signcodeindie

Neyse ki, Android'deki tasarımcı aslında oldukça tatlı. Bu nedenle, bir düzen / kullanıcı arayüzü oluştururken, Tasarımcı / XML kullanmayı deneyin. Özellikle bu senaryo için, çünkü yalnızca bir dizi düğme ve bir ListView.
2014

Yanıtlar:


137

Sanırım aradığınız şey bu.

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

Temelde kullandığım şey buydu, ancak düzeni Java ile yazıyorum. ListView hala düğmelerin üzerine uzanmaktadır.
Kleptine 05

1
Değiştirdiğim tek şey, ListView etrafına bir relativeLayout eklememdir, çünkü bir ListView üzerinde addRule (RelativeLayout.ABOVE) 'u çağıramıyorum.
Kleptine 05

2
Bu kod iyi çalışmalıdır. android:layout_above="@id/testbutton"tutacak ListViewyukarıda Button.
CommonsWare

Bunu kullandığımda, listenin düğmenin üzerinde durmasını ve ardından dahili olarak kaydırmaya başladığını görüyorum.
lars

7
Sen demiyorlar addRule(RelativeLayout.ABOVE)bir üstünde RelativeLayoutya. Bir RelativeLayout.LayoutParams. Daha sonra ListViewbunu RelativeLayoutsağlayarak , ' e eklersiniz RelativeLayout.LayoutParams. Uzun süreli bakım için lütfen XML'e geçmeyi ve onu şişirmeyi düşünün.
CommonsWare

57

Yıllardır aynı sorunu yaşadım.

ListView'ı düğmelerin üzerinde tutmanın, ancak liste uzun olduğunda bunları örtmesini önlemenin çözümü, ListView'de android: layout_weight = "1.0" ayarlamaktır. Doğal boyutlarında kalmaları için düğmelerin üzerindeki layout_weight'i bırakın, aksi takdirde düğmeler ölçeklenir. Bu, LinearLayout ile çalışır.

Android ApiDemos'ta bir örnek var: ApiDemos / res / layout / linear_layout_9.xml


bana birkaç saat daha kazandır. Düğmelerin neden hiç görünmediğini anlayamadım. :)
frostymarvelous

Bunun neden işe yaradığını tam olarak anlamıyorum ama işe yarıyor :)
Bevor

20

Sadece bu soruya bir cevap arıyordum ve bu ilk sonuçlardan biriydi. Şu anda "en iyi yanıt" olarak seçilen yanıt da dahil olmak üzere tüm yanıtların, sorulan konuyu ele almadığını hissediyorum. Belirtilen sorun, iki bileşenin örtüşmesi Buttonve ListViewListView tüm ekranı kaplaması ve Düğmenin görsel olarak ListView üzerinde (önünde) süzülmesidir (sonuncunun engelleme görünümü / erişimi) içindeki öğe ListView)

Burada ve diğer forumlarda gördüğüm cevaplara dayanarak, sonunda bunun nasıl çözüleceğine dair bir sonuca vardım.

Başlangıçta şunlara sahiptim:

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

RelativeLayoutKök düğüm olarak kullanımına dikkat edin.

Bu, Düğmenin aşağıdakilerle çakışmadığı son, çalışan sürümdür ListView:

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

Sadece iki fark var. İlk olarak, a kullanmaya geçtim LinearLayout. Ekleyerek ertesi bit ile bu irade yardım android:layout_weightetmek benimListView

Umarım bu yardımcı olur.


Bu çözer, ama kim tahmin eder ki !? Bir ebeveynin android:layout_alignParentBottomiçinde verdiğinizde LinearLayout, ADT "Doğrusal Düzende geçersiz düzen parametresi: layout_alignParentBottom" der!
Aswin Kumar

8

En iyi yol, liste görünümünün altındaki düğmeleri ayarlayan göreceli bir düzendir. Bu örnekte düğmeler de doğrusal bir düzendedir çünkü onları yan yana eşit boyutta yerleştirmek daha kolaydır.

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

Sorun, liste görünümü çok uzunsa, alttaki Düğmelerin üstüne uzanmasıdır. Düğmelerin üzerinde nasıl durdurulacağını çözemiyorum.
Kleptine 05

2
Kullanıyorsanız (sanırım 1.5, belki 1.6), RelativeLayout kurallarını kullanırken ListView'den ÖNCE düğmelere sahip olmanız GEREKİR - aksi takdirde, düzen Düğmelerin farkında değildir, çünkü onları sırayla okur, bu yüzden ListView genişler onları geç.
Tim H

Bu benim için çalışmıyor. Tim H'nin dediği gibi, benim için ListView'ı LinearLayout'tan sonra koymalı ve sonra yukarıdaki repoc'un cevabı gibi ListView layout_above yapmalıyım.
Nemi

bu çalışmayacak, düğme ekranda olmayacak ve kaydırılmayacak
Vaibhav Mishra

1

Bu gönderinin oldukça eski olduğunu biliyorum, ancak orijinal posterin sorusuna cevap vermek için kodun çalışmamasının nedeni buttons.getId () -1 döndürür. Bunu yapacaksanız, call buttons.setId (10) gibi bir şey ayarlamanız gerekir. Bunu yaparsanız, kod gayet iyi çalışır.


0

bu çalışmalı. liste görünümünün üzerinde düğmeler bulundurmak için düğmeleri başka bir doğrusal düzenin içine yerleştirin.

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

0

en kolay çözüm, biri düğme ve diğeri liste görünümü ile olmak üzere iki doğrusal düzen oluşturmaktır (İçeriği düğme yüksekliğine sarın ve liste düzeni yüksekliğindeki ana öğeyle eşleşin). daha sonra liste görünümüyle düzen üzerinde yalnızca kaydırma görünümü yapın ve düğme düzeni yok sayılacaktır. umarım yardımcı olur, üzgünüm kodu yazmak istemedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.