SoftKeyboard隐藏EditText

时间:2010-12-13 19:53:45

标签: android android-edittext android-softkeyboard

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

问题是软键盘隐藏了EditText,因此用户无法看到他正在键入的内容。 (我禁用了自动建议。)

我尝试过LinearLayout,RelativeLayout,paddings和不同的路线/中心,但我仍然无法让它正常工作。 EditText要么隐藏,要么被推离屏幕顶部,要么“压扁”并扭曲。

建议???

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

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

这是我最近的尝试。请参阅“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>

4 个答案:

答案 0 :(得分:56)

您要查找的是活动的windowSoftInputMode属性。您可以在AndroidManifest.xml文件中设置它,并为其指定一个值,如:

  • adjustResize:“活动的主窗口始终调整大小,以便为屏幕上的软键盘腾出空间。”

  • adjustPan:“活动的主窗口未调整大小以便为软键盘腾出空间。而是自动平移窗口内容,以便键盘不会遮挡当前焦点,用户可以随时看看他们正在输入什么。这通常不如调整大小,因为用户可能需要关闭软键盘才能进入并与窗口的模糊部分进行交互。“
只要您将布局包装在ScrollView中,

adjustResize可能对您有用。如果你在后台有一个位图图像,它可能会有负面影响,因为它也会调整大小,在这种情况下你可能想要使用adjustPan。

<activity android:windowSoftInputMode="adjustResize" />

<activity android:windowSoftInputMode="adjustPan" />

上述链接提供了更多信息。

答案 1 :(得分:13)

对我有用的是将我的最高级别LinearLayout放在scrollView中(ScrollView只能有一个子级)。这允许整个活动/表单向上滚动,而不会使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>

答案 2 :(得分:2)

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

  <activity
        android:windowSoftInputMode="adjustPan">

答案 3 :(得分:1)

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