아래에 버튼을 표시하고 싶습니다 ListView
. 문제는 ListView
확장되면 (항목 추가 …) 버튼이 화면 밖으로 눌려진다는 것입니다.
LinearLayout
가중치를 사용 하여 시도했지만 ( Android 에서 제안한대로 : View에 maxHeight가없는 이유는 무엇입니까? ) 가중치가 잘못되었거나 단순히 작동하지 않았습니다.
또한 어딘가에서 RelativeLayout
. 은 ListView
다음과 버튼 위에 설정됩니다 android:layout_above
PARAM.
이것의 문제는 나중에 버튼을 배치하는 방법을 모른다는 것입니다. 내가 찾은 예에서 아래의보기 ListView
는를 사용하여 조정 android:layout_alignParentBottom
되었지만 내 버튼이 화면 하단에 달라 붙는 것을 원하지 않습니다.
setHeight 메서드를 사용하고 필요한 공간을 계산하는 것 외에 다른 아이디어가 있습니까?
편집 :
유용한 답변이 많이 있습니다.
-
bigstone 및 user639183의 솔루션 은 거의 완벽하게 작동했습니다. 그러나 버튼 하단에 여백을 추가해야했습니다. 버튼이 여전히 화면에서 반쯤 밀려 나왔지만 중지되었습니다.
-
상대 레이아웃에 대한 Adinia의 대답은 버튼을 화면 하단에 고정하려는 경우에만 좋습니다. 내가 의도 한 것은 아니지만 여전히 다른 사람들에게 유용 할 수 있습니다.
-
AngeloS의 솔루션은 내가 원하는 효과를 만들었 기 때문에 마지막에 선택한 솔루션이었습니다. 그러나
LinearLayout
버튼 주변에 두 가지 사소한 변경을가했습니다 .-
내 레이아웃에있는 절대 값을 갖고 싶어하지 않았다 첫째, 나는 변화
android:layout_height="45px"
에wrap_content
뿐만 아니라 잘 작동한다. -
둘째, vertical로만 지원되는 버튼이 수평 중앙에 위치하기를 원했기 때문에
LinearLayout
android : orientation = “horizontal”을 “vertical”로 변경했습니다.
AngeloS는 또한 그의 초기 게시물
android:layout_weight="0.1"
에서LinearLayout
주변의 매개 변수ListView
가 어떤 영향을 미쳤 는지 확실하지 않다고 말했습니다 . 나는 방금 시도했고 실제로 그렇습니다! 그렇지 않으면 버튼이 다시 화면 밖으로 밀려납니다. -
답변
나는이 정확한 문제가 있었고 그것을 해결하기 위해 각각 및 각각 LinearLayouts
을 수용 하기 위해 두 개의 분리 를 만들었습니다 . 거기에서 두 가지를 모두 넣고 해당 컨테이너 를 . 나는 또한의 무게 설정 을 보관 에를 하지만 어떤 효과가 있을지 모릅니다. 여기에서 버튼이있는 하단 컨테이너의 높이를 원하는 높이로 설정할 수 있습니다.ListView
Button
Linear Layout
android:orientation
vertical
LinearLayout
ListView
0.1
이것이 내가 의미하는 바를 편집 하십시오.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.1"
android:orientation="horizontal">
<ListView
android:id="@+id/ListView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:dividerHeight="2px"></ListView>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="45px"
android:background="@drawable/drawable"
android:orientation="horizontal">
<Button
android:id="@+id/moreButton"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:background="@drawable/btn_more2"
android:paddingRight="20px" />
</LinearLayout>
위의 해결 방법은 화면 하단의 버튼을 수정합니다.
목록의 맨 아래에있는 버튼 플로트를하려면의 높이 변경 ListView01
에를 wrap_content
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.1"
android:orientation="horizontal">
<ListView
android:id="@+id/ListView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:dividerHeight="2px"></ListView>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="45px"
android:background="@drawable/drawable"
android:orientation="horizontal">
<Button
android:id="@+id/moreButton"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:background="@drawable/btn_more2"
android:paddingRight="20px" />
</LinearLayout>
답변
코드에서이 문제를 해결하여 5 개 이상의 항목이있는 경우에만 listview의 높이를 설정했습니다.
if(adapter.getCount() > 5){
View item = adapter.getView(0, null, listView);
item.measure(0, 0);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, (int) (5.5 * item.getMeasuredHeight()));
listView.setLayoutParams(params);
}
최대 높이를 단일 항목 높이의 5.5 배로 설정 했으므로 사용자는 스크롤해야 할 작업이 있음을 확실히 알 수 있습니다. 🙂
답변
마지막 편집 android:layout_above="@+id/butt1"
에서 ListView 코드 도 추가하면 됩니다.
그리고 당신이 정말로 하나보다 더 사용할 필요가 없습니다 있음 (및 이전에 대한 답변을하려고 여기에 모든 사람을) 보여 RelativeLayout
여기, 수정 된 코드 :
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bkg">
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView1"
android:layout_alignParentTop="true">
</TextView>
<TextView
android:id="@+id/textView2"
android:layout_below="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView2"
android:layout_centerHorizontal="true">
</TextView>
<Button
android:id="@+id/butt1"
android:text="string/string3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true">
</Button>
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dip"
android:layout_marginBottom="2dip"
android:drawSelectorOnTop="false"
android:visibility="visible"
android:layout_below="@+id/textView2"
android:layout_above="@+id/butt1" />
</RelativeLayout>
그리고 그 결과 , 어떤 임의의 목록을 사용하여 :
답변
를 사용 LinearLayout
하여 ListView
및 Button
에 높이를 설정하고 wrap_content
에 weight = 1을 추가합니다 ListView
. 원하는대로 작동합니다.
그리고 예, 설정 layout_gravity
의를 Button
에bottom
답변
AngeloS의 솔루션에서 영감을 얻은 중첩 컨테이너를 사용하지 않고이를 수행하는 방법을 찾았습니다.
나는 버튼 LinearLayout
이있는 세로 방향 의 를 사용했습니다 ListView
. 내가 설정 android:layout_weight="0.1"
위해 ListView
.
항상 목록의 맨 아래에 버튼 스틱을 가져옵니다. 그리고 목록이 커질 때 버튼이 화면에서 밀리지 않습니다.
<ListView
android:id="@+id/notes_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.1"
/>
<Button
android:id="@+id/create_note_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onCreateButtonClicked"
android:text="@string/create_notes"
/>
답변
RelativeLayout
버튼이 바닥에 너무 가깝게 유지되는 것을 원하지 않는 경우 여백을 추가 할 수 있습니다 (버튼을 패딩하면 9 패치 배경을 사용하고 자체 패딩을 설정하기 때문에 버튼이 깨질 수 있음).
a를 사용한 경우에도 동일 LinearLayout
합니다. 원하는 것을 달성하는 방법은을 ListView
height = 0 및 weight = 1로 설정하고 button height = wrap_content 및 weight = 0으로 설정하는 것입니다. (user639183이 말했듯이 둘 다 wrap_content로 설정하면 ListView
의 높이가 제한되지 않습니다 ).
답변
중첩 된 컨테이너를 사용하여이 작업을 수행 할 수 있습니다. 더 많은 공간을 차지하도록 두 번째 (내부) 컨테이너에 Button을 래핑하고 Button을 내부 컨테이너 상단에 정렬해야 할 수 있습니다.
다음과 같은 것이 가능합니다.
RelativeLayout
— 목록보기
-RelativeLayout
—- 버튼
두 컨테이너에서 서로 다른 정렬 옵션을 사용하면이 작업을 수행 할 수 있습니다.