Abdul Waheed
Abdul Waheed

Reputation: 4678

How to set list view height programatically in android

I am making an application in which my keyboard comes up on the activity and it hides may header view (layout) I have searched and tried adjust pane state hidden,adjust nothing all the attributes in manifest but nothing solved my problem then I found one the posts over stackover flow that you can calculate the spacing then set the height I implemented but the behaviour is still same this is the sanpshot when activity comes enter image description here

but when keyborad pops up it hides my header view this is snapshot of what's happening enter image description here

this is my manifest code

 <activity
        android:name="com.dd.sproutchat.ChatActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustNothing">
    </activity>

this is my layout of that activity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff">

        <RelativeLayout
            android:id="@+id/TopLayout"
            android:layout_width="match_parent"
            android:layout_height="55dp">

            <ImageButton
                android:id="@+id/btn_back"
                android:layout_width="20dp"
                android:layout_height="30dp"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:background="@drawable/back_icon_2x"
                android:textColor="#000000"
                android:textSize="22sp" />

            <LinearLayout
                android:id="@+id/Image"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_centerVertical="true"
                android:layout_marginLeft="15dp"
                android:layout_toRightOf="@+id/btn_back">

                <Button
                    android:id="@+id/recUserImg"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:background="@drawable/image_circle_shape"
                    android:text=""
                    android:textColor="@color/white"
                    android:visibility="gone" />

                <com.dd.sproutchat.customcontrols.MLRoundedImageView
                    android:id="@+id/userImg"
                    android:layout_width="50dp"
                    android:layout_height="50dp" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_toLeftOf="@+id/btn_Search"
                android:layout_toRightOf="@+id/Image"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/txtUserName"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="start"
                    android:gravity="left"
                    android:singleLine="true"
                    android:text=""
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:textColor="@android:color/black" />

                <TextView
                    android:id="@+id/txtOnlineStatus"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="left"
                    android:singleLine="true"
                    android:text=""
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:textColor="@android:color/black" />
            </LinearLayout>

            <ImageButton
                android:id="@+id/btn_Menu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:background="@drawable/menu_icon_2x"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/btn_Search"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:background="@drawable/search_icon_2x" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/Rl_line"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_below="@+id/TopLayout"
            android:background="@color/chat_border"></RelativeLayout>

        <RelativeLayout
            android:id="@+id/Rl_Options"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_below="@+id/Rl_line"
            android:background="@color/chat_options_bg">

            <ImageButton
                android:id="@+id/btn_Home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="20dp"
                android:background="@drawable/home_btn_active_2x" />

            <ImageButton
                android:id="@+id/btn_SproutesList"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:background="@drawable/chat_btn_2x" />

            <ImageButton
                android:id="@+id/btn_Note"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="20dp"
                android:background="@drawable/note_btn_2x" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/Rl_line2"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_below="@+id/Rl_Options"
            android:background="@color/chat_border"></RelativeLayout>

        <RelativeLayout
            android:id="@+id/Rl_ChatLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/Rl_MessageLayout"
            android:layout_below="@+id/Rl_line2">

            <!-- android:background="@drawable/chat_bg_2x" -->

            <RelativeLayout
                android:id="@+id/Btn_Chats"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:orientation="horizontal"
                android:weightSum="4">

                <RelativeLayout
                    android:id="@+id/count"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:visibility="gone">

                    <ImageButton
                        android:id="@+id/btn_Sortby"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_marginLeft="10dp"
                        android:background="@drawable/icon_sortby_sprout_2x" />

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_marginLeft="20dp"
                        android:layout_marginRight="20dp"
                        android:layout_toLeftOf="@+id/btn_AddSprout"
                        android:layout_toRightOf="@+id/btn_Sortby"
                        android:weightSum="2">

                        <Button
                            android:id="@+id/btn_AllSprouts"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:background="@drawable/btn_blue"
                            android:paddingBottom="3dp"
                            android:paddingLeft="25dp"
                            android:paddingRight="25dp"
                            android:paddingTop="3dp"
                            android:text="@string/AllSprouts"
                            android:textColor="@color/white" />

                        <Button
                            android:id="@+id/btn_AllFavorites"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="30dp"
                            android:layout_weight="1"
                            android:background="@drawable/btn_blank"
                            android:paddingBottom="3dp"
                            android:paddingLeft="15dp"
                            android:paddingRight="15dp"
                            android:paddingTop="3dp"
                            android:text="@string/AllFavorites"
                            android:textColor="@color/grey_start" />
                    </LinearLayout>

                    <ImageButton
                        android:id="@+id/btn_AddSprout"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_marginRight="10dp"
                        android:background="@drawable/icon_add_sprout_2x" />
                </RelativeLayout>

                <RelativeLayout
                    android:id="@+id/noteLayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:paddingBottom="10dp"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:visibility="gone">

                    <EditText

                        android:id="@+id/searchBar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_toLeftOf="@+id/imageButton4" />

                    <ImageButton
                        android:id="@+id/imageButton4"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="10dp"
                        android:layout_toLeftOf="@+id/imageButton5"
                        android:background="@drawable/sort" />

                    <ImageButton
                        android:id="@+id/imageButton5"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_marginLeft="10dp"
                        android:background="@drawable/add" />
                </RelativeLayout>
            </RelativeLayout>

            <ListView
                android:id="@+id/Lv_Chat"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/Btn_Chats"
                android:layout_above="@+id/Rl_MessageLayout"
                android:divider="@null"
                android:dividerHeight="0dp"
                android:paddingBottom="10dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:paddingTop="10dp"
                android:scrollbars="none"
                android:stackFromBottom="true"
                android:transcriptMode="normal"></ListView>
            <RelativeLayout
                android:id="@+id/Rl_MessageLayout"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_alignParentBottom="true"
                android:background="@color/chat_screen_bottom">

                <ImageButton
                    android:id="@+id/btn_Attachment"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/attachment_icon_white_2x" />

                <EditText
                    android:id="@+id/edt_message"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:layout_toLeftOf="@+id/btn_Send"
                    android:layout_toRightOf="@+id/btn_Attachment"
                    android:background="@drawable/txt_field"
                    android:imeOptions="actionDone"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:singleLine="true"
                    />

                <ImageButton
                    android:id="@+id/btn_Send"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/icon_send_white_2x" />
            </RelativeLayout>
        </RelativeLayout>


    </RelativeLayout>

</RelativeLayout> 

and this is my activity code for calculating height of listview

private static boolean keyboardHidden = true;
    private static int reduceHeight =0;

    final View decorView = this.getWindow().getDecorView();
    decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            Rect rect = new Rect();
            decorView.getWindowVisibleDisplayFrame(rect);
            int displayHeight = rect.bottom - rect.top;
            int height = decorView.getHeight();
            boolean keyboardHiddenTemp = (double) displayHeight / height > 0.8;
            int mylistviewHeight = Lv_Chat.getMeasuredHeight();
            if (keyboardHiddenTemp != keyboardHidden) {
                keyboardHidden = keyboardHiddenTemp;
                if (!keyboardHidden) {
                    reduceHeight = height - displayHeight;
                    RelativeLayout.LayoutParams mParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, mylistviewHeight - reduceHeight);
                    Lv_Chat.setLayoutParams(mParam);
                    Lv_Chat.requestLayout();
                } else {
                    RelativeLayout.LayoutParams mParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, mylistviewHeight + reduceHeight);
                    Lv_Chat.setLayoutParams(mParam);
                    Lv_Chat.requestLayout();
                }
            }
        }
    });

I have also tried this link for setting xml file http://codetheory.in/android-add-views-view-groups-listview-gridview/

any help please

Upvotes: 1

Views: 992

Answers (2)

Virginia Woolf
Virginia Woolf

Reputation: 1268

I think you should use adjustResize instead of adjustNothing and add android:fitsSystemWindows="true" in your root RelativeLayout instead of programmatically trying to resize your views.

Upvotes: 1

Sharp Edge
Sharp Edge

Reputation: 4192

To change the height of ListView you should use LayoutParams:

ViewGroup.LayoutParams param = listView.getLayoutParams();
param.height = anynumberhere;
listView.setLayoutParams(param);
listView.requestLayout();

According to your question, this is the way to change the ListView's height, but i don't think its the rite approach to make that header of yours stay in its place.

Upvotes: 2

Related Questions