0

下午好,今天我想在滚动视图中滚动一个网格视图。大概是这样的:scrollview中有LinearLayout,然后我在LinearLayout中插入了一个GridView。问题 gridView 仅显示一项。

我的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);
}
4

2 回答 2

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>

请注意,您的包名称表示您放置上述自定义滚动视图类的包。

于 2013-08-27T08:15:44.523 回答
1

将 GridView 放在 ScrollView 中并不是一个好习惯。但是你可以做到,虽然它有点痛苦。

现在,您可以这样做。在这里检查答案。它是一个可扩展高度的 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 中使用它上方或下方的其他视图元素,并让它们全部滚动。

于 2013-08-27T06:12:57.443 回答