在Android中启动活动时,Searchview键盘不会以编程方式弹出

时间:2017-07-26 21:05:30

标签: android keyboard android-softkeyboard searchview

我的活动中有一个searchview小部件,它不属于工具栏。在我使用的onCreate方法中 searchView.setIconified(假); 这确实使searchView成为焦点,但除非我再次点击它,否则它不会调出键盘。如何弹出键盘?

XML:

java.util.Scanner

的java:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.Toolbar>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:background="@color/lighterGrey">
    <android.support.v7.widget.SearchView
        android:id="@+id/search_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:transitionName="@string/search_transition"
        android:background="@drawable/search_shape"/>
    </LinearLayout>


    <android.support.v7.widget.RecyclerView
        android:id="@+id/acronym_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

您需要更新AndroidManifest.xml。将android:windowSoftInputMode="stateVisible|adjustPan"添加到您的活动声明中。例如:

    <activity
        android:name=".MyActivity"
        android:windowSoftInputMode="stateVisible|adjustPan">
    </activity>
一旦活动开始,

stateVisible将显示软件键盘。 adjustPan会调整视图以补偿所显示的键盘(以便您尝试显示的内容不会被键盘覆盖)。

答案 1 :(得分:0)

尝试添加以下内容

  

searchView.setFocusable(真); searchView.setIconified(假); searchView.requestFocusFromTouch();

它应该集中并打开键盘。 在某些设备中,您还必须添加

struct Geometry:Codable {
    let type:String
    let latitude: Double
    let longitude: Double

    enum CodingKeys: String, CodingKey {
        case type, coordinates
    }

    enum CoordinatesKeys: String, CodingKey {
        case latitude, longitude
    }

    init (from decoder :Decoder ) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        type = try container.decode(String.self, forKey: .type)
        let coords:[Double] = try container.decode([Double].self, forKey: .coordinates)
        if coords.count != 2 { throw DecodingError.dataCorruptedError(forKey: CodingKeys.coordinates, in: container, debugDescription:"Invalid Coordinates") }

        latitude = coords[1]
        longitude = coords[0]
    }

    func encode(to encoder: Encoder) throws {

    }
}

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);