web-dev-qa-db-ja.com

キーボードがadjustPanなしで表示されたときにリストビューをプッシュする

リストビューと送信メッセージを下部に持つアクティビティを作成しようとしています。問題は、キーボードが表示されているとき、下部のコンテンツを押すのではなく、単にそれを非表示にしていることです。 adjustPanを使用してみましたが、ホールビューが押し上げられます(そのため、リストビューの上部の要素を表示する方法がなく、アクションバーも消えます)。

WhatsAppまたはLineを見ると、機能は、リストの最後の項目が画面の下部に表示されているときに、キーボードがリストビューを押し上げることです(アクションバーや最初の要素を画面から取り出さずに) )、リストの最後のアイテムが表示されない場合(上にスクロールした後)、キーボードは一番下のリストに表示されません(通常のadjustResize)。

誰もがこの問題に対処しましたか?

ありがとう

編集:

視覚的な例を挙げてみます。

それで、これをリストビューと言いましょう:

---item 1---  
---item 2---  
---item 3---  
---item 4---  
---EditText---

EditTextはListViewの一部ではなく、下部に配置されたLinearLayoutです。キーボードが表示されると、ListViewは次のようになります(アイテム3と4はキーボードによって非表示になります)。

---item 1---  
---item 2---  
---EditText---
---Keyboard---  

そして私が得たいのは:

---item 3---  
---item 4---  
---EditText---
---Keyboard---  

私はAndroid:windowSoftInputMode = "adjustPan"を試してみました。その結果、項目3と4が押し上げられ、キーボードで非表示にされなくなりました。問題は、リストビューを押しますが、画面の外に押し出すため、actionBarが消え、上にスクロールしようとしても、キーボードが表示された状態でアイテム1と2が表示されません。

私が説明したことを願っています。

ありがとう

34
Mehdi

さて、私はあなたのための解決策を見つけました、あなたがしたいことは本質的に毎回一番下にリストビューのスクロールをさせることです。これは次の方法で実行できます。

ListView l = getListView();
l.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
l.setStackFromBottom(true);

Activityの場合は、onCreateで行います。 Fragmentの場合は、onViewCreatedで行います。

53
wangyif2

レイアウトXMLで:

Android:stackFromBottom="true"
Android:transcriptMode="normal"
13
s0i1

単一行ソリューション

list_view.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
1
Munish Kapoor