1

上部に1つの大きなEditTextビューがあり、下部に一連のボタンがあるレイアウトがあります。EditTextは、adjust_resizeを使用してimeをアクティブ化/非アクティブ化すると、縮小および拡大されます。下部のボタンは、imeの上に押し上げられます。

EditTextビューに十分なスペースを提供するために、imeが表示されたときにこれらのボタンを非表示にします。

私はこれまでに次のことを試しました:

  • EditTextをサブクラス化し、ビューのOnSizeChangedにコールバックを登録するオプションをアクティビティに提供しました。

  • このコールバックを使用して、ボタン(実際にはレイアウトコンテナ)の表示をGONEに変更しました。

これは問題なく動作し、imeがポップアップしたときにボタンを非表示にします。ただし、EditTextは新しい使用可能なスペースに拡張されません。さらに、imeが破棄されると、EditTextフィールドが元のフィールドよりも大きくなり、画面の外側にある(現在表示されている)ボタンが押されます。

また、ビューに最初の文字を入力すると、imeに単語オプションが表示され、画面が再描画され、EditTextが空のスペースを埋めます。

これを機能させる方法について何かアイデアはありますか?またはさらに良いことに、私の要件に対するより簡単な解決策はありますか?

ありがとう...

注意:私の見解では、スクロールは適切なオプションではありません。

4

2 に答える 2

1

上記の方法を少し変更して、これを機能させました。

  • レイアウト全体を FrameLayout でラップ

  • FrameLayout をサブクラス化し、レイアウトの OnMeasure にコールバックを登録するオプションをアクティビティに提供しました

これにより、ビューが測定される前に、ビューの可視性を変更する機会がアクティビティに与えられます。

特にキーボードが現在表示されているかどうかを判断することに関して、より簡単な解決策について聞いていただければ幸いです。(dumpsys ウィンドウにはこの情報が表示されます。簡単にアクセスできますか?)

于 2010-08-06T09:19:53.140 に答える
0

電話してみましたmyView.invalidade()か?

button.setVisibility(View.INVISIBLE);GONE プロパティを使用していましたが、画面に他のものがないため、に変更されました。

Adjust_resize では、キーボードがなくなったときに再度確認し、ボタンを再度表示する必要があります。

于 2010-08-04T21:14:34.380 に答える