Android GridView同时具有水平和垂直滚动条 [英] Android GridView with Both Horizontal and Vertical Scrolbars at the same time

查看:94
本文介绍了Android GridView同时具有水平和垂直滚动条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要Android中的GridView类似于.net GridView,它可以同时在水平和垂直两个方向上滚动。

由于我的数据中有很多行和很多列。所以,所有列都不显示,因为移动屏幕宽度很小。显示多行时垂直滚动已启用。我想要的是这个GridView以某种方式 同时在两个方向上滚动 。因此,该用户可以使用 表格形式 查看数据。



我使用TableLayout和SimpleAdapter。以下是我的代码:

主要活动版式:

 < LinearLayout xmlns:android =http://schemas.android.com/apk/res/android
xmlns:tools =http://schemas.android.com/tools
android:layout_width =wrap_content
android:layout_height =wrap_content
android:orientation =vertical>

<! - 这个表格布局是标题,后面是gridview - >
< TableLayout
android:layout_width =wrap_content
android:layout_height =wrap_content
android:layout_marginLeft =5dp>

< TableRow android:layout_width =wrap_content>

TextView
android:id =@ + id / schemeTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Scheme
android:textStyle =bold/>

TextView
android:id =@ + id / nameTitle
android:layout_width =200dp
android:layout_height =wrap_content
android:text =Name
android:textStyle =bold/>

TextView
android:id =@ + id / productTitle
android:layout_width =200dp
android:layout_height =wrap_content
android:text =Product
android:textStyle =bold/>

TextView
android:id =@ + id / channelTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Channel
android:textStyle =bold/>

TextView
android:id =@ + id / typeTitle
android:layout_width =100dp
android:layout_height =wrap_content
android:text =Type
android:textStyle =bold/>

TextView
android:id =@ + id / customerSelectionTitle
android:layout_width =150dp
android:layout_height =wrap_content
android:text =客户选择
android:textStyle =bold/>

TextView
android:id =@ + id / brandTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Brand
android:textStyle =bold/>

TextView
android:id =@ + id / wsTitle
android:layout_width =50dp
android:layout_height =wrap_content
android:text =W / S
android:textStyle =bold/>

TextView
android:id =@ + id / startDateTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =开始日期
android:textStyle =bold/>

TextView
android:id =@ + id / endDateTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =结束日期
android:textStyle =bold/>

TextView
android:id =@ + id / codeTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Code
android:textStyle =bold/>

TextView
android:id =@ + id / tsidTitle
android:layout_width =50dp
android:layout_height =wrap_content
android:text =TSID
android:textStyle =bold/>
< / TableRow>
< / TableLayout>

< GridView
android:id =@ + id / schemeGridView
android:layout_width =wrap_content
android:layout_height =fill_parent
android:clickable =true
android:numColumns =1
android:columnWidth =900dp>
< / GridView>

< / LinearLayout>

网格布局

 < TableLayout xmlns:android =http://schemas.android.com/apk/res/android
xmlns:tools =http:// schemas.android.com/tools
android:layout_width =wrap_content
android:layout_height =fill_parent>

< TableRow android:layout_width =wrap_content>

< TextView
android:id =@ + id / scheme
android:layout_width =80dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / name
android:layout_width =200dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / product
android:layout_width =200dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / channel
android:layout_width =80dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / type
android:layout_width =100dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / customerSelection
android:layout_width =150dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / brand
android:layout_width =80dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / ws
android:layout_width =50dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / startDate
android:layout_width =80dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / endDate
android:layout_width =80dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / code
android:layout_width =80dp
android:layout_height =wrap_content/> ;

TextView
android:id =@ + id / tsid
android:layout_width =50dp
android:layout_height =wrap_content/> ;
< / TableRow>

< / TableLayout>

源代码:

  public class Schemes extends BaseMainActivity {

private String obID =;
private String obName =;
ArrayList< HashMap< String,Object>> dtSchemes = null;
GridView schemeGridView = null;
Activity thisAct = this;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.schemes);

ProgressDialog d = ProgressDialog.show(this,Inventory,
Loading Inventory ...);

OrderBookingDAL dl = new OrderBookingDAL();
obID = dl.getConfigValue(OBID);
obName = dl.getConfigValue(OBName);
dtSchemes = dl.getHHTSchemes(obID,obName,dtSchemes);

schemeGridView =(GridView)findViewById(R.id.schemeGridView);

SimpleAdapter sa = new SimpleAdapter(this,dtSchemes,
R.layout.schemes_grid,new String [] {Scheme,Name,
Product,渠道,类型,客户选择,
品牌,[W / S批准],[开始日期],
[结束日期],代码, TSID},new int [] {
R.id.scheme,R.id.name,R.id.product,R.id.channel,
R.id.type,R. id.customerSelection,R.id.brand,R.id.ws,
R.id.startDate,R.id.endDate,R.id.code,R.id.tsid});
schemeGridView.setAdapter(sa);
schemeGridView.setOnItemClickListener(new OnItemClickListener(){
@Override $ b $ public void onItemClick(AdapterView<?> parent,View view,
int position,long id){
Log.d(Grid Item Click,Clicked pos:+ position);
TextView txt =(TextView)view.findViewById(R.id.tsid);
if(txt! = null&& txt.getText()!= null){
String tsid = txt.getText()。toString();
Intent intent = new Intent(thisAct,SchemeDetails.class);
intent.putExtra(TSID_PARAM,tsid);
thisAct.startActivity(intent);
}
}
});
d.dismiss();
}
}


解决方案

I改变了一些代码,最后得到了表格视图。



解决方案:我添加了Horizo​​ntalScrollView,现在我的LinearLayout是它的子类。我还在TableLayout中添加了android:stretchColumns =*。随着这一点,我不得不在以下方面chnage android:layout_width和android:layout_height的不同控制。



更新的代码如下:

主要活动版式

 < Horizo​​ntalScrollView xmlns:android =http ://schemas.android.com/apk/res/android
xmlns:tools =http://schemas.android.com/tools
android:layout_width =wrap_content
android:layout_height =wrap_content>

< LinearLayout
android:layout_width =wrap_content
android:layout_height =wrap_content
android:orientation =vertical>

<! - 这个表格布局是标题,后面是gridview - >
< TableLayout
android:layout_width =wrap_content
android:layout_height =wrap_content
android:layout_marginLeft =5dp
android:stretchColumns =* >

< TableRow android:layout_width =wrap_content>

TextView
android:id =@ + id / schemeTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Scheme
android:textStyle =bold/>

TextView
android:id =@ + id / nameTitle
android:layout_width =200dp
android:layout_height =wrap_content
android:text =Name
android:textStyle =bold/>

TextView
android:id =@ + id / productTitle
android:layout_width =200dp
android:layout_height =wrap_content
android:text =Product
android:textStyle =bold/>

TextView
android:id =@ + id / channelTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Channel
android:textStyle =bold/>

TextView
android:id =@ + id / typeTitle
android:layout_width =100dp
android:layout_height =wrap_content
android:text =Type
android:textStyle =bold/>

TextView
android:id =@ + id / customerSelectionTitle
android:layout_width =150dp
android:layout_height =wrap_content
android:text =客户选择
android:textStyle =bold/>

TextView
android:id =@ + id / brandTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Brand
android:textStyle =bold/>

TextView
android:id =@ + id / wsTitle
android:layout_width =50dp
android:layout_height =wrap_content
android:text =W / S
android:textStyle =bold/>

TextView
android:id =@ + id / startDateTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =开始日期
android:textStyle =bold/>

TextView
android:id =@ + id / endDateTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =结束日期
android:textStyle =bold/>

TextView
android:id =@ + id / codeTitle
android:layout_width =80dp
android:layout_height =wrap_content
android:text =Code
android:textStyle =bold/>

TextView
android:id =@ + id / tsidTitle
android:layout_width =50dp
android:layout_height =wrap_content
android:text =TSID
android:textStyle =bold/>
< / TableRow>
< / TableLayout>

< GridView
android:id =@ + id / schemeGridView
android:layout_width =fill_parent
android:layout_height =fill_parent
android:clickable =true
android:numColumns =1>
< / GridView>
< / LinearLayout>

< / Horizo​​ntalScrollView>

网格布局

只有以下标签chnaged:

 < TableLayout xmlns:android =http://schemas.android。 com / apk / res / android
xmlns:tools =http://schemas.android.com/tools
android:layout_width =wrap_content
android:layout_height =wrap_content
android:stretchColumns =*>

源代码:



Java代码没有任何变化。



我从以下网站获得了一些建议:我怎样才能使我的布局水平和垂直滚动?如何把一个很长的表格布局内水平滚动视图以正确的方式?


I am new to Android and Have to Port a Windows Mobile Application to an Android Application.

Issue: I need GridView in Android similar to .net GridView which is able to scroll in both Horizontal and Vertical directions at the same time.

As there are many rows and many columns in my data. So, all the columns are not shown as screen width is small on mobile. Multiple rows are shown as vertical scroll is enabled. What i want is that this GridView is somehow scrollable in both directions at the same time. So that user could view data in tabular form.

I am using GridView in Android with the help of TableLayout and SimpleAdapter. Following is my code:

Main Activity Layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

<!-- This Table Layout is header followed by the gridview -->
<TableLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp" >

    <TableRow android:layout_width="wrap_content" >

        <TextView
            android:id="@+id/schemeTitle"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="Scheme"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/nameTitle"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:text="Name"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/productTitle"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:text="Product"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/channelTitle"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="Channel"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/typeTitle"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="Type"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/customerSelectionTitle"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:text="Customer Selection"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/brandTitle"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="Brand"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/wsTitle"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:text="W/S"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/startDateTitle"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="Start Date"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/endDateTitle"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="End Date"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/codeTitle"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="Code"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tsidTitle"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:text="TSID"
            android:textStyle="bold" />
    </TableRow>
</TableLayout>

<GridView
    android:id="@+id/schemeGridView"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:numColumns="1"
    android:columnWidth="900dp" >
</GridView>

</LinearLayout>

Grid Layout:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent" >

<TableRow android:layout_width="wrap_content" >

    <TextView
        android:id="@+id/scheme"
        android:layout_width="80dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/name"
        android:layout_width="200dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/product"
        android:layout_width="200dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/channel"
        android:layout_width="80dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/type"
        android:layout_width="100dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/customerSelection"
        android:layout_width="150dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/brand"
        android:layout_width="80dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/ws"
        android:layout_width="50dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/startDate"
        android:layout_width="80dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/endDate"
        android:layout_width="80dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/code"
        android:layout_width="80dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tsid"
        android:layout_width="50dp"
        android:layout_height="wrap_content" />
</TableRow>

</TableLayout>

Source Code:

public class Schemes extends BaseMainActivity {

private String obID = "";
private String obName = "";
ArrayList<HashMap<String, Object>> dtSchemes = null;
GridView schemeGridView = null;
Activity thisAct = this;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.schemes);

    ProgressDialog d = ProgressDialog.show(this, "Inventory",
            "Loading Inventory...");

    OrderBookingDAL dl = new OrderBookingDAL();
    obID = dl.getConfigValue("OBID");
    obName = dl.getConfigValue("OBName");
    dtSchemes = dl.getHHTSchemes(obID, obName, dtSchemes);

    schemeGridView = (GridView) findViewById(R.id.schemeGridView);

    SimpleAdapter sa = new SimpleAdapter(this, dtSchemes,
            R.layout.schemes_grid, new String[] { "Scheme", "Name",
                    "Product", "Channel", "Type", "CustomerSelection",
                    "Brand", "[W/S Approved]", "[Start Date]",
                    "[End Date]", "Code", "TSID" }, new int[] {
                    R.id.scheme, R.id.name, R.id.product, R.id.channel,
                    R.id.type, R.id.customerSelection, R.id.brand, R.id.ws,
                    R.id.startDate, R.id.endDate, R.id.code, R.id.tsid });
    schemeGridView.setAdapter(sa);
    schemeGridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Log.d("Grid Item Click", "Clicked pos:"+position);
            TextView txt = (TextView) view.findViewById(R.id.tsid);
            if (txt != null && txt.getText() != null) {
                String tsid = txt.getText().toString();
                Intent intent = new Intent(thisAct,SchemeDetails.class); 
                intent.putExtra(TSID_PARAM, tsid);
                thisAct.startActivity(intent);
            }
        }
    });
    d.dismiss();
}
}

解决方案

I changed some code and finally able get tabular view.

Solution: I added HorizontalScrollView and now my LinearLayout is its child. Also I added android:stretchColumns="*" in TableLayout. Along with this i had to chnage android:layout_width and android:layout_height of different controls in following ways.

Updated code is below:

Main Activity Layout:

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <!-- This Table Layout is header followed by the gridview -->
    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:stretchColumns="*" >

        <TableRow android:layout_width="wrap_content" >

            <TextView
                android:id="@+id/schemeTitle"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:text="Scheme"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/nameTitle"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:text="Name"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/productTitle"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:text="Product"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/channelTitle"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:text="Channel"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/typeTitle"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="Type"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/customerSelectionTitle"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:text="Customer Selection"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/brandTitle"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:text="Brand"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/wsTitle"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="W/S"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/startDateTitle"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:text="Start Date"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/endDateTitle"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:text="End Date"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/codeTitle"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:text="Code"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/tsidTitle"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="TSID"
                android:textStyle="bold" />
        </TableRow>
    </TableLayout>

    <GridView
        android:id="@+id/schemeGridView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:numColumns="1" >
    </GridView>
</LinearLayout>

</HorizontalScrollView>

Grid Layout:

Only following tag is chnaged:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:stretchColumns="*">

Source Code:

No change in Java code.

I got idea from: How can I make my layout scroll both horizontally and vertically? and How to put a very long table layout inside the horizontal Scroll view in the CORRECT way?

这篇关于Android GridView同时具有水平和垂直滚动条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆