android SearchView上的边距太大

jv4diomz  于 2023-02-02  发布在  Android
关注(0)|答案(8)|浏览(198)

我的SearchView显示如下:

正如您所看到的,在SearchView的search_edit_frame上和SearchView本身的外部都有一个边距。

这是从哪里来的?检查布局发现search_edit_frame左侧有24像素的边距,但其他地方没有边距。
如何删除这些多余的空间?
menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/appbar_menu_search"
        android:icon="@drawable/ic_search"
        android:title="@string/search_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

布局:

<RelativeLayout

    android:id="@+id/root_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/profile_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/topbar_gradient"
        android:theme="@style/AppTheme.Dark"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/topbar_gradient"
            android:fitsSystemWindows="true"
            android:minHeight="?android:attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways">

        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>

    (...)
</RelativeLayout>

我用“Jimmy's answer”(吉米的答案)来减少间隔:

然而,在“后退”图像按钮和搜索视图之间仍然有很大的差距。

wztqucjr

wztqucjr1#

search_edit_framesearchview布局中的LinearLayout。默认情况下,它的起始边距和结束边距为8dip。
source中的相关代码

<LinearLayout
        android:id="@+id/search_edit_frame"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_marginStart="8dip"
        android:layout_marginEnd="8dip"
        android:orientation="horizontal"
        android:layoutDirection="locale">

您的问题可能是因为它的起始边距。您可以从搜索视图中获取此线性布局,并设置布局参数以减少Activity中差距(可能是在onCreateOptionsMenu或类似的searchview中膨胀)。
类似这样,假设searchView是您的SearchView示例,

LinearLayout searchFrameLL=(LinearLayout)searchView.findViewById(R.id.search_edit_frame);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,  LinearLayout.LayoutParams.MATCH_PARENT);
        params.setMargins(0,0,8,0); //params.setMargins(left, top, right, bottom)
       // params.setMarginStart(0);  //(or just use individual like this
        searchFrameLL.setLayoutParams(params);

以类似的方式,您可以更新该XML中的其他属性以满足您的需要。

lmyy7pcs

lmyy7pcs2#

我不知道这是否有帮助,但我也有一个不想要的边距在工具栏视图。This answer关于内容插入帮助我解决了这个问题。

<android.support.v7.widget.Toolbar
     xmlns:app="schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@color/primaryColor"
     android:contentInsetLeft="0dp"
     android:contentInsetStart="0dp"
     app:contentInsetLeft="0dp"
     app:contentInsetStart="0dp"
     android:contentInsetRight="0dp"
     android:contentInsetEnd="0dp"
     app:contentInsetRight="0dp"
     app:contentInsetEnd="0dp" />
7uzetpgm

7uzetpgm3#

由于MenuItem,因此会有少量填充。您可以重置内容插入填充。尝试将contentInsetStartWithNavigation属性设置为0dp。

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

    <android.support.design.widget.AppBarLayout
        android:id="@+id/profile_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:contentInsetStartWithNavigation="0dp"
            android:background="@color/colorAccent"
            android:minHeight="?android:attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways">

        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>

</RelativeLayout>
mzmfm0qo

mzmfm0qo4#

您可以将leftMargin设置为零,以获得所需的结果:

LinearLayout searchEditFrame = (LinearLayout) searchView.findViewById(R.id.search_edit_frame);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) searchEditFrame.getLayoutParams();
layoutParams.leftMargin = 0;
fcg9iug3

fcg9iug35#

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/profile_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:contentInsetEnd="0dp"
            android:contentInsetLeft="0dp"
            android:contentInsetRight="0dp"
            android:contentInsetStart="0dp"
            android:fitsSystemWindows="true"
            android:minHeight="?android:attr/actionBarSize"
            app:contentInsetLeft="0dp"
            app:contentInsetStart="0dp"
            app:layout_scrollFlags="scroll|enterAlways">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_back_arrow" />

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:textColor="@android:color/white" />

        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>

</RelativeLayout>
o2gm4chl

o2gm4chl6#

在视图上使用android:layout_gravity="right"

camsedfj

camsedfj7#

对于Kotlin

var searchView = searchItem.actionView as SearchView
val searchEditFrame: LinearLayout =
searchView!!.findViewById<View>(R.id.search_edit_frame) as LinearLayout
val layoutParams: LinearLayout.LayoutParams =
searchEditFrame.layoutParams as LinearLayout.LayoutParams
layoutParams.leftMargin = -10

k3fezbri

k3fezbri8#

也许已经太晚了,但我会在这里发布我的解决方案,以防它帮助任何人。我的SearchView是在应用程序栏下,总是可见的,但过多的margin之间的视图开始和图标它仍然存在。我的解决方案是在xml上的SearchView是声明,我只是补充说:

android:layout_width="match_parent"
android:paddingStart="-5dp"

相关问题