zoukankan      html  css  js  c++  java
  • GridView布局,自定义适配器,水平滚动

    添加GridItem布局XML文件                                                                                                                                       

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:orientation="vertical" >
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="70dp"
            android:layout_height="70dp"
             />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
    
    </LinearLayout>
    

     主界面添加GridView布局XML文件                                                                                                                                 

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:layout_gravity="center"
    >
    	<HorizontalScrollView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp" >
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:orientation="horizontal"
                android:layout_margin="10dp" >
        
    			<GridView
    		    android:id="@+id/gridView1"
    		    android:layout_width="fill_parent"
    		    android:layout_height="wrap_content" 
    			android:numColumns="auto_fit"
    		    android:verticalSpacing="10dp"
    			android:horizontalSpacing="10dp"	
    		    >
    		    </GridView>
    		</LinearLayout>
        </HorizontalScrollView>
    </LinearLayout>
    

     自定义GridView适配器                                                                                                                                               

    package com.example.psq;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MyGridAdapter extends BaseAdapter{
    
    	LayoutInflater inflater = null;
    	ArrayList<AppInfo> listInfo;
    	public MyGridAdapter(Context context,ArrayList<AppInfo> listInfo){
    		//inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    		inflater = LayoutInflater.from(context);
    		//this.inflater = inflater;
    		this.listInfo = listInfo;
    	}
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return listInfo.size();
    	}
    	@Override
    	public Object getItem(int index) {
    		// TODO Auto-generated method stub
    		return listInfo.get(index);
    	}
    	@Override
    	public long getItemId(int index) {
    		// TODO Auto-generated method stub
    		return index;
    	}
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
    		// TODO Auto-generated method stub
    		ViewHolder holder;
    		if(convertView == null || convertView.getTag() == null){
    			convertView = inflater.inflate(R.layout.grid_item,null);
    			holder = new ViewHolder();
    			holder.imageView = (ImageView)convertView.findViewById(R.id.imageView1);
    			holder.textView = (TextView)convertView.findViewById(R.id.textView1);
    			convertView.setTag(holder);
    		}else{
    			
    			holder = (ViewHolder)convertView.getTag();
    		}
    		AppInfo appInfo = listInfo.get(position);
    		holder.imageView.setImageResource(appInfo.rid);
    		holder.textView.setText(appInfo.title);
    		return convertView;
    	}
    	public class ViewHolder{
    		ImageView imageView;
    		TextView textView;
    	}
    }
    
    

     主界面Activity                                                                                                                                                         

    package com.example.psq;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.example.psq.R;
    
    import android.support.v7.app.ActionBarActivity;
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.PixelFormat;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.WindowManager;
    import android.view.WindowManager.LayoutParams;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.TextView;
    
    
    public class MainActivity extends Activity{
    
    	GridView gridView;
    	LayoutInflater inflater;
    	ArrayList<AppInfo> listInfo;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
         
            gridView = (GridView)findViewById(R.id.gridView1);
            inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            //inflater = LayoutInflater.from(this);
            listInfo = new ArrayList<AppInfo>();
            for(int i=0;i<15;i++){
    	        AppInfo appInfo = new AppInfo();
    	        appInfo.rid = R.drawable.icon001;
    	        appInfo.title = "001";
    	        listInfo.add(appInfo);
            }
            
            
            int size = listInfo.size();
            int length = 100;
            DisplayMetrics dm = new DisplayMetrics();
            this.getWindowManager().getDefaultDisplay().getMetrics(dm);
            float density = dm.density;
            int gridviewWidth = (int) (size * (length + 4) * density);
            int itemWidth = (int) (length * density);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    gridviewWidth, LinearLayout.LayoutParams.FILL_PARENT);
            gridView.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
            gridView.setColumnWidth(itemWidth); // 设置列表项宽
            gridView.setHorizontalSpacing(5); // 设置列表项水平间距
            gridView.setStretchMode(GridView.NO_STRETCH);
            gridView.setNumColumns(size); // 设置列数量=列表集合数
            //gridView.setAdapter(new MyAdapter());
            gridView.setAdapter(new MyGridAdapter(this,listInfo));
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }
    

     AppInfo类                                                                                                                                                              

    public class AppInfo {
    	public int rid;
    	public String title;
    }
    
  • 相关阅读:
    抽象工厂模式
    外观模式
    策略模式
    状态模式
    观察者模式
    装饰者模式
    模板方法模式
    适配器模式
    中介者模式
    组合模式
  • 原文地址:https://www.cnblogs.com/mypsq/p/5711689.html
Copyright © 2011-2022 走看看