android中如何计算scrollview的高度

android中如何计算scrollview的高度,第1张

安卓中的ScrollView组件只允许一个子View,可以利用这一个特性,获取子View的高度即所要的ScrollView的整体高度, 方法如下:

scrollViewgetChildAt(0)getHeight();

当然很多问题也可以在CSDN论坛中找到答案哈~

Android SDK中没有提供任何API来直接获取软键盘的状态和软键盘的高度,网上很多资料说InputMethodManager的isActive()方法可以获取软键盘状态,不过实际测试发现,这个方法并没有什么用,如果它返回false,可以判断软键盘一定是隐藏的,但如果它返回true,软键盘既可能是显示的,也可能是隐藏的。所以并不能通过isActive()方法来判断软键盘究竟是显示还是隐藏的。要想获取软键盘的状态和软键盘的高度,只能通过间接方法实现。

在QQ或者微信的聊天页面,当输入法和表情栏互相切换时,过度非常自然,而且表情栏高度刚好跟输入法一样。个人感觉这种用户体验特别的好,别看这个细节小,但代码实现处理起来还是有一定难度。今天我就带大家来实现这种效果,下面是效果图:

>

这样试试。一般来说,android应用程序在d出键盘的时候,如果需要输入的控件靠近下面,为了不被挡住,android系统会自动让整个界面上移至需要输入的控件恰好不被遮住。如果你想要恰好遮挡掉布局A,那么可以把激活键盘的控件恰好放到布局A的上面,而且保证该控件位于整个界面靠近下面的位置(保证键盘d起之后可能会遮住该控件),然后android系统自动调整,就会上移整个界面,且恰好露出该控件,也就会恰好遮住位于该控件下面的布局A了。

Android开发时,从WebView,我不但想要知道ContentHeight,还想知道ContentWidth。不幸的是,从一个 WebView获取contentWidth是相当困难,因为SDK中没有一个像这样的方法,所以本文为大家呈现了一种实用的解决此问题的方法。

The extensive Android SDK allows you to do many great things with particular views like the WebView for displaying webpages on Android powered devices

Android SDK 的扩展,通过使用特定的view,允许你做许多事情。比如,WebView,用来在Android手机上展示网页。

As of lately while I was experimenting with the Android SDK I was using a WebView in one of my activities

最近,我在体验Android SDK的时候,在一个Activity中用到了WebView。

From that particular WebView I needed to know the ContentHeight but also the ContentWidth

从WebView,我不但想要知道ContentHeight,还想知道ContentWidth。

Now getting the contentHeight is easy like so:

现在的情况是:获取contentHeight很easy,如下:

webviewgetContentHeight();

Unfortunately getting the contentWidth from a WebView is rather more difficult, since there is not a simple method like:

不幸的是,从一个WebView获取contentWidth是相当困难,因为SDK中没有一个像这样的方法:

// THIS METHOD DOES NOT EXIST!

webviewgetContentWidth();

There are ways to get the contentWidth of the rendered HTML page and that is through Javascript If Javascript can get it for you, then you can also have them in your Java code within your Android App

当然是有方法获取contentWidth的,就是通过Javascript来获取。如果你能够支持Javascript,那么你就可以在你的 Android 程序中,使用java代码来获取宽度。

By using a JavascriptInterface with your WebView you can let Javascript communicate with your Android App Java code by invoking methods on a registered object that you can embed using the JavascriptInterface

通过在你的WebView中使用JavascriptInterface,通过调用你注册的JavascriptInterface方法,可以让 Javascript和你的Android程序的java代码相互连通。

So how does this work

怎么做呢?

For a quick example I created a simple Activity displaying a webview that loads a webpage wich displays a log message and a Toast message with the contentWidth wich was determined using Javascript Note that this happens AFTER the page was finished loading, because before the page is finished loading the width might not be fully rendered Also keep in mind that if there is content loaded asynchronously that it doesn't affect widths (most likely only heights will be affected as the width is almost always fully declared in CSS files unless you have a 100% width webpage)

搭建一个快速的例子:创建一个简单的展示webView的Activity,一个LogCat消息,一个Toast消息,用来显示我们通过 Javascript获取的宽度。注意:这些会在网页完全加载之后显示,因为在网页加载完成之前,宽度可能不能够正确的获取到。同时也要注意到,如果是异 步加载,这并不影响宽度(最多高度会受影响,因为宽度总是在CSS文件中做了完全的定义,除非在网页中你用了100%宽度。)。

Below is the code of the Activity Mainjava:

下面的代码是Activity的代码:

01 package compimmosandroidsampleswebviewcontentwidth;

02 import androidappActivity;

03 import androidosBundle;

04 import androidutilLog;

05 import androidwebkitWebView;

06 import androidwebkitWebViewClient;

07 import androidwidgetToast;

08 public class Main extends Activity {

09 private final static String LOG_TAG = "WebViewContentWidth";

10 private final Activity activity = this;

11 private static int webviewContentWidth = 0;

12 private static WebView webview;

13

14 / Called when the activity is first created /

15 @Override

16 public void onCreate(Bundle savedInstanceState) {

17 superonCreate(savedInstanceState);

18 setContentView(Rlayoutmain);

19 webview = (WebView) findViewById(Ridwebview);

20 webviewgetSettings()setJavaScriptEnabled(true);

21 webviewsetSaveEnabled(true);

22 webviewaddJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");

23 webviewsetWebViewClient(new WebViewClient() {

24 @Override

25 public void onPageFinished(WebView view, String url) {

26 webviewloadUrl("javascript:windowHTMLOUTgetContentWidth(documentgetElementsByTagName('html')[0]scrollWidth);");

27 }

28 });

29 webviewloadUrl(">

这个API应该没有吧,获取经纬度这些东西倒是不难,但是获取海拔这就相当困难了,军方说不定会有,不过肯定不会开放的,因为获取经纬度也就是几乎是一个平面上的东西,而高程处理则涉及很多方面,比如你用国家地理坐标系统的原点,我国全国都用的是青岛一个地方的作为基准点的,要获取另外一个地方相对于基准点的海拔,则必须以卫星对该点的高精度授时,取得从信号发送到卫星接受处理这一段时间的时间差,基本上也就是几十纳秒左右,从而计算出相对位置的高程差,而这些精确的数据民用上基本不可能,高精度的授时服务你无法获取,那就更没办法谈获取该点高程了,希望能帮到你、。。。

还有一点忘告诉你了,这个高程数据有,而且非常详细的在国家一理信息系统中有记录,但是死了用它的心吧,因为一个地点的绝对高程那绝对是国家机密,要不然小日本,也不会煞费苦心在中国搞测绘了,他们要得到的数据也就是中国三维的地理信息数据,如果这都公开,那我们国国家国防基本上就没什么玩头了,你只要有经纬度加高程,那这一点在地球上就是维一的,希望你能明白,为什么高程会是国家机密,因为获取经纬度实在是不值一提,那么最关键的点当然就在这一点上了。。

以上就是关于android中如何计算scrollview的高度全部的内容,包括:android中如何计算scrollview的高度、android 有没有获取系统软键盘的高度的方法、如何获取Android手机输入法高度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9329528.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存