本篇文章给大家谈谈解决android软键盘弹出打乱布局的问题,以及js解决的知识点,同时本文还将给你拓展androidstudio软键盘弹出顶底部布局和屏幕的百分比方法、AndroidWebView无
本篇文章给大家谈谈解决 android 软键盘弹出打乱布局的问题,以及js解决的知识点,同时本文还将给你拓展android studio 软键盘弹出顶底部布局 和 屏幕的百分比方法、Android WebView 无法弹出软键盘的原因及解决办法、android 布局的问题、Android 弹出软键盘所遇到的坑及解决方法等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 解决 android 软键盘弹出打乱布局的问题(js解决)(安卓软键盘弹出布局变化)
- android studio 软键盘弹出顶底部布局 和 屏幕的百分比方法
- Android WebView 无法弹出软键盘的原因及解决办法
- android 布局的问题
- Android 弹出软键盘所遇到的坑及解决方法
解决 android 软键盘弹出打乱布局的问题(js解决)(安卓软键盘弹出布局变化)
问题基本描述
H5这个页面,内含一个输入框和一个 button,整个页面是全屏的(已经使用定位布局做了全面屏的适配),高度是 100vh。
当点击输入框时,手机软键盘会弹出,iphone 浏览器布局还是原来正常的,但是在 android ,则出现这样子:
可以看到,键盘弹起,页面的可视区域高度被压缩了,使整个页面布局发生了变化。
- 刚开始我的基本样式:
/* 外层容器 */
.keyword-container{
background: linear-gradient(#ea537e, #e82e3b);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
}
分析解决
既然是容器高度被压缩,所以就要给容器固定的高度,但是要考虑不同的机型屏幕高度并不一样,所以需要使用 js 动态去获取屏幕高度,然后给到容器,思路就是这样。
mounted () {
this.containerHeight = window.innerHeight // 获取浏览器可用区域高度
},
绑定给最外层容器
<div:>
CSS 需要有点改动
/* 外层容器 */
.keyword-container{
background: linear-gradient(#ea537e, #e82e3b);
position: absolute;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
}
去掉 top 是因为要保证软键盘弹起时,页面下部分位于软键盘上(像被软键盘顶起),这样输入框就会在可视区域内^_^
。
- 解决后效果:
如果这篇文章对你有帮助的话,请给个赞吧,谢谢 _~
android studio 软键盘弹出顶底部布局 和 屏幕的百分比方法
底部布局用RelativeLayout固定在底部,软键盘弹出上顶
//软键盘弹出顶底板布局解决办法
getWindow().setSoftInputMode
(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN|
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
屏幕的百分比方法
//屏幕比例
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
RelativeLayout.LayoutParams layoutParams = (android.widget.RelativeLayout.LayoutParams) rl_shopsearch
.getLayoutParams();
layoutParams.width = (int) (screenWidth * 0.8);
rl_shopsearch.setLayoutParams(layoutParams);
Android WebView 无法弹出软键盘的原因及解决办法
这篇文章主要介绍了 Android WebView 无法弹出软键盘的原因及解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下。
requestFoucs();无效。
requestFoucsFromTouch();无效。
webview.setTouchListener;无效。
问题所在:
继承 WebView 时,注意构造方法:
public CommonWebView(Context context) {
super(context);
init();
}
public CommonWebView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CommonWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
defStyleAttr 不能传 0,如下错误写法:
public CommonWebView(Context context) {
this(context,null,0);
}
public CommonWebView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CommonWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
android 布局的问题
最近在对比布局的用法,发现一些问题,有些困惑
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id ="@+id/scroll_1"
android:background="#33cc66"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:orientation ="vertical"
android:id ="@+id/linear_1"
android:background="#cc8233"
>
<TextView
android:id ="@+id/text_view"
android:layout_width="match_parent"
android:layout_height ="1000dp"
android:text="测试一下"
/>
</LinearLayout>
</ScrollView>
我运行后发现,撑满了整个手机屏,这说明了子控件textview的大小貌似有自己决定的呀,我一直以为子控件的大小不应该超过父控件设定的大小。
如果换成下面的,我运行后发现子控件textview的大小实际上是父控件RelativeLayout 决定的
我想问下,子控件的大小到底有谁来决定?如果是有父布局和本身共同决定,到底有什么规律可循?
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height ="match_parent"
android:id ="@+id/scroll_1"
android:background="#6dcc33"
android:orientation ="vertical"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height ="50dp"
android:background="#33cc66"
>
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#e3131d"
android:text="测试一号"/>
</RelativeLayout>
</LinearLayout>
Android 弹出软键盘所遇到的坑及解决方法
demo下载
重要代码:
//1、此layout作为最外层的layout; //2、设置需要调整的view: setAdjustView(View view); //3、如果需要控制输入框的显示与隐藏,可以实现OnInputViewVisibleListener接口; public class SoftInputAdjustLayout extends RelativeLayout { private static final String TAG = SoftInputAdjustLayout.class.getSimpleName(); private View adjustView; public SoftInputAdjustLayout(Context context) { this(context,null); } public SoftInputAdjustLayout(Context context,AttributeSet attrs) { this(context,attrs,0); } public SoftInputAdjustLayout(Context context,AttributeSet attrs,int defStyleAttr) { super(context,defStyleAttr); this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { try { Rect r = new Rect(); getwindowVisibledisplayFrame(r); int heightDiff = getRootView().getHeight() - (r.bottom - r.top); if (heightDiff > 100) { if (onInputViewVisibleListener != null) { onInputViewVisibleListener.onShowInputView(); } } else { if (onInputViewVisibleListener != null) { onInputViewVisibleListener.onHideInputView(); } } } catch (Exception e) { e.printstacktrace(); } } }); } /** * 需要调整的view * * @param adjustView */ public void setAdjustView(View adjustView) { this.adjustView = adjustView; } @Override protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) { if (adjustView != null) { Rect rect = new Rect(); getwindowVisibledisplayFrame(rect); int totalHeight = getHeight(); int NowHeight = rect.bottom - rect.top; int keyBoardHeight = totalHeight - NowHeight; if (keyBoardHeight > totalHeight / 4) { super.onMeasure(widthMeasureSpec,MeasureSpec.makeMeasureSpec(totalHeight,MeasureSpec.EXACTLY)); LayoutParams params = (LayoutParams) adjustView.getLayoutParams(); params.bottomMargin = keyBoardHeight; } else { super.onMeasure(widthMeasureSpec,heightMeasureSpec); LayoutParams params = (LayoutParams) adjustView.getLayoutParams(); params.bottomMargin = 0; } } else { super.onMeasure(widthMeasureSpec,heightMeasureSpec); } } private OnInputViewVisibleListener onInputViewVisibleListener; public void setonInputViewVisibleListener(OnInputViewVisibleListener listener) { onInputViewVisibleListener = listener; } public interface OnInputViewVisibleListener { void onShowInputView(); void onHideInputView(); } }
备注:
全屏模式:
1、通过style或者setFlags(…)来设置全屏;
2、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize”;
3、此layout必须作为布局的最外层layout;
4、一定要在布局中添加一个view,如下:
<!--此view用于获取焦点,当软件盘弹出时,根据此view来弹出,而此view在最顶部,且大小为0,所以软件盘弹出,不会把背景顶上去--> <View android:layout_width="0px" android:layout_height="0px" android:focusable="true" android:focusableInTouchMode="true" />
5、通过setAdjustView(View view)来设置需要调整的view;
6、在全屏模式下,输入框开始是未显示的,直到弹出软键盘,才会显示输入框。因为如果输入框一开始就显示,那软键盘就会根据输入框来弹出,且输入框在底部,那就可能造成把整个view顶上去。所以这时我们应该实现OnInputViewVisibleListener这个接口来控制输入框的显示与隐藏。
非全屏模式
1、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize
”;
2、此layout必须作为布局的最外层layout;
3、通过setAdjustView(View view)
来设置需要调整的view;
4、如果需要控制输入框的显示与隐藏,就实现OnInputViewVisibleListener这个接口。
以上所述是小编给大家介绍的Android 弹出软键盘所遇到的坑及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
我们今天的关于解决 android 软键盘弹出打乱布局的问题和js解决的分享已经告一段落,感谢您的关注,如果您想了解更多关于android studio 软键盘弹出顶底部布局 和 屏幕的百分比方法、Android WebView 无法弹出软键盘的原因及解决办法、android 布局的问题、Android 弹出软键盘所遇到的坑及解决方法的相关信息,请在本站查询。
本文标签: