標籤:
在ScrollView中嵌套使用ListView,ListView只會顯示一行多一點。兩者進行嵌套,即會發生衝突。
由於ListView本身都繼承於ScrollView,一旦在ScrollView中嵌套ScrollView,
那麼裡面的ScrollView高度計算就會出現問題。
我們也就無法得到想要的效果。
下面進入正題,我們將討論ScrollView中嵌套ListView情況。
核心解決方案: 重寫ListView或者GridView的OnMesure 方法。對GridView同樣適用。
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
- MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
- }
複製代碼
ScrollView中嵌套ListView:
- package com.android.xiaomolongstudio.example.scrollviewlistview;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- /**
- *
- * @author 小尛龍
- *
- */
- public class MainActivity extends Activity {
- ListView listView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- listView = (ListView) findViewById(R.id.listView);
- listView.setAdapter(new ArrayAdapter<String>(this,
- android.R.layout.simple_expandable_list_item_1, getData()));
- }
- private List<String> getData() {
- List<String> data = new ArrayList<String>();
- for (int i = 0; i < 30; i++) {
- data.add("測試" + i);
- }
- return data;
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- }
複製代碼
自訂ListView:
- package com.android.xiaomolongstudio.example.scrollviewlistview;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.widget.ListView;
- public class MyListView extends ListView {
- public MyListView(Context context) {
- super(context);
- }
- public MyListView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- public MyListView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
- MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
- }
- }
複製代碼
沒有上面的按鈕,一進頁面直接顯示的是ListView內容,怎麼一開始就顯示頭部。
ScrollView有個屬性mScrollView.scrollTo(x, y)可以顯示位置。
但是實際卻沒有達到效果,查了說mScrollView.scrollTo(x, y)首次初始化時無效果。
最後我用了mScrollView.smoothScrollTo(0,0);
參考:http://bbs.itheima.com/thread-128002-1-1.html
Android之ScrollView嵌套ListView衝突