我使用ViewPager
,並在ViewPager
的第一個片段內我有另一個片段,其父母的子片段與ScrollView
在其中。使其更直觀:在scrollview中滾動ViewPager中的一個片段與軟鍵盤可見
┌------------┐
| 1 | 1 is the ViewPager fragment
| ┌---------┐|
| | 2 || 2 is the fragment inside ViewPager fragment
| |┌-------┐||
| ||3 ||| 3 is the sub fragment containing the ScrollView with EditText form
| ||form |||
| ||here |||
| || |||
| |└-------┘||
| └---------┘|
└------------┘
問題:鑑於調整,但滾動視圖不能滾動,直到視圖的結束和一些內容仍然是鍵盤的背面。當我從表單底部選擇編輯文本時,此行爲會發生變化。在這種情況下,片段1(viewpager)和片段2(子片段)向上移動並允許滾動視圖顯示最後一個元素。
而尋找這種行爲我看到SO
很多職位,如:
Scrollview inside a viewpager fragment doesn't scroll when keyboard is shown
和ofcourse的original bug report對已被標記爲故意行爲全屏活動。請注意,我的情況下我沒有使用全屏活動。但是在ViewPager
中有關於ScrollView
的類似行爲的報告。
我嘗試使用變通方法:
public class AndroidBug5497Workaround {
// For more information, see https://code.google.com/p/android/issues/detail?id=5497
// To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
public static void assistActivity (Activity activity) {
new AndroidBug5497Workaround(activity);
}
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
private AndroidBug5497Workaround(Activity activity) {
FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
mChildOfContent = content.getChildAt(0);
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
possiblyResizeChildOfContent();
}
});
frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard/4)) {
// keyboard probably just became visible
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
} else {
// keyboard probably just became hidden
frameLayoutParams.height = usableHeightSansKeyboard;
}
mChildOfContent.requestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
return (r.bottom - r.top);
}
}
的問題是,當我用它工作的解決辦法,但它也將創造當我點擊下部EditTexts增加一個額外的空白scrollview內部的窗體。 我懷疑它與adjust_resize
有關,或者錯算了解決方法中的高度。
這裏是解決方法的結果。
當我選擇從窗體頂部的EditText
(一些額外的空格)
當我從表格(很多額外的空格)
結束選擇EditText
您的幫助表示感謝!
我嘗試過使用'adjustResize'和'adjustPan'。當我使用'adjustResize'時,它會很好的滾動ScrollView。但在小屏幕中,「子片段3」隱藏在「軟鍵盤」後面。 當我在小屏幕上使用'adjustPan'時,它會將父片段1和2向上推並顯示片段3.但是'ScrollView'不會滾動到結尾,並且某些內容隱藏在鍵盤後面。 [這裏我也發佈了一個關於該主題的更多細節的問題](https:// stackoverflow。com/questions/45330600/adjustpan-and-adjust在嵌套代碼片段中) 感謝您幫助 – Poorya
進一步解釋我上傳了一個包含相關代碼的小型項目以促進此過程。如果你看看[Github Repo Link](https://github.com/pouriabagheri/ScrollViewAdjustViewPager),我將不勝感激。 – Poorya