web-dev-qa-db-ja.com

EditTextを隠すSoftKeyboard

EditTextを使用して、ユーザーがデータベースを検索し、ListViewにデータを入力できるようにするレイアウトがあります。 EditTextは、画面の上部から約2/3のところにあります(ImageViewの上に配置され、その後にいくつかの紹介テキストが続きます)。

問題は、ソフトキーボードがEditTextを非表示にするため、ユーザーが入力内容を確認できないことです。 (自動提案を無効にしました。)

LinearLayout、RelativeLayout、パディング、およびさまざまな配置/センタリングを試しましたが、それでも正しく機能しません。 EditTextは非表示になっているか、画面の上部から押し出されているか、「押しつぶされて」歪んでいます。

提案???

考えられる回避策の1つは、EditTextを画面の上部に移動することです。しかし、これは私が与えられたグラフィックデザインから逸脱しています。

もう1つの考えられる回避策は、ソフトキーボードを全画面で開くことです(ただし、方法はわかりません)。これでも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>
20
user359519

探しているのは、アクティビティの windowSoftInputMode 属性です。これをAndroidManifest.xmlファイルで設定し、次のような値を指定します。

  • adjustResize: "アクティビティのメインウィンドウは、画面上のソフトキーボード用のスペースを確保するために常にサイズ変更されます。"

  • adjustPan: "アクティビティのメインウィンドウは、ソフトキーボード用のスペースを確保するためにサイズ変更されません。代わりに、ウィンドウのコンテンツが自動的にパンされるため、現在のフォーカスがキーボードによって隠されることはなく、ユーザーはいつでも何を見ることができます。ユーザーはウィンドウの隠された部分にアクセスして操作するためにソフトキーボードを閉じる必要がある場合があるため、これは通常、サイズ変更よりも望ましくありません。」

レイアウトをScrollViewでラップする限り、adjustResizeはおそらくあなたのために働くでしょう。背景にビットマップ画像がある場合は、サイズも変更されるため、悪影響が生じる可能性があります。その場合は、代わりにadjustPanを使用することをお勧めします。

<activity Android:windowSoftInputMode="adjustResize" />

または

<activity Android:windowSoftInputMode="adjustPan" />

詳細については、上記のリンクをご覧ください。

56
kcoppock

私にとってうまくいったのは、最高レベルのLinearLayoutをscrollViewにドロップすることです(ScrollViewは子を1つだけ持つことができます)。これにより、アクティビティ/フォーム全体を上にスクロールして、フォーカスのある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>
13
mgoulet

マニフェストで以下を使用するだけです...

  <activity
        Android:windowSoftInputMode="adjustPan">
2
Pratibha Sarode

編集テキストにlayout_weight(つまり、layout_weight = 1)を与えてみてください。これは、他のレイアウトアイテムに影響を与える可能性がありますが、ソフトキーボードがポップアップしたときに表示されたままになる可能性があります。

1
slim