利用Gallery的拖动功能,能很容易的将在一行上显示不下的内容显示出来。
这种特性可以用在菜单上(如果菜单足够多,以至一行显示不下)。
但是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>
运行后显示的效果:
看不出什么,呵呵,拖动一下看看。