范例说明
提到GridView这个Widget,就会令人联想到Adapter。GridView是一个类似于“表格化”的二维排版配置View,当GridView里的元素多到画面放不下时,就会出现scrolling的效果,一般在GridView里的元素称为Item,要将文字作为Item放入GridView,就要借助ArrayAdapter对象。
这个范例将示范如何利用GridView来动态排版文字,事前在Layout(main.xml)当中配置一个GridView Widget(myGridView1),并设计两个按钮,作为动态放入GridView的开关。其中一个按钮设置GridView为两列样式,并放入4个Item;另一个按钮则动态指定为3列样式,并放入9个Item,以此达到利用GridView动态进行文字排版的效果。当要以二维表格显示未知元素(Item)个数的文字时,利用此法就可以轻松完成排版,且在GridView上也同样具有OnItemClickListener方法,可以捕捉User在GridView上单击的Item是什么。
范例程序
src/irdc.ex04_18/EX04_18.java
引用Android.widget.GridView后,便可在Activity当中声明GridView对象,利用findViewById()找到事先配放在Layout(main.xml)上的GridView Widget(R.id.myGridView1)。
程序中有mButton01与mButton02两个按钮对象,各自设置其OnClickListener,在按钮事件中处理要配置GridView的方法。GridView的setNumColumns方法为设置其字段数量,为了方便配置GridView,使用了ArrarAdapter,Android.widget.ArrayAdapter默认构造需要3个参数,并将初始化的ArrayAdapter对象aryAdapter1以调用GridView. setAdapter()的方式,将String类型的Item放入GridView(mGridView01)当中。
/* import程序略 */
public class EX04_18 extends Activity
{
private TextView mTextView01;
private Button mButton01,mButton02;
private GridView mGridView01;
private String[] mGames1,mGames2;
private ArrayAdapter aryAdapter1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* 4个字符串数组 */
mGames1 = new String[]
{
getResources().getString(R.string.str_list1),
getResources().getString(R.string.str_list2),
getResources().getString(R.string.str_list3),
getResources().getString(R.string.str_list4)
};
/* 9个字符串数组 */
mGames2 = new String[]
{
getResources().getString(R.string.str_list1),
getResources().getString(R.string.str_list2),
getResources().getString(R.string.str_list3),
getResources().getString(R.string.str_list4),
getResources().getString(R.string.str_list1),
getResources().getString(R.string.str_list2),
getResources().getString(R.string.str_list3),
getResources().getString(R.string.str_list4),
getResources().getString(R.string.str_list1)
};
mButton01 = (Button)findViewById(R.id.myButton1);
mButton02 = (Button)findViewById(R.id.myButton2);
mGridView01 = (GridView)findViewById(R.id.myGridView1);
mTextView01 = (TextView)findViewById(R.id.myTextView1);
mButton01.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
/* 4个元素,以2列方式显示(2x2) */
mGridView01.setNumColumns(2);
aryAdapter1 = new ArrayAdapter
(EX04_18.this, R.layout.simple_list_item_1_small, mGames1);
mGridView01.setAdapter(aryAdapter1);
//mGridView01.setScrollBarStyle(DEFAULT_KEYS_DIALER);
mGridView01.setSelection(2);
mGridView01.refreshDrawableState();
}
});
mButton02.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
/* 9个元素,以3列方式显示(3x3) */
mGridView01.setNumColumns(3);
aryAdapter1 = new ArrayAdapter
(EX04_18.this, R.layout.simple_list_item_1_small, mGames2);
mGridView01.setAdapter(aryAdapter1);
}
});
mGridView01.setOnItemClickListener
(new GridView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView parent,
View v, int position, long arg3)
{
// TODO Auto-generated method stub
/* 判断Adapter里的元素个数,判断被单击的是第几个元素名称 */
switch(aryAdapter1.getCount())
{
case 4:
/* position为GridView里的元素索引值 */
mTextView01.setText(mGames1[position]);
break;
case 9:
mTextView01.setText(mGames2[position]);
break;
}
}
});
}
}
res/layout/simple_list_item_1_small.xml
放在layout下面的simple_list_item_1_small.xml,是用来配置ArrayAdapter第二个参数text- ViewResourceId,必须为TextView进行配置,若需要更改放入Item文字的模式,可以通过这个文件来进行文字大小、模式的属性设置,而一旦放入ArrayAdapter,这个配置就会立即生效;当然也可以设置许多的layout xml,并提供给不同的GridView来使用,以此让每一个GridView都有不同的风貌。
扩展学习
既然谈到了ArrayAdapter,先来看看这个类的原型。
android.widget.ArrayAdapter.ArrayAdapter(Context context, int textViewResourceId, String[] objects)
android.widget.ArrayAdapter.ArrayAdapter需要传递3个参数才能构造,分别说明如表4-2所示。
表4-2 需传入的3个参数
Context context
现有程序的context
int textViewResourceId
要使用的Layout文件Resource ID,当中必须包含一个TextView
String[] objects
要放入的字符串数组
在GridView的Widget XML属性名称及GridView对象的方法对应如表4-3所示。
表4-3 XML属性名称及对应的对象方法
XML属性名称
对应的对象方法
android:columnWidth
setColumnWidth(int)
android:gravity
setGravity(int)
android:horizontalSpacing
setHorizontalSpacing(int)
android:numColumns
setNumColumns(int)
android:stretchMode
setStretchMode(int)
android:verticalSpacing
setVerticalSpacing(int)
最后来看看刚才构造ArrayAdapter时所使用的“simple_list_item_1_small.xml”,这个文件是提供给GridView的Layout配置,范例程序共使用了textColor、textSize与textAppearance等属性,但其实只要利用以下的XML基本元素,就可以满足GridView可使用的ArrayAdapter TextView。
android中动态文字排版
最新推荐文章于 2025-03-14 12:52:13 发布