禁止ScrollView的childview自动滑动到底部

问题描述: 一个ScrollView中包含了好几个childView,有一个childview很大,一个屏幕显示不完,每个childview都能获取focus。当那个很大的chilvView获取焦点时,由于一屏显示不完,它就会自动滑动到最后(就是该childView的底部)。 问题原因以及解决方案分析: 由于该childView超过屏幕大小,并且有获取焦点的能力,所以造成了该问题。由于不能改变其大小,只能阻止其获取焦点。基本思路有,取消它获取焦点的能力,让ScrovView截获它的焦点等。以下是具体方法: 方法一:简单,方便,快捷,直面关键问题 将可能自动滑动的childview的focus禁掉,防止它自动滑动 mContentTextBox.setFocusable(false); 恢复默认状态,允许childview的focus,使它可以自动滑动 mContentTextBox.setFocusableInTouchMode(true); mContentTextBox.setFocusable(true); 这里要注意,仅仅setFocusable为true是不够的,需要设置setFocusableInTouchMode。 方法二: 绕了一点,副作用不大(推荐) 让ScrollView优先获取focus,这样childview获取不到focus,就不会滑动 private void disableAutoScrollToBottom() { mScrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); mScrollView.setFocusable(true); mScrollView.setFocusableInTouchMode(true); mScrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.requestFocusFromTouch(); return false; } }); } 恢复默认状态,禁掉scrollview的focus,这样就允许childview自动滑动 private void enableChildAutoScrollToBottom() { mScrollView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); mScrollView.setFocusable(false); mScrollView.setFocusableInTouchMode(false); mScrollView.setOnTouchListener(null); } 方法三:这个方法比较死板,不太灵活,虽然能满足基本需求,副作用很大 @Override protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) { return true; } 方法四:和方法三类似 @Override protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) { return 0; }

七月 1, 2018 · 1 分钟 · LengYue

Android Fragment和Activity互相通讯

一、 管理Fragment 在你的Activity你需要使用一个名为FragmentManager的类,通过调用getFragmentManager() 方法来实例化该管理类在你的Activity种。 FragmentManager 类一些主要的方法有通过findFragmentById()来获取一个Activity中有关Fragment布局。 当然还有类似 findFragmentByTag()方法,以及唐Fragment中出栈的popBackStack()同时可以注册 addOnBackStackChangedListener()管理.具体的可以在android.app.FragmentManager类中了解 ...

六月 28, 2018 · 1 分钟 · LengYue

Android清除本地数据缓存代码

/* 文 件 名: DataCleanManager.java 描 述: 主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清 除自定义目录 */ ...

六月 28, 2018 · 2 分钟 · LengYue

Android中GPS定位(获取经纬度)

AndroidGPS定位问题,众所周知是一个蛮麻烦的问题.当初我是新手,现在我也是新手,也搞了我头大,网上搜索了很多的例子,一直处于僵持阶段,而现在终于搞定了,因为我现在只需要获取到经纬度就可以了,反正获取经纬度可以从我这篇文章中看看;上代码。 在AndroidManifest.xml中加入权限: <uses-permission android:name=”android.permission.ACCESSFINELOCATION”/> <uses-permission android:name=”android.permission.ACCESSCOARSELOCATION”/> ...

六月 27, 2018 · 1 分钟 · LengYue

Android工作线程之间的消息传递以及工作线程与主线程之间消息的传递

这个是一个android的简单案例: 界面的部分主要有三个按钮组成,这里将不再赘述 他们之间的消息传递方法将会在代码中体现,其中对重要步骤进行了详细的注释。 ...

六月 27, 2018 · 1 分钟 · LengYue

Connection with adb was interrupted.解决办法

[2012-10-16 10:49:35 – My First App] [2012-10-16 10:49:35 – My First App] Android Launch! [2012-10-16 10:49:35 – My First App] Connection with adb was interrupted. [2012-10-16 10:49:35 – My First App] 0 attempts have been made to reconnect. [2012-10-16 10:49:35 – My First App] You may want to manually restart adb from the Devices view. ...

六月 27, 2018 · 1 分钟 · LengYue

解决ADB启动问题(Failed to initialize Monitor Thread: Unable to establish loopback connection)

问题 Failed to initialize Monitor Thread: Unable to establish loopback connection ADB server didn’t ACK failed to start daemon * ...

六月 27, 2018 · 1 分钟 · LengYue

Android系统NFC读写简介

在Android NFC 应用中,Android手机通常是作为通信中的发起者,也就是作为各种NFC卡的读写器。Android对NFC的支持主要在 android.nfc 和android.nfc.tech 两个包中。 android.nfc 包中主要类如下: ...

六月 25, 2018 · 2 分钟 · LengYue