android中动态文字排版

本文介绍如何使用GridView和ArrayAdapter实现动态排版效果,通过不同按钮控制GridView内元素的数量和排列方式,同时展示了如何响应用户的点击事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

范例说明 提到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。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值