android键盘字体大小,Android键盘调整调整大小

我正在开发一个包含Activity和Fragment的应用程序.在片段布局中,我使用相对布局作为父布局,在底部和Scrollview之间使用一个按钮. Scrollview包含editText Boxes.如果我在scrollview中单击Last editTextBox我的键盘隐藏了片段.我在manifest和try片段中尝试过adjustpan | adjustresize但尚未解决问题.

解决方法:

这有Android的错误.经过多次努力之后,我能够针对这个问题顺利解决问题.它是一个单行解决方案,但它有一些预先要求.一行是:

AndroidBug5497Workaround.assistActivity(this, R.id.LayoutInScrollView);

您的xml布局必须如下:

RelativeLayout{

HeaderView{}

ScrollView{

LinearLayout{

@+id/LayoutInScrollView

}

}

FooterView{} // the buttons u want to appear above keyboard

}

如果您不使用全屏,则以下类应该足够:

class AndroidBug5497Workaround{

View svChildLayout;

int originalGravity;

Activity activity;

/**

* @param activity

* @param svChildLayoutId id of the layout that is the first child of the center ScrollView

*/

public static void assistActivity (Activity activity, int svChildLayoutId) {

new AndroidBug5497Workaround(activity, svChildLayoutId);

}

private AndroidBug5497Workaround(Activity activity, int svChildLayoutId) {

this.activity = activity;

svChildLayout = activity.findViewById(svChildLayoutId);

originalGravity = ((ScrollView.LayoutParams)svChildLayout.getLayoutParams()).gravity;

//Add listener

FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);

mChildOfContent = content.getChildAt(0);

mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

public void onGlobalLayout() {

possiblyResizeChildOfContent2();

}

});

}

private void possiblyResizeChildOfContent2() {

int usableHeightNow = computeUsableHeight();

if (usableHeightNow != usableHeightPrevious) {

int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();

int heightDifference = usableHeightSansKeyboard - usableHeightNow;

if (heightDifference > (usableHeightSansKeyboard/4)) {

// keyboard probably just became visible

onKeyboardVisible();

} else {

// keyboard probably just became hidden

onKeyboardHidden();

}

usableHeightPrevious = usableHeightNow;

}

}

private void onKeyboardVisible() {

ScrollView.LayoutParams params = (ScrollView.LayoutParams) svChildLayout.getLayoutParams();

params.gravity = Gravity.TOP;

svChildLayout.requestLayout();

final ScrollView parentSv = (ScrollView) svChildLayout.getParent();

parentSv.post(new Runnable() {

@Override

public void run() {

View focusedEditText = activity.getWindow().getCurrentFocus();

parentSv.smoothScrollTo(0, focusedEditText.getTop() );

}

});

}

private void onKeyboardHidden() {

ScrollView.LayoutParams params = (ScrollView.LayoutParams) svChildLayout.getLayoutParams();

params.gravity = originalGravity;

svChildLayout.requestLayout();

}

}

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, int svChildLayoutId) {

new AndroidBug5497Workaround(activity, svChildLayoutId);

}

private View mChildOfContent;

private int usableHeightPrevious;

private FrameLayout.LayoutParams frameLayoutParams;

View svChildLayout;

int originalGravity;

Activity activity;

private AndroidBug5497Workaround(Activity activity, int svChildLayoutId) {

this.activity = activity;

svChildLayout = activity.findViewById(svChildLayoutId);

originalGravity = ((ScrollView.LayoutParams)svChildLayout.getLayoutParams()).gravity;

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

onKeyboardVisible();

frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;

} else {

// keyboard probably just became hidden

onKeyboardHidden();

frameLayoutParams.height = usableHeightSansKeyboard;

}

mChildOfContent.requestLayout();

usableHeightPrevious = usableHeightNow;

}

}

private int computeUsableHeight() {

Rect r = new Rect();

mChildOfContent.getWindowVisibleDisplayFrame(r);

return (r.bottom - r.top);

}

private void onKeyboardVisible() {

ScrollView.LayoutParams params = (ScrollView.LayoutParams) svChildLayout.getLayoutParams();

params.gravity = Gravity.TOP;

svChildLayout.requestLayout();

final ScrollView parentSv = (ScrollView) svChildLayout.getParent();

parentSv.post(new Runnable() {

@Override

public void run() {

View focusedEditText = activity.getWindow().getCurrentFocus();

parentSv.smoothScrollTo(0, focusedEditText.getTop() );

}

});

}

private void onKeyboardHidden() {

ScrollView.LayoutParams params = (ScrollView.LayoutParams) svChildLayout.getLayoutParams();

params.gravity = originalGravity;

svChildLayout.requestLayout();

}

}

标签:android,android-layout,xml,android-studio,android-fragments

来源: https://codeday.me/bug/20190706/1399193.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值