[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의 예가 있습니다.
답변
이 질문에 대한 답을 찾고 있었는데 이것이 첫 번째 결과 중 하나였습니다. 현재 “우수 답변”으로 선정 된 답변을 포함하여 모든 답변이 질문 된 문제를 해결하지 못하는 것 같습니다. 언급되는 문제가있다 두 성분의 중첩 있다는 Button
및 ListView
ListView에 화면 전체를 차지 것을, 그리고 버튼을 시각적으로 (/ 최후의 찾아보기를 차단의 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_weight
내ListView
이게 도움이 되길 바란다.
답변
가장 좋은 방법은 목록보기 아래에 버튼을 설정하는 상대 레이아웃입니다. 이 예에서 버튼은 동일한 크기로 나란히 배치하는 것이 더 쉽기 때문에 선형 레이아웃에 있습니다.
<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>
답변
가장 쉬운 해결책은 두 개의 선형 레이아웃을 만드는 것입니다. 하나는 버튼이 있고 다른 하나는 목록보기 (버튼 높이에 콘텐츠를 래핑하고 목록 레이아웃 높이에 부모와 일치)가 있습니다. 그런 다음 목록보기가있는 레이아웃 위에 스크롤보기 만 만들면 버튼 레이아웃이 무시됩니다. 도움이되기를 바랍니다. 코드를 작성하고 싶지 않아서 죄송합니다.