2016-12-04 20 views
0

私は作成したカスタムツールバーのすぐ下にEditTextを持っています。 edittextの下には、リストビューがあります。ただし、ソフトキーボードが表示された場合、ユーザーはキーボードでブロックされたリストを見ることができません。 EditTextを画面の上部に移動するにはどうすればソフトキーボードが表示されたときにツールバーを画面から押し出すことができますか?NoActionBarテーマを使用しています。Android - ソフトキーボードが表示されたら、アクションバーを押し上げます。

EDIT:は、私はすでにManifests.xml

おかげで

android:windowSoftInputMode="adjustPan" 

を試してみました!

編集: このコードを使用して、キーボードが表示されたときにツールバーを非表示にします。

 numbersActivityRoot = (CoordinatorLayout) findViewById(R.id.numbers_activity_root_view); 
     appBarLayout = (AppBarLayout) findViewById(R.id.appbarLayout); 
     numbersActivityRoot.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       Rect r = new Rect(); 
       //r will be populated with the coordinates of your view that area still visible. 
       numbersActivityRoot.getWindowVisibleDisplayFrame(r); 

       int heightDiff = numbersActivityRoot.getRootView().getHeight() - (r.bottom - r.top); 
       if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... 
        Log.v("NUMBERS","Hide toolbar"); 
        appBarLayout.setExpanded(false); 
       } else { 
        Log.v("NUMBERS","Show toolbar"); 
        appBarLayout.setExpanded(true); 
       } 
      } 
     }); 

ログメッセージがキーボードを検出するための正しい結果を示しているが、ツールバーがまだ隠れていない間に。私は間違って何をしていますか?

+0

アンドロイドを試してみましたか:windowSoftInputMode = "adjustPan"? –

+0

はい私は持っています。無効。 – Asym

+0

ビュー階層を添付してください。 –

答えて

2

adjustPanキーボードがアップしているときにEditTextが完全に画面に表示されている場合は役に立ちません。個人的には、決してを使用すると、システムがあなたのウィンドウを予測不能な量だけ移動させるので、それはまったく気に入らないので、adjustPanを使用してください。

解決する必要がある主な問題が2つあります。キーボードの検出が表示され、ツールバーを画面から外します。

最初の部分では、キーボードが表示/非表示になっていることを直接通知するためのフレームワークによって提供されるメカニズムはありません。回避策を持つStackOverflowに関する記事がたくさんあります(this onethis oneなど)。基本的な考え方は、コンテンツビューの高さを電話画面全体の高さと比較することです。重要な違いがある場合は、ソフトキーボードが他のスペースを占有していると仮定します。

第二部では、私はあなたのToolbar属性layout_scrollFlags="scroll"(または多分"scroll|enterAlways")を与えることによって/崩壊をスクロールするAppBarLayoutの能力を使用することをお勧め。パート1で説明したトリックのいずれかを使用してキーボードの変更を検出すると、appBarLayout.setExpanded(boolean)を使用してアプリケーションバーを折りたたんだり展開したりすることができます。

+0

お返事ありがとうございました。私はこれがツールバーを隠すために行く方法だと思う。しかし、それはまだ動作していません。私の最近の編集をもう一度見て、間違っていることを教えてください。 – Asym

関連する問題