最新项目上数据展示都是表格形式,手机的宽度不足于展示全面数据,首先是想用 HorizontalScrollView嵌套ListView展示,但是需要第一栏项目名称显示,所以这种方案只能放弃,最好选用两个ListView,一个显示项目名称,一个显示项目信息,联合滑动,右侧的list嵌套到HorizontalScrollView中,可以错觉的产生锁第一栏的情况,
布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zhongjiao.tabdemo.sample1.MainActivity">
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<ListView
android:id="@+id/llistView"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</FrameLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2">
<com.test.tabdemo.sample1.MyView.MyHorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/RlistView"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ListView>
</LinearLayout>
</com.test.tabdemo.sample1.MyView.MyHorizontalScrollView>
</FrameLayout>
Activty代码
public class MainActivity extends AppCompatActivity {
private ListView lListView,rListView;
private List<String> itmes;
private MyAdapter mAdapter;
private MAdapter mMyAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lListView = (ListView) findViewById(R.id.llistView);
rListView = (ListView) findViewById(R.id.RlistView);
initData();
}
@TargetApi(Build.VERSION_CODES.M)
private void initData() {
itmes = new ArrayList<>();
for (int i = 0; i < 30; i++) {
itmes.add("测试数据itme" + i);
}
mAdapter = new MyAdapter(itmes, this);
mMyAdapter = new MAdapter(itmes, this);
lListView.setAdapter(mAdapter);
rListView.setAdapter(mMyAdapter);
lListView.setOnScrollListener(new MyScrollListener(rListView));
rListView.setOnScrollListener(new MyScrollListener(lListView));
}
class MyScrollListener implements AbsListView.OnScrollListener {
private ListView mListView;
public MyScrollListener(ListView listView) {
mListView = listView;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) {
View subView = view.getChildAt(0);
if (subView != null) {
final int top = subView.getTop();
final int position = view.getFirstVisiblePosition();
mListView.setSelectionFromTop(position, top);
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
View subView = view.getChildAt(0);
if (subView != null) {
int top = subView.getTop();
mListView.setSelectionFromTop(firstVisibleItem, top);
}
}
}
}
自定义HorizontalScrollView
主要是去除ScrollView惯性,方便领导滑动查看 ,只要重写fling方法
@Override
public void fling(int velocityX) {
super.fling(velocityX/1000);
}