GridView和ListView都是android比較重要的控件,但是橫滾的控件不是太多。
這裡介紹怎麼把GridView橫向滾動起來,看到其他網友也有相應的解決方法,自己隻是把這些知識總結一下,供大家參考!
首先讓GridView橫向滾動需要HorizontalScrollView這個控件,例如:
[html] view plain copy print ?
- <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 14px"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
- <HorizontalScrollView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:scrollbars="none" >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
- <GridView
- android:id="@+id/gridview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center" >
- </GridView>
- </LinearLayout>
- </HorizontalScrollView>
- </LinearLayout></SPAN>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="none" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" >
</GridView>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
以上是主要布局,然後我們寫GridView中每個item中的布局,比較簡單,隻是給大家介紹下:
[html] view plain copy print ?
- <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 14px"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <ImageView
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:background="#00ff00" />
- <TextView
- android:id="@+id/item_textview"
- android:layout_width="100dp"
- android:layout_height="20dp"
- android:gravity="center" />
- </LinearLayout></SPAN>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#00ff00" />
<TextView
android:id="@+id/item_textview"
android:layout_width="100dp"
android:layout_height="20dp"
android:gravity="center" />
</LinearLayout>
上面是item的布局,比較簡單,就是一個ImageView和TextView,然後是主要實作GridView的Adapter。
以下是Activity的實作方法。
[java] view plain copy print ?
- <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 14px">public class MainActivity extends Activity {
- private GridView gridView;
- private LayoutInflater inflater;
- private List<String> dataList = new ArrayList<String>();
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- gridView = (GridView) this.findViewById(R.id.gridview);
- for (int i = 0; i < 10; i++) {
- dataList.add("測試" + i);
- }
- inflater = (LayoutInflater) this
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- GridViewAdapter adapter = new GridViewAdapter();
- gridView.setAdapter(adapter);
- int size = dataList.size();
- DisplayMetrics dm = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
- float density = dm.density;
- int allWidth = (int) (110 * size * density);
- int itemWidth = (int) (100 * density);
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
- allWidth, LinearLayout.LayoutParams.FILL_PARENT);
- gridView.setLayoutParams(params);
- gridView.setColumnWidth(itemWidth);
- gridView.setHorizontalSpacing(10);
- gridView.setStretchMode(GridView.NO_STRETCH);
- gridView.setNumColumns(size);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- final class GridViewAdapter extends BaseAdapter {
- @Override
- public int getCount() {
- return dataList.size();
- }
- @Override
- public Object getItem(int position) {
- return dataList.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- convertView = inflater.inflate(R.layout.gridview_item, null);
- TextView textView = (TextView) convertView
- .findViewById(R.id.item_textview);
- String str = dataList.get(position);
- textView.setText(str);
- return convertView;
- }
- }
- }</SPAN>
public class MainActivity extends Activity {
private GridView gridView;
private LayoutInflater inflater;
private List<String> dataList = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) this.findViewById(R.id.gridview);
for (int i = 0; i < 10; i++) {
dataList.add("測試" + i);
}
inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
GridViewAdapter adapter = new GridViewAdapter();
gridView.setAdapter(adapter);
int size = dataList.size();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float density = dm.density;
int allWidth = (int) (110 * size * density);
int itemWidth = (int) (100 * density);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
allWidth, LinearLayout.LayoutParams.FILL_PARENT);
gridView.setLayoutParams(params);
gridView.setColumnWidth(itemWidth);
gridView.setHorizontalSpacing(10);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setNumColumns(size);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
final class GridViewAdapter extends BaseAdapter {
@Override
public int getCount() {
return dataList.size();
}
@Override
public Object getItem(int position) {
return dataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.gridview_item, null);
TextView textView = (TextView) convertView
.findViewById(R.id.item_textview);
String str = dataList.get(position);
textView.setText(str);
return convertView;
}
}
}
主要是設定GridView的LayoutParams,new 這個LayoutParams對象必須是這個View所在Layout的布局類型,然後設定GridView總長度和每個item的長度,然後設定總個數就可以實作橫滾的效果!