[android] ListView 및 버튼이있는 Android 레이아웃

좋아,이 특정 레이아웃은 나를 짜증나게한다. 그리고 목록보기가 버튼의 상단 위로 확장되지 않도록 하단에 버튼 행이있는 listView를 갖는 방법을 찾지 못하는 것 같으므로 버튼은 항상 화면 하단에 스냅됩니다. 내가 원하는 것은 다음과 같습니다.

죽은 ImageShack 링크 제거

너무 쉬울 것 같지만 내가 시도한 모든 것이 실패했습니다. 도움이 필요하세요?

내 현재 코드는 다음과 같습니다.

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



답변

나는 이것이 당신이 찾고있는 것이라고 생각합니다.

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


답변

나는 오랜 세월 동안 같은 문제를 겪었습니다.

ListView를 버튼 위에 유지하지만 목록이 길 때이를 가리지 않도록하는 해결책은 ListView에 android : layout_weight = “1.0”을 설정하는 것입니다. 버튼의 layout_weight를 설정되지 않은 상태로 두어 원래 크기로 유지하십시오. 그렇지 않으면 버튼의 크기가 조정됩니다. 이것은 LinearLayout에서 작동합니다.

Android ApiDemos에는
ApiDemos / res / layout / linear_layout_9.xml의 예가 있습니다.


답변

이 질문에 대한 답을 찾고 있었는데 이것이 첫 번째 결과 중 하나였습니다. 현재 “우수 답변”으로 선정 된 답변을 포함하여 모든 답변이 질문 된 문제를 해결하지 못하는 것 같습니다. 언급되는 문제가있다 두 성분의 중첩 있다는 ButtonListViewListView에 화면 전체를 차지 것을, 그리고 버튼을 시각적으로 (/ 최후의 찾아보기를 차단의 ListView (앞) 위에 떠 의 항목 ListView)

여기와 다른 포럼에서 본 답변을 바탕으로 마침내이 문제를 해결하는 방법에 대한 결론에 도달했습니다.

원래 나는 :

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

RelativeLayout루트 노드로 의 사용에 유의하십시오 .

이것은 버튼이 다음 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>

두 가지 차이점이 있습니다. 첫째, 저는 LinearLayout. 추가 된 다음 비트와이 의지 도움말 android:layout_weightListView

이게 도움이 되길 바란다.


답변

가장 좋은 방법은 목록보기 아래에 버튼을 설정하는 상대 레이아웃입니다. 이 예에서 버튼은 동일한 크기로 나란히 배치하는 것이 더 쉽기 때문에 선형 레이아웃에 있습니다.

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


답변

이 게시물이 다소 오래되었다는 것을 알고 있지만 원래 포스터의 질문에 답하기 위해 코드가 작동하지 않은 이유는 buttons.getId ()가 -1을 반환했기 때문입니다. 이렇게하려면 call buttons.setId (10)과 같은 작업을 설정해야합니다. 그렇게하면 코드가 잘 작동합니다.


답변

작동합니다. 목록보기 위에 버튼을 추가하려면 다른 선형 레이아웃 안에 버튼을 넣으십시오.

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


답변

가장 쉬운 해결책은 두 개의 선형 레이아웃을 만드는 것입니다. 하나는 버튼이 있고 다른 하나는 목록보기 (버튼 높이에 콘텐츠를 래핑하고 목록 레이아웃 높이에 부모와 일치)가 있습니다. 그런 다음 목록보기가있는 레이아웃 위에 스크롤보기 만 만들면 버튼 레이아웃이 무시됩니다. 도움이되기를 바랍니다. 코드를 작성하고 싶지 않아서 죄송합니다.