I want to show a button under a ListView
. Problem is, if the ListView
gets extended (items added...), the button is pushed out of the screen.
I tried a LinearLayout
with weights (as suggested in Android: why is there no maxHeight for a View?), but either I got the weights wrong or it simply didn't work.
Also, I found somewhere the hint to use a RelativeLayout
. The ListView
would then be set above the button with the android:layout_above
param.
Problem with this is that I don't know how to position the button afterwards. In the example I found, the View below the ListView
was adjusted using android:layout_alignParentBottom
, but I don't want my button to cling to the bottom of the screen.
Any ideas apart from using setHeight-method and some calculating of the required space?
Edit: I got a lot of useful answers.
bigstone's & user639183's solution almost worked perfectly. However, I had to add an extra padding/margin to the bottom of the button, as it still would be pushed half way out of the screen (but then stopped)
Adinia's answer with the relative layout only is fine if you want the button fixed to the bottom of the screen. It's not what I intended but still might be useful for others.
AngeloS's solution was the one I chose at the end as it just created the effects I wanted. However, I made two minor changes to the LinearLayout
around the button:
First, as I didn't want to have any absolute values in my layout, I changed android:layout_height="45px"
to wrap_content
, which works just fine as well.
Second, as I wanted the button to be centered horizontally, which is only supported by vertical LinearLayout
, I changed android:orientation="horizontal" to "vertical".
AngeloS also stated in his initial post that he was not sure if the android:layout_weight="0.1"
param in the LinearLayout
around the ListView
had any effect; I just tried and it actually does! Without, the button gets pushed out of the screen again.
I solved this problem in code, setting height of listview only if it has more than 5 items in it:
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);
}
Notice that I set the max height to 5.5 times the height of a single item, so the user will know for sure there is some scrolling to do! :)