2013-08-27 64 views
0

下午好,今天我想在scrollview中使用gridview滾動。 也許是這樣的: 在scrollview中有LinearLayout,然後我插入一個GridView到LinearLayout。 問題gridView只顯示一個項目。在LinearLayout中有滾動視圖,我在其中插入了一個GridView到LinearLayout

我的XML:

<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:id="@+id/record_scrollview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="10dip"> 

    <LinearLayout 
     android:id="@+id/record_Layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 
    </LinearLayout> 
</ScrollView> 


</RelativeLayout> 

我的Java代碼:

public class MainActivity extends Activity { 
private LinearLayout linearLayout = null; 
private ScrollView scrollView =null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    linearLayout = (LinearLayout)findViewById(R.id.record_Layout); 
    scrollView = (ScrollView)findViewById(R.id.record_scrollview); 
    GridView gd = new GridView(this); 
    List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put("name", "huangli1"); 
    list.add(map); 
    map = new HashMap<String, String>(); 
    map.put("name", "huangli2"); 
    list.add(map); 
    map = new HashMap<String, String>(); 
    map.put("name", "huangli3"); 
    list.add(map); 
    SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.list_item, new String[]{"name"}, new int[]{R.id.tv}){ 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      return super.getView(position, convertView, parent); 
     } 

    }; 
    gd.setAdapter(simpleAdapter); 
    linearLayout.addView(gd); 
} 
+0

試圖添加gridview內滾動視圖? – Raghunandan

+0

你必須指定一個佈局寬度,而不是match_parent。比如300dp,或者在你的滾動視圖的子佈局中 –

回答

2

所有您需要做的僅僅是做一個自定義的滾動視圖,如下圖所示:(這個類的名字是MitsScrollView.java)

import android.content.Context; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.widget.ScrollView; 

public class MitsScrollView extends ScrollView 
{ 

public MitsScrollView(Context context) 
{ 
    super(context); 
} 

public MitsScrollView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
} 

public MitsScrollView(Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, defStyle); 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) 
{ 
    final int action = ev.getAction(); 
    switch (action) 
    { 
     case MotionEvent.ACTION_DOWN: 
      Log.i("VerticalScrollview", "onInterceptTouchEvent: DOWN super false"); 
      super.onTouchEvent(ev); 
      break; 

     case MotionEvent.ACTION_MOVE: 
      return false; // redirect MotionEvents to ourself 

     case MotionEvent.ACTION_CANCEL: 
      Log.i("VerticalScrollview", "onInterceptTouchEvent: CANCEL super false"); 
      super.onTouchEvent(ev); 
      break; 

     case MotionEvent.ACTION_UP: 
      Log.i("VerticalScrollview", "onInterceptTouchEvent: UP super false"); 
      return false; 

     default: 
      Log.i("VerticalScrollview", "onInterceptTouchEvent: " + action); 
      break; 
    } 

    return false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) 
{ 
    super.onTouchEvent(ev); 
    Log.i("VerticalScrollview", "onTouchEvent. action: " + ev.getAction()); 
    return true; 
} 
} 

而且在你xml的你需要把線性佈局這個自定義滾動視圖中網格視圖:

<your package name.MitsScrollView 
    android:id="@+id/scrollViewOther" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#c4c4c4" 
    android:descendantFocusability="blocksDescendants" 
    android:fadeScrollbars="false" 
    android:fadingEdge="horizontal" 
    tools:ignore="ScrollViewCount" > 

    here you can put your linear layout or grid view or any views 

</your package name.MitsScrollView> 

請注意你的包名錶示你已經把上面的自定義滾動視圖類的包。

1

這不是很好的做法,把GridView的滾動型。但你可以做到,雖然有點痛苦。

現在,這裏是你如何做到這一點。檢查答案here。這是一個可擴展高度的GridView,您將在項目中導入/創建該GridView。這基本上意味着,隨着更多的項目被添加到GridView中,它將只擴展其高度,而不是保持其高度設置並使用滾動。這正是你想要的。

一旦你的項目中有了ExpandableHeightGridView,就去你想要的GridView所在的XML佈局。然後,您可以做這樣的事情(意譯):

<ScrollView ...> 
    <RelativeLayout ...> 
     <com.example.ExpandableHeightGridView ... /> 
     <other view items /> 
    </RelativeLayout> 
</ScrollView> 

然後,在您的活動,您可以設置GridView的適配器,你要確保你把它擴大。所以:

ExpandableHeightGridView gridView = (ExpandableHeightGridView) findViewById(R.id.myId); 
gridView.setAdapter(yourAdapter); 
gridView.setExpanded(true); 

你想要這個可擴展的GridView的原因是因爲,事實上,一個標準的GridView不會擴展是什麼原因造成的滾動。它堅持一定的高度,然後隨着越來越多的項目填滿它的視圖邊界,它變得可滾動。現在,有了這個,GridView將始終擴展其高度以適應其內容,因此絕不允許它進入滾動模式。這使您可以在ScrollView中使用它,並在ScrollView中使用其上方或下方的其他視圖元素,並使其全部滾動。

相關問題