【问题标题】:SoftKeyboard hiding EditTextSoftKeyboard 隐藏 EditText
【发布时间】:2011-05-24 21:23:33
【问题描述】:

我有一个使用 EditText 让用户搜索数据库并填充 ListView 的布局。 EditText 大约是屏幕顶部的 2/3(位于 ImageView 上方,然后是一些介绍性文本。)

问题是软键盘隐藏了 EditText,所以用户看不到他在输入什么。 (我禁用了自动建议。)

我已经尝试过 LinearLayout、RelativeLayout、填充和不同的对齐/居中,但我仍然无法让它正常工作。 EditText 要么被隐藏,要么被推离屏幕顶部,要么被“压扁”并扭曲。

建议???

一种可能的解决方法是将 EditText 移动到屏幕顶部。但是,这与我得到的图形设计有所不同。

另一个可能的解决方法是让软键盘全屏打开(但不确定如何)。这仍然会隐藏 EditText,但随后我可以重新启用自动建议,以便用户可以看到他正在输入的内容......有点......因为他只能看到 suggestions 的内容他在打字。

这是我最近的尝试。参见“introFrame”。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content" 
 android:layout_height="fill_parent"
 android:orientation="vertical">

 <LinearLayout android:id="@+id/titleContainer"
  android:orientation="horizontal" android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <TextView android:text="@string/title_string"
   android:textSize="15sp" android:textColor="#FFFFFF"
   android:textStyle="bold" android:paddingLeft="5dp"
   android:layout_height="fill_parent" android:layout_width="wrap_content" />
 </LinearLayout>

 <FrameLayout 
 android:id="@+id/introFrame"
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"
 android:gravity="center_horizontal" >
 <ImageView 
  android:src="@drawable/main_search_image"
  android:scaleType="center"
  android:layout_gravity="center"
  android:layout_height="wrap_content"
  android:layout_width="wrap_content"/>
 <LinearLayout
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:paddingTop="140dp" >
  <LinearLayout android:id="@+id/introSearchContainer"
   android:orientation="horizontal" 
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center_vertical" >
   <LinearLayout 
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1" >
    <EditText android:id="@+id/intro_search_box" 
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:hint="     Enter keyword     " 
     android:imeOptions="actionGo"   
     android:inputType="textFilter" 
     android:maxLines="1" />
   </LinearLayout>
   <LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <Button android:id="@+id/intro_search_button" 
     android:background="@drawable/custom_button_go"
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" />
    </LinearLayout>
  </LinearLayout>
  <TextView
   android:text="@string/search_intro"
   android:textSize="15sp"
   android:textColor="#FFFFFF"
   android:layout_height="wrap_content"
   android:layout_width="fill_parent" /> 
 </LinearLayout>
 </FrameLayout>

 <LinearLayout android:id="@+id/listContainer"
  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <ListView android:id="@+id/itemlist" android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:cacheColorHint="#00000000" />
  <TextView android:text="No data found" android:layout_width="fill_parent"
   android:layout_height="fill_parent" android:gravity="center"
   android:textSize="16sp" android:textColor="#FFFFFF" android:id="@+id/android:empty" />
 </LinearLayout>

</LinearLayout>

【问题讨论】:

标签: android android-edittext android-softkeyboard


【解决方案1】:

尝试给编辑文本一个 layout_weight(即 layout_weight=1),这可能会对您可能需要处理的其他布局项目产生一些其他影响,但这可能有助于在弹出软键盘时保持可见

【讨论】:

    【解决方案2】:

    您要查找的是 Activity 的 windowSoftInputMode 属性。你在你的 AndroidManifest.xml 文件中设置它,并给它一个值,例如:

    • adjustResize: "Activity 的主窗口总是调整大小,以便为屏幕上的软键盘腾出空间。"

    • adjustPan:“活动的主窗口没有调整大小来为软键盘腾出空间。相反,窗口的内容会自动平移,这样当前的焦点就不会被键盘遮挡,用户可以随时看到他们正在输入的内容. 这通常不如调整大小,因为用户可能需要关闭软键盘才能到达窗口的模糊部分并与之交互。”

    adjustResize 可能对您有用,只要您将布局包装在 ScrollView 中。如果您在背景中有位图图像,它可能会产生负面影响,因为它也会调整大小,在这种情况下您可能需要使用 adjustPan。

    <activity android:windowSoftInputMode="adjustResize" />
    

    <activity android:windowSoftInputMode="adjustPan" />
    

    更多信息可以在上面的链接中找到。

    【讨论】:

    • 在 FragmentActivity 的子项中无法在 Fragment 中为我工作。
    • 这在应用程序以全屏模式运行时不起作用
    【解决方案3】:

    对我有用的是将我的最高级别 LinearLayout 放到一个滚动视图中(滚动视图只能有一个孩子)。这允许整个活动/表单向上滚动,而不会使焦点中的 EditText 混乱。

    首先,我在我的活动中设置:

    <activity android:windowSoftInputMode="adjustPan" />
    

    然后我做了我正在谈论的 ScrollView 的事情:

    <ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
      <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <!-- STUFF -->
    
      </LinearLayout>
    </ScrollView>
    

    【讨论】:

    • 在 ICS 上对我不起作用。是否知道将 stateHidden 添加到 windowSoftInputMode 可能会导致此问题?
    • 在 FragmentActivity 的子项中无法在 Fragment 中为我工作。
    【解决方案4】:

    只需在清单中使用以下内容...

      <activity
            android:windowSoftInputMode="adjustPan">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2013-07-12
      • 1970-01-01
      • 2014-08-07
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多