最近在做一个笔记应用时需要在用ScrollView套上linearlayout当父控件,其中的子控件有editText用来输入文本,但是发现在其他子控件刷新时,如果当前看不到editText的焦点,scrollView会自动跳到editText的焦点位置,这个问题无法解决,demo代码如下:<RelativeLayout 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"
tools:context=".MainActivity" >
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world" />
<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
public class MainActivity extends Activity { private TextView tv;
private EditText et; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) this.findViewById(R.id.tv);
et = (EditText) this.findViewById(R.id.et);
handler.sendEmptyMessageDelayed(0, 1000);
Window window = this.getWindow();
} private Handler handler = new Handler() { @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
tv.setText(""+System.currentTimeMillis());
this.sendEmptyMessageDelayed(0, 1000);
}
};}这里textView每次setText时都会引起scrollView滑到editText的光标位置处。但是参考中兴笔记,如图,是可以在保持editText存在焦点的状态下还能同时刷新录音控件,而且scrollView不会自动滑动。请教大牛如何才能实现这种效果呢,谢谢!!!
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world" />
<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
public class MainActivity extends Activity { private TextView tv;
private EditText et; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) this.findViewById(R.id.tv);
et = (EditText) this.findViewById(R.id.et);
handler.sendEmptyMessageDelayed(0, 1000);
Window window = this.getWindow();
} private Handler handler = new Handler() { @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
tv.setText(""+System.currentTimeMillis());
this.sendEmptyMessageDelayed(0, 1000);
}
};}这里textView每次setText时都会引起scrollView滑到editText的光标位置处。但是参考中兴笔记,如图,是可以在保持editText存在焦点的状态下还能同时刷新录音控件,而且scrollView不会自动滑动。请教大牛如何才能实现这种效果呢,谢谢!!!
解决方案 »
- android连接WebService不成功,求助
- 求助大侠!!反复使用cursor后报错,我如何关闭cursor而在下一次启用cursor时又不受影响呢
- 文件路径问题
- 进入桌面时选择launcher的问题
- NDK R5编译STL的问题
- hierarchyviewer无法连接真机
- 跪求大神赐教:sqlite数据库插入的数据不重复,但通过自定义的cursoradapter查询结果是重复的?
- android 关闭进程问题 killBackgroundProcesses无效
- 如何把摄像头读入的每一帧图像保存为图片 基于opencv-android
- 音乐播放安卓
- android 创建同一个布局的多个fragment,加载listview数据不显示或者滑动数据错乱
- 急,请问ijkPlayer android下怎么播放本地视频
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE)
this.getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
}fix 焦点跳动, 重写ScrollView
@Override
public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {
return child instanceof EditText;
}
private void test() {
entryScroll.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
entryScroll.setFocusable(true);
entryScroll.setFocusableInTouchMode(true);
entryScroll.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.requestFocusFromTouch();
return false;
}
});
}