Android的GridView和ScrollView的嵌套,gridviewscrollview

來源:互聯網
上載者:User

Android的GridView和ScrollView的嵌套,gridviewscrollview

來源於回答頻道答題,因此內容都是基於回答頻道的原題布局進行

1、布局檔案如下

檔案名稱:testxm.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#f1f1f1"    android:orientation="vertical" >    <!-- 頂部藍色工具列 -->    <RelativeLayout        android:id="@+id/fujin_top_llayout"        android:layout_width="fill_parent"        android:layout_height="36dp"        android:background="#47a9d0"        android:gravity="center_vertical"        android:orientation="horizontal" >        <TextView            android:id="@+id/fujin_top_llayout_lessthan"            android:layout_width="wrap_content"            android:layout_height="30dp"            android:layout_alignParentLeft="true"            android:layout_marginLeft="10dip"            android:paddingLeft="10dp"            android:text="1111" />        <TextView            android:id="@+id/fujin_top_llayout_fujin"            android:layout_width="wrap_content"            android:layout_height="30dp"            android:layout_toRightOf="@+id/fujin_top_llayout_lessthan"            android:paddingLeft="10dp"            android:paddingTop="3dp"            android:text="222"            android:textColor="#fff"            android:textSize="16sp" />        <TextView            android:id="@+id/fujin_top_llayout_dingwei"            android:layout_width="70dp"            android:layout_height="30dp"            android:layout_toLeftOf="@+id/fujin_top_llayout_search"            android:text="33333" />        <TextView            android:id="@+id/fujin_top_llayout_search"            android:layout_width="wrap_content"            android:layout_height="30dp"            android:layout_alignParentRight="true"            android:paddingRight="12dp"            android:text="44444"/>    </RelativeLayout>    <!-- 頂部藍色工具列結束 -->    <ScrollView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:fillViewport="true"        android:layout_weight="1"        android:scrollbars="vertical" >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="vertical" >            <!-- title -->            <RelativeLayout                android:id="@+id/fenlei_title_rl"                android:layout_width="match_parent"                android:layout_height="28dp"                android:layout_marginLeft="15dp"                android:layout_marginRight="15dp"                android:layout_marginTop="20dp" >                <TextView                    android:id="@+id/fenlei_title_tv"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:gravity="center"                    android:text="標題"                    android:textSize="15sp" />            </RelativeLayout>            <!-- title_over -->            <!-- btnlist -->            <LinearLayout                android:id="@+id/fujin_btnlist_tl"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_marginTop="15dp"                android:orientation="vertical"                android:scrollbarAlwaysDrawVerticalTrack="true" >            </LinearLayout>            <!-- btnlist_over -->        </LinearLayout>    </ScrollView></LinearLayout>

2、gridview的item布局檔案

<?xml version="1.0" encoding="utf-8"?><RelativeLayout          xmlns:android="http://schemas.android.com/apk/res/android"          android:layout_height="wrap_content"          android:paddingBottom="4dip" android:layout_width="fill_parent">         <TextView                android:layout_width="wrap_content"                android:layout_below="@+id/ItemImage"                android:layout_height="wrap_content"                android:text="TextView01"                android:layout_centerHorizontal="true"                android:id="@+id/ItemText">         </TextView></RelativeLayout>

3、activity代碼

public class PorterDuffActivity extends Activity{private PorterCanvas mPorterCanvas = null;private GridView gridView;private LinearLayout ll;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.testxm);this.addview();}private void addview(){        for(int i=1; i<=35;i++){            ll=(LinearLayout) findViewById(R.id.fujin_btnlist_tl);            this.addTwoClassify(i);        }}private void makeGridView(int num){ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();        for(int i=0;i<10;i++)        {          HashMap<String, Object> map = new HashMap<String, Object>();          map.put("ItemText", num+"NO."+String.valueOf(i));//按序號做ItemText          lstImageItem.add(map);        }        //產生適配器的ImageItem <====> 動態數組的元素,兩者一一對應        SimpleAdapter saImageItems = new SimpleAdapter(this, //沒什麼解釋                                                  lstImageItem,//資料來源                                                   R.layout.gridview_item,//night_item的XML實現                                                                                                    //動態數組與ImageItem對應的子項                                                          new String[] {"ItemText"},                                                                                                     //ImageItem的XML檔案裡面的一個ImageView,兩個TextView ID                                                  new int[] {R.id.ItemText});        //添加並且顯示        gridView.setAdapter(saImageItems);  }private void addTwoClassify(int i){        gridView=new MyGridView(PorterDuffActivity.this);//注意這裡使用的是MyGridView,如果使用GridView的話,只會顯示一行多一點,第二行顯示不完全,使用MyGridView的話,能夠完全顯示出來。commend by danielinbiti        gridView.setVerticalSpacing(10);        gridView.setHorizontalSpacing(15);        gridView.setNumColumns(3);                this.makeGridView(i);        LinearLayout ll_two=new LinearLayout(PorterDuffActivity.this);        ll_two.setPadding(10, 0, 0, 0);        ll_two.addView(gridView,                new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));                ll.addView(ll_two, new LinearLayout.LayoutParams(                 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));     }}

4、MyGridView代碼

public class MyGridView extends GridView{ private boolean needScrollBar = false;   //設定是否有ScrollBar,當要在ScollView中顯示時,應當設定為false。 否則為 true      public MyGridView(Context context) {           super(context);       }       public MyGridView(Context context, AttributeSet attrs) {           super(context, attrs);       }       public MyGridView(Context context, AttributeSet attrs, int defStyle) {           super(context, attrs, defStyle);       }           @Override       protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {           if (!needScrollBar) {               int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);               super.onMeasure(widthMeasureSpec, expandSpec);           } else {               super.onMeasure(widthMeasureSpec, heightMeasureSpec);           }       }   }


總結:

因為ScrollView和GridView有布局上的衝突,如果外層嵌套了ScrollView,則GridView如果不是指定固定高度,則無法顯示完全。ListView也有該問題。

但其實針對這到題來說,我覺得使用LinearLayout等分方式的布局也是可以的,垂直布局往下添加就可以了,這樣避免了與ScrollView的衝突。但主要因為GridView是封裝好的組件,所以使用了GridView能夠簡化一部分工作,但也增加了布局重新整理的負擔(雖然一般可以不考慮)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.