你可以自己设定一个控件的高度,
创新互联公司专注于仁寿企业网站建设,成都响应式网站建设公司,电子商务商城网站建设。仁寿网站建设公司,为仁寿等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
android:layout_height="wrap_content"中,
“wrap_content”可以随意设定,你可以用全屏"match_parent"
也可以用数值来写,我一般使用 XX dp来使用指定的高度
在 Android 里我们是无法直接获取软键盘高度的,但是在某些场景下,我们又需要获取软键盘的高度。我们可以使用 ViewTreeObserver.OnGlobalLayoutListener 来监听窗口大小的变化,当软键盘弹出时,窗口高度会变小,使用原始窗口高度减去当前窗口高度,就可以得出软键盘的高度了。
一般我们在 Activity 的 onCreate() 方法中开始监听:
请注意当 Activity 被销毁的时候,一定要移除监听,否则就会产生内存泄漏:
通过以上方法可以实时监听软键盘的高度变化,特别是像有些输入法例如搜狗,可以随时切换拼音输入、手写输入,这个时候软键盘的高度都会发生变化。
除此之外,还可以通过该方法判断软键盘是否弹出。
webview.addjavascriptinterface可以调用android代码
android可以获得屏幕高度
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int height = dm.heightPixels//这个就是屏幕高度了。
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
这个就创立了一个接口名,叫“Android”,运行在WebView中的JS代码可以通过这个名字调用WebAppInterface类中的showToast()方法:
input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /
script type="text/javascript"
function showAndroidToast(toast)
{
Android.showToast(toast);
}
/script
// 获取屏幕宽高(方法1)
int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p)
Log.e(TAG + " getDefaultDisplay", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
// 获取屏幕密度(方法2)
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
Log.e(TAG + " DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);
Log.e(TAG + " DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);
screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)
screenHeight = dm.heightPixels; // 屏幕高(像素,如:800px)
Log.e(TAG + " DisplayMetrics(111)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
// 获取屏幕密度(方法3)
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
xdpi = dm.xdpi;
ydpi = dm.ydpi;
Log.e(TAG + " DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);
Log.e(TAG + " DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);
int screenWidthDip = dm.widthPixels; // 屏幕宽(dip,如:320dip)
int screenHeightDip = dm.heightPixels; // 屏幕宽(dip,如:533dip)
Log.e(TAG + " DisplayMetrics(222)", "screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip);
screenWidth = (int)(dm.widthPixels * density + 0.5f); // 屏幕宽(px,如:480px)
screenHeight = (int)(dm.heightPixels * density + 0.5f); // 屏幕高(px,如:800px)
Log.e(TAG + " DisplayMetrics(222)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
在Android开发过程中,有时需要获取View绘制前的高度或者宽度,一种的可能情形是初始化的时候让某个View的Visible = Gone的,当触发某个事件的时候需要它显示并且希望有一些动画效果。
这时候就要获取这个View显示前即绘制前的宽度或者高度。原理很简单,View的绘制过程发生之前,会先执行onMeasure方法。那么就可以利用反射来获取需要的值。下面给出获取高度的代码,宽度同理。
private int getTargetHeight(View v) {
try {
Method m = v.getClass().getDeclaredMethod("onMeasure", int.class,
int.class);
m.setAccessible(true);
m.invoke(v, MeasureSpec.makeMeasureSpec(
((View) v.getParent()).getMeasuredWidth(),
MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(0,
MeasureSpec.UNSPECIFIED));
} catch (Exception e) {
}
return v.getMeasuredHeight();
}
拿到这个高度之后就可以做想做的动画效果或者是其他的事情了。
先很负责任的说一下,这个内容也是百度来的,但是很不负责任的是,当初只记录解决方案,忘了记录是查看的哪篇博客了,这里先对不知道借鉴的谁表示感谢。无法分享链接,就厚着脸皮把(转)字去掉了,请大家谅解。
先提供一下 Android知识点——目录 的链接,然后让我们进入正题。
实际上,这篇博客所说的内容并不是所有人都可以用到,毕竟大多数时候,我们只需要展示图片,而并不需要知道图片的宽高;有的时候我们只需要知道展示的宽高(即ImageView)的宽高,不需要知道图片资源的实际尺寸。
但是需求千千万万嘛,以程序员的脑洞,怎么能想到产品的脑洞究竟有多大呢?我这里就遇到了一个需求,那就是需要在一个可缩放的图片上标注icon(类似地图上的marker)。这还不算完,毕竟在找到的图片缩放控件 PhotoView 中,我们点击到图片上后,是有点击点位在整个图片上的百分比坐标回调的。而多端通过百分比是很容易就能在图片中获取到相同的点位,并回显出对应的icon的(没办法,谁让我找的是方便计算百分比的呢),结果Web端优先做了这部分功能,使用的是在原图上的具体坐标。这样我百分比的计划自然就落空了,只能想办法计算出具体的点位。
因此获取图片的原始尺寸就是一个必不可少的环节,我刚刚百度了一下,查到 wangke_king 的 Android获取图片的宽度和高度 中使用的方法是:
我这里没有亲测过,不过应该是没有问题,但是很遗憾我们的需求是在网络图片上做测量,所以这个方法也无法使用,不过如果其他有类似本地图片需求的,不妨尝试一下。而我之前找到的解决方案为:
首先说明,上述的方法是可以实现图片的尺寸测量的,只是有一个小小的问题,那就是想要计算出Drawable的宽高,需要必须等到图片加载完成之后,尝试了使用view.post(),监听组件加载完成,但是并不是每次都能获取到Drawable的宽高,因此当初的解决方案是写了个两秒钟的定时器,每50毫秒测量一次,直到获取到值为止。这样的解决方案可谓是相当无脑了,而且还要消耗很多不必要的资源。
还好皇天不负有心人啊,终于找到了通过Glide获取图片宽高的方式:
这样我们就可以通过回调,在Glide将网络图片注入到对应的图片组件的时候,得到图片的Bitmap,然后在通过Bitmap来获取图片的宽高。但是需要注意的一点是,Bitmap的泛型是需要手动去设置的哦。
另外SimpleTarget现在已经过时,暂时还没有查到。我搜索过SimpleTarget过时使用什么替换,有一些说法是使用BitmapImageViewTarget ,不过下面是实际测试结果。
图片链接:
百度图片-景色
测量结果:
图片信息:
如果不是我使用有误的话,BitmapImageViewTarget 是无法替换SimpleTarget ,实现测量图片原始宽高的功能的。