Android appcompat toolbar stretches when searchview gets focus

前端 未结 10 1712
猫巷女王i
猫巷女王i 2020-12-08 08:08

I\'m updating an app to use the new Toolbar instead of the regular ActionBar. In my app the user must be able to select a contact from their contac

相关标签:
10条回答
  • 2020-12-08 08:36

    I had the same issue with a SearchView on a Toolbar with a TextView and Spinner in it. Closing the SearchView (either by pressing the Toolbar back button or by switching to a different tab in the ViewPager) caused the Toolbar to stretch out to just below the top of the keyboard.

    I solved it by placing an extra layout around the views in my Toolbar.

    Before:

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
            <TextView             
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    
    </android.support.v7.widget.Toolbar>
    

    After

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
    
            <TextView 
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
            <Spinner             
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    
        </LinearLayout>
    
    </android.support.v7.widget.Toolbar>
    
    0 讨论(0)
  • 2020-12-08 08:43

    The accepted answer works fine, however I needed an alternative that would allow to view the Toolbar under translucent status bar.

    The problem is that Toolbar uses paddings to cover for system components. As a result, the paddingBottom of the Toolbar is being set to soft keyboard's height whenever the keyboard appears. Solution was to reset the padding before calling super.onMeasure in my custom Toolbar class:

    public class MyToolbar extends Toolbar {
    
       (...)
    
       @Override
       protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
           setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), 0);
           super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
    
    0 讨论(0)
  • 2020-12-08 08:45

    I had the same problem than OP, I tried the android:fitsSystemWindows="true" solution, but it was half resolved: the searchview didn't expand anymore but the notification bar (top of screen) became totally white (like the layout background) instead of red (my app theme).

    I found an alternative way and it's working like a charm, so for those who are stuck, try this:

    In your manifest, just add this line in your activity section:

    android:windowSoftInputMode="adjustPan"

    Example:

    <activity
        android:name=".MainActivity"
        android:windowSoftInputMode="adjustPan"
        android:label="My main activity" >
    </activity>
    
    0 讨论(0)
  • 2020-12-08 08:47

    Ok, I figured it out. There was no problem with the SearchView, because the same happened with ordinary EditTexts which were placed normally inside a layout xml. The Toolbar wasn't the problem either.

    I created an empty activity and played around with anything I changed in my app and finally came to my theme. On KitKat and later I had <item name="android:windowTranslucentStatus">true</item> set on the theme, so the navigation drawer would appear behind the status bar.

    Disabling/removing this would resolve the issue. This reminded me of the android:fitsSystemWindows="true" property. It is set on the Toolbar, but not in the layout xml of the main activity that contains the DrawerLayout. I guess the DrawerLayout sets itself to fit the system windows. E.g. there's no fitSystemWindows property here:

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".DashboardActivity">
    

    The activity where the problem occurred did not have a NavigationDrawer, it was a new activity. Setting android:fitsSystemWindows="true" on the root node of the layout of the activity made things work fine.

    So, for anyone to read this: if you have <item name="android:windowTranslucentStatus">true</item> in your theme, make sure any root node containing a toolbar contains a android:fitsSystemWindows="true".

    Working sample:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:orientation="vertical">
    
        <include layout="@layout/toolbar" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
    
                <EditText
                    android:id="@+id/editText"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:singleLine="true" />
    
                <Button
                    android:id="@+id/button2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="New Button" />
            </LinearLayout>
    </LinearLayout>
    
    0 讨论(0)
  • 2020-12-08 08:47

    I ran into a similar issue and setting showAsAction="always|collapseActionView" inside the Search Menu Item (menu.xml) solved the stretching of the toolbar for me.

    0 讨论(0)
  • 2020-12-08 08:48

    I had same issue like this but did't help above answers but after lots of search found something.

    may help you too.!!

    after add this attribute in toolbar

    android:layout_height="?attr/actionBarSize"

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/ToolBarStyle"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/myPrimaryColor"
    android:minHeight="@dimen/abc_action_bar_default_height_material" >
    
    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="@color/myTextPrimaryColor"
        android:layout_gravity="center" />
    
    </android.support.v7.widget.Toolbar>
    
    0 讨论(0)
提交回复
热议问题