项目中有界面是利用scrollview,来实现左侧固定,下方和右侧同时滚动的功能,这里只能使用addview一个个将textview放到linearLayout里面,但之后又有一个需求是,切面切换时,需要将所制定的某一行置顶,解决方式如下:
1.将所需要置顶的那行,取一个textview出来,存放到map中,如下代码:
String intstument = fixedLeftList.get(rank).get(open_LeftData[0]).toString();
if (jumpInstrument.containsKey(intstument)) {
} else {
jumpInstrument.put(intstument, textView);
}
String instrumentSumm = DocCaptain.getInstance().getSummaryInstrument();
int parentHeight = open_main_scroll.getMeasuredHeight();
int bottomHeight = jumpInstrument.get(instrumentSumm).getTop();
int insHeight = jumpInstrument.get(instrumentSumm).getHeight();
int offset = (bottomHeight - parentHeight) + (parentHeight - insHeight) + insHeight;
System.out.println("該商品距離父佈局的高度為" + jumpInstrument.get(instrumentSumm).getTop() + "移動的距離為" + offset);
open_main_scroll.smoothScrollTo(0, offset);
注:计算往上移动的高度,是通过计算:scrollview的整体高度,每行占据的高度,该textview距离父scrollview的高度,进行一些简单的运算即可.
//========================分割线,2016年5月26日15:07:13=====================================
遇到的问题是有时候scrollto无法执行,有时候有些界面数据少就会执行,所以使用handler进行延迟处理,就好了,如下代码:
if (JumpFragmentCaptain.getInstance().isOrderJump()) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
//指定选中的单号那一行,當從新增挂单/修改挂单/删除挂单界面時,需要將制定的商品滾動到第一列置顶.\
//监听保存的textview的高度变化,每次刷新都会执行
int parentHeight = order_main_scroll.getMeasuredHeight();//父scroll的整个高度
int bottomHeight = jumpOrderTop.get(orderPosition).getTop();//所指定的textview距离父布局的高度
int insHeight = jumpOrderTop.get(orderPosition).getHeight();//每行占据的高度
//根据上述的数据,计算需要滚动的距离,以便让置顶的行置顶.
int offset = (bottomHeight - parentHeight) + (parentHeight - insHeight) + insHeight;
order_main_scroll.smoothScrollTo(0, offset);
System.out.println("該商品距離父佈局的高度為" + jumpOrderTop.get(orderPosition).getTop() + "每个textview自身的高度"
+ jumpOrderTop.get(orderPosition).getHeight() + "移動的距離為" + offset);
}
}, 2000);
}
写的很乱,有问题可以讨论.提供如果不是使用listview如何将某一行置顶的方法.