利用Gallery的拖动功能,能很容易的将在一行上显示不下的内容显示出来。
这种特性可以用在菜单上(如果菜单足够多,以至一行显示不下)。
但是Gallery有个不爽的地方,就是被点击的那个item会一直出现在中间,有时候我们并不需要这样的“智能”!怎么办呢?
那就利用GridView,将GridView放在HorizontalScrollView中,如下:
注意上面id为layout_webnav的LinearLayout,这里的layout_width是需要计算的!见下面代码。
注意上面的itemWidth*data.size(),这里才是LinearLayout的实际宽度!
R.layout.row_test2布局如下:
运行后显示的效果:
看不出什么,呵呵,拖动一下看看。
这种特性可以用在菜单上(如果菜单足够多,以至一行显示不下)。
但是Gallery有个不爽的地方,就是被点击的那个item会一直出现在中间,有时候我们并不需要这样的“智能”!怎么办呢?
那就利用GridView,将GridView放在HorizontalScrollView中,如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout android:background="#030e13" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/webnav_left" android:layout_width="8dip" android:layout_height="wrap_content" android:layout_centerVertical="true" android:src="@drawable/news_left" /> <ImageView android:id="@+id/webnav_right" android:layout_width="8dip" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:src="@drawable/news_right" /> <HorizontalScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toLeftOf="@id/webnav_right" android:layout_toRightOf="@id/webnav_left" android:scrollbars="none"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/layout_webnav" android:layout_width="800dip" android:layout_height="wrap_content" android:orientation="horizontal"> <GridView android:id="@+id/gallery_webnav" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#030e13" android:gravity="center" android:numColumns="auto_fit" android:listSelector="#00000000"> </GridView> </LinearLayout> </LinearLayout> </HorizontalScrollView> </RelativeLayout> </LinearLayout>
注意上面id为layout_webnav的LinearLayout,这里的layout_width是需要计算的!见下面代码。
public class Test_2_Activity extends Activity{ private final int per=3;//每行显示的个数 private GridView gridView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test2); DisplayMetrics dm = new DisplayMetrics(); dm = getApplicationContext().getResources().getDisplayMetrics(); int menuWidth = dm.widthPixels-16; gridView= (GridView) findViewById(R.id.gallery_webnav); int itemWidth = menuWidth/per; gridView.setColumnWidth(itemWidth); ArrayList<Map<String,String>> data=new ArrayList<Map<String,String>>(); Map<String,String> map; for(int i=0;i<5;i++){ map=new HashMap<String,String>(); map.put("simple_item_1", "name"+i); map.put("simple_item_2", "age"+i); map.put("simple_item_3", "class"+i); data.add(map); } int resource=R.layout.row_test2; String[] from={"simple_item_1","simple_item_2","simple_item_3"}; int[] to={R.id.simple_item_1,R.id.simple_item_2,R.id.simple_item_3}; SimpleAdapter adapter=new SimpleAdapter(this, data, resource, from, to); gridView.setAdapter(adapter); //让GridView一行显示,这里的layout_width是需要计算的 LinearLayout layout = (LinearLayout) findViewById(R.id.layout_webnav); layout.setLayoutParams(new LayoutParams(itemWidth*data.size(), LayoutParams.WRAP_CONTENT)); gridView.setSelection(0); gridView.setOnItemClickListener(listener); } }
注意上面的itemWidth*data.size(),这里才是LinearLayout的实际宽度!
R.layout.row_test2布局如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/simple_item_1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" /> <RelativeLayout android:background="#030e13" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/simple_item_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:paddingLeft="10dp" /> <TextView android:id="@+id/simple_item_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingRight="10dp" /> </RelativeLayout> </LinearLayout>
运行后显示的效果:
看不出什么,呵呵,拖动一下看看。