导航
  • 主页
  • 音视频
  • Camera
  • UI
  • 协议
  • SDK
  • NDK
  • Flutter
  • ADB
  • Android Studio
  • 模拟器
  • 问答

为什么searchView的子控件是TextView不是EditText?

walkuere 2019-07-03 02:20:27
searchView是一个搜索栏,里面的文字当然是用户可编辑的
老板让我能在屏幕中间输入,搞了一周了,我希望是 popup或者dialog这样,可以点在屏幕外面就删除的
找了好几个模板,但是人家都是最多给你封装为EditText,没有TextView的
我觉得searchView可以看作一个ViewGroup,里面包含的成员变量R.id.search_src_text
但它就是个TextView,真奇怪
...全文
175 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkuere 2019-07-24
哦我会了,左上角android改为project
感谢1130198893
回复
walkuere 2019-07-23
引用 1 楼 assky124 的回复:
SearchView 从LinearLayout派生的。有源码直接看就行了

<?xml version="1.0" encoding="utf-8"?>
<!--
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<!-- This is actually used for the badge icon *or* the badge label (or neither) -->
<TextView
android:id="@+id/search_badge"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_marginBottom="2dip"
android:drawablePadding="0dip"
android:textAppearance="?attr/textAppearanceMedium"
android:textColor="?attr/textColorPrimary"
android:visibility="gone" />

<ImageView
android:id="@+id/search_button"
style="?attr/actionButtonStyle"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:focusable="true"
android:contentDescription="@string/searchview_description_search"
android:tooltipText="@string/searchview_description_search" />

<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">

<ImageView
android:id="@+id/search_mag_icon"
android:layout_width="@dimen/dropdownitem_icon_width"
android:layout_height="wrap_content"
android:scaleType="centerInside"
android:layout_marginStart="@dimen/dropdownitem_text_padding_left"
android:layout_gravity="center_vertical"
android:visibility="gone" />

<!-- Inner layout contains the app icon, button(s) and EditText -->
<LinearLayout
android:id="@+id/search_plate"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:orientation="horizontal">

<view class="android.widget.SearchView$SearchAutoComplete"
android:id="@+id/search_src_text"
android:layout_height="36dip"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:paddingStart="@dimen/dropdownitem_text_padding_left"
android:paddingEnd="@dimen/dropdownitem_text_padding_right"
android:singleLine="true"
android:ellipsize="end"
android:background="@null"
android:inputType="text|textAutoComplete|textNoSuggestions"
android:imeOptions="actionSearch"
android:dropDownHeight="wrap_content"
android:dropDownAnchor="@id/search_edit_frame"
android:dropDownVerticalOffset="0dip"
android:dropDownHorizontalOffset="0dip" />

<ImageView
android:id="@+id/search_close_btn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingStart="8dip"
android:paddingEnd="8dip"
android:layout_gravity="center_vertical"
android:background="?attr/selectableItemBackgroundBorderless"
android:focusable="true"
android:contentDescription="@string/searchview_description_clear" />

</LinearLayout>

<LinearLayout
android:id="@+id/submit_area"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent">

<ImageView
android:id="@+id/search_go_btn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:paddingStart="16dip"
android:paddingEnd="16dip"
android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="gone"
android:focusable="true"
android:contentDescription="@string/searchview_description_submit" />

<ImageView
android:id="@+id/search_voice_btn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:paddingStart="16dip"
android:paddingEnd="16dip"
android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="gone"
android:focusable="true"
android:contentDescription="@string/searchview_description_voice" />
</LinearLayout>
</LinearLayout>
</LinearLayout>



请问您这个文件怎么看
回复
walkuere 2019-07-04
引用 2 楼 assky124 的回复:
真正的输入框是 AutoCompleteTextView 是从EditText派生的


谢谢,不知为什么我这里fvbi(search_src_text)返回instanceof 可以是TextView而不是EditText
大概我用了androidX
回复
assky124 2019-07-04
真正的输入框是 AutoCompleteTextView 是从EditText派生的
回复
assky124 2019-07-04
SearchView 从LinearLayout派生的。有源码直接看就行了

<?xml version="1.0" encoding="utf-8"?>
<!--
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

-->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_bar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <!-- This is actually used for the badge icon *or* the badge label (or neither) -->
    <TextView
        android:id="@+id/search_badge"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:layout_marginBottom="2dip"
        android:drawablePadding="0dip"
        android:textAppearance="?attr/textAppearanceMedium"
        android:textColor="?attr/textColorPrimary"
        android:visibility="gone" />

    <ImageView
        android:id="@+id/search_button"
        style="?attr/actionButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center_vertical"
        android:focusable="true"
        android:contentDescription="@string/searchview_description_search"
        android:tooltipText="@string/searchview_description_search" />

    <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">

        <ImageView
            android:id="@+id/search_mag_icon"
            android:layout_width="@dimen/dropdownitem_icon_width"
            android:layout_height="wrap_content"
            android:scaleType="centerInside"
            android:layout_marginStart="@dimen/dropdownitem_text_padding_left"
            android:layout_gravity="center_vertical"
            android:visibility="gone" />

        <!-- Inner layout contains the app icon, button(s) and EditText -->
        <LinearLayout
            android:id="@+id/search_plate"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"
            android:orientation="horizontal">

            <view class="android.widget.SearchView$SearchAutoComplete"
                android:id="@+id/search_src_text"
                android:layout_height="36dip"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_gravity="center_vertical"
                android:paddingStart="@dimen/dropdownitem_text_padding_left"
                android:paddingEnd="@dimen/dropdownitem_text_padding_right"
                android:singleLine="true"
                android:ellipsize="end"
                android:background="@null"
                android:inputType="text|textAutoComplete|textNoSuggestions"
                android:imeOptions="actionSearch"
                android:dropDownHeight="wrap_content"
                android:dropDownAnchor="@id/search_edit_frame"
                android:dropDownVerticalOffset="0dip"
                android:dropDownHorizontalOffset="0dip" />

            <ImageView
                android:id="@+id/search_close_btn"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:paddingStart="8dip"
                android:paddingEnd="8dip"
                android:layout_gravity="center_vertical"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:focusable="true"
                android:contentDescription="@string/searchview_description_clear" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/submit_area"
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/search_go_btn"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center_vertical"
                android:paddingStart="16dip"
                android:paddingEnd="16dip"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:visibility="gone"
                android:focusable="true"
                android:contentDescription="@string/searchview_description_submit" />

            <ImageView
                android:id="@+id/search_voice_btn"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center_vertical"
                android:paddingStart="16dip"
                android:paddingEnd="16dip"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:visibility="gone"
                android:focusable="true"
                android:contentDescription="@string/searchview_description_voice" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

回复
发动态
发帖子
Android
创建于2009-10-09

7.8w+

社区成员

移动平台 Android
申请成为版主
社区公告
暂无公告