- 浏览: 112756 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zhangchixtacbn:
能否发一份代码参考一下,谢谢。554242516@qq.com ...
DWZ整合struts2笔记 -
tuimaochang:
你好,这个有完整的源码吗?里面的对话框/图片资源用我自己的看不 ...
ActivityGroup + ViewPager 实现可滑动的底部Tab -
lintghi:
...
教你如何提高eclipse速度 -
119568242:
...
解决Bitmap读取频发OOM -
thunder_yan:
beat_it_ 写道能不能给份代码啊?上面不就是一个例子吗? ...
DWZ整合struts2笔记
Android系统自带的RadioGroup只有两种排列方式:横向或纵向。 但是现实中可能需要将RadioGroup按网格状排列, 如何实现?
本文将介绍实现方法。
先看效果图:
思路:
1. 创建一个PopupWindow的弹出窗口
2. 在PopupWindow中填充一个GridView
3. 在GridView内填充多个由img和text组合而成的、外形类似于RadioButton的组合View视图
4. 当选项有改变的饿时候,更新GridView内的视图。
实现过程:
1. 创建由Img和Text组合而成的、外形类似于RadioButton的组合View视图(下面简称URadioButton)
先看URadioButton的布局,左图标右文字:只需要把图片或文字填充到<ImageView>或<TextView>中就可以实现内容不同的URadioButton。
item_radiobutton.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item_radiobutton" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/item_radioimg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" /> <TextView android:layout_toRightOf="@+id/item_radioimg" android:id="@+id/item_radiotext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" /> </RelativeLayout>
我们的目标是把多个这个的URadioButton填充到GridView中,然而从GridView的填充函数:
GridView.setAdapter(ListAdapter adapter)
中,可以看出需要将一个Adapter填充到GridView中。那么先编写一个方法:该方法能够生成由多URadioButton组成的Adapter。
/* * 创建包含多个radiobutton的Adapter。 * RadioButton的图片有redioImg指定,RadioButton的文字由radioNameArray指定 * RadioButton的图片和文字的相对位置在item_radiobutton.xml布局文件中指定。 */ private SimpleAdapter getRadioButtonAdapter(int redioImage, String[] radioNameArray) { ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < radioNameArray.length; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("itemRadioImg", redioImage); map.put("itemRadioText", radioNameArray[i]); data.add(map); } SimpleAdapter simperAdapter = new SimpleAdapter(this, data, R.layout.item_radiobutton, new String[] { "itemRadioImg", "itemRadioText" }, new int[] { R.id.item_radioimg, R.id.item_radiotext }); return simperAdapter; }下面的代码为:调用上面定义的getRadioButtonAdapter方法生成我们所需要Adapter:
private SimpleAdapter mWishesAdapter; private String[] mWishes = {"睡到自然醒", "钱多手抽筋", "加薪又升职", "妞多任我选"}; ... ... mWishesAdapter = getRadioButtonAdapter(R.drawable.btn_radio_off, mWishes);
其中R.drawable.btn_radio_off图标为:
2. 在GridView中填充URadioButtons
这里就直接贴代码了:
mWishesAdapter = getRadioButtonAdapter(R.drawable.btn_radio_off, mWishes); LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); mViewGroup = (ViewGroup) mLayoutInflater.inflate(R.layout.radiogroup_gridview, null, true); mGrid = (GridView)mViewGroup.findViewById(R.id.gridview); mGrid.setAdapter(mWishesAdapter); mGrid.requestFocus(); mGrid.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { if(mLastItme != arg2){ //更新图标、实现单选 if(mLastItme>=0){ ChangeRadioImg(mWishesAdapter, mLastItme,false); } mLastItme = arg2; ChangeRadioImg(mWishesAdapter,arg2,true); } } });
为了实现单选,所以每当选择了新选项的时候,就将以前的选中的选项的图标改为:off, 本次选中的选型的图标改为On,而实现这个功能的方法为:ChangeRadioImg():
/* * 根据选中的状态来更新图标。也就是实现我们自定义RadioGroup的单选功能 */ private void ChangeRadioImg(SimpleAdapter adapter,int selectedItem, boolean on) { HashMap<String, Object> map = (HashMap<String, Object>)adapter.getItem(selectedItem); if(on) map.put("itemRadioImg", R.drawable.btn_radio_on); else map.put("itemRadioImg", R.drawable.btn_radio_off); adapter.notifyDataSetChanged(); }
经过上面得两个步骤,我们已经构造了网格状的RadioGroup,下面我们将通过一个PopupWindow将其显示出来。
//注意,PopupWindow的第一个参数必须是没有父亲的view对象即顶层View。 mPopGridRadioGroup = new PopupWindow(mViewGroup, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT,true); mPopGridRadioGroup.setBackgroundDrawable(new BitmapDrawable()); mPopGridRadioGroup.setTouchInterceptor(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { mPopGridRadioGroup.dismiss(); return true; } return false; } }); mPopGridRadioGroup.showAtLocation(findViewById(R.id.mainView), Gravity.CENTER, 0, 0); mPopGridRadioGroup.update();
到此我们就实现了网格状排列的RadioGroup。
上传源代码打包
- GridRadioGroup.zip (74.3 KB)
- 下载次数: 71
发表评论
-
Android 实现圆形Panel ListView
2012-12-04 18:32 1360(效果如上图所示) 其实很简单: 比方说上面的容 ... -
Android WIFI热点工具
2012-10-28 02:09 3436Hello Thunder夜未眠, 午夜时分, 发布一个小工具 ... -
Android 2.3+ 使用StrictMode
2012-09-21 14:47 0ANR窗口产生的原因是多种多样的。程序的主线程因为IO读 ... -
内存泄露 on Android
2012-09-21 14:41 11041.资源对象没关闭造成的内存泄漏 描述: 资源性对象 ... -
Android 高效编程
2012-09-21 14:36 13641.使用本地方法 当 ... -
Android, BaseAdapter 处理大数据量时的优化
2012-09-21 14:23 7408Android优化 最常见的就是ListView, Galle ... -
SQLite优化方法
2012-09-21 13:50 34751.建表优化 SQLite的数据库本质文件读写操作,频 ... -
Android SQLite插入优化
2012-09-21 13:48 1372最初代码如下,直接执行sql语句,外加事务提升性能: ... -
解决Bitmap读取频发OOM
2012-08-25 09:48 1336/** * Bitmap 工具包 * @author ... -
ActivityGroup + ViewPager 实现可滑动的底部Tab
2012-07-01 17:28 6923首先看看布局文件 main.xml <?xml ... -
Android 使用des算法
2012-06-11 14:09 1929import java.security.Key; i ... -
Android 自定义Toast显示图片
2012-06-11 14:08 3044Toast用于向用户显示一些帮助/提示。下面展示了5种效 ... -
Android TabActivity中onKeyDown无效问题
2012-06-11 14:04 35571.当继承TabActivity时,同学们是不是onKeyDo ... -
Android程序安装和卸载
2012-06-11 14:01 1103安装: String str = "/Can ... -
Android 完全退出
2012-06-11 14:00 2582//通过context获取系统服务,得到Activity ... -
Android: NDK编程
2012-06-05 10:32 5788为何要用到NDK? 概括来说主要分为以下几种情况: ... -
Android 3D图片切换
2012-06-05 10:25 2557MainActivity package org.wp ... -
android反编译和防止反编译的方法
2012-06-05 10:23 1613android基于java的,而ja ... -
android开发之MediaPlayer+Service MP3播放器
2012-06-02 14:57 4045import java.io.File; impo ... -
Android怎么让一个service开机自动启动
2012-06-02 14:58 2005今天我们主要来探讨android怎么让一个service开机自 ...
相关推荐
本篇文章将深入探讨如何在Android中实现网格状的RadioGroup。 首先,我们需要理解`RadioGroup`和`GridView`的基本概念。`RadioGroup`是Android SDK提供的一种可以容纳多个单选按钮的容器,用户在其中只能选择一个...
5. **自定义布局参数**:如果需要支持不同的布局类型,如网格布局,我们可以创建自定义的布局参数类,继承自`RadioGroup.LayoutParams`,并添加必要的属性来控制布局的样式。 6. **测试与优化**:完成自定义`...
例如,以下是一个简单的XML布局文件,展示了如何创建一个2列的RadioGroup: ```xml xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/radio_group" android:layout_width="match_...
在Android开发中,基础控件是构建用户界面(UI)的核心元素。这些控件使得开发者能够创建各种交互式和功能丰富的应用。以下是一些主要的Android基础控件及其使用方法的详细说明: 1. **按钮(Button)** - `Button`...
理解并熟练使用这些基本控件是Android开发的基础,它们可以帮助你创建出功能丰富的用户界面。 对于初学者来说,建议通过实践项目来熟悉这些控件,同时,查阅官方文档和在线教程,以便更深入地了解每个控件的特性和...
本文将深入探讨Android中的一些常用控件,以及如何利用这些控件来创建功能丰富的用户界面。 1. Button(按钮):按钮是用户界面中最常见的控件之一,用于触发一个操作或事件。在XML布局中,我们可以通过`<Button>`...
在Android应用开发中,`TabHost`是一种常用的组件,它允许开发者在界面上创建可切换的标签页。然而,随着Android SDK的更新,`TabHost`逐渐被更现代的导航模式如`FragmentTabHost`和`BottomNavigationView`所取代。...
10. **网格布局(GridLayout)**:将子视图按照行列进行排列,方便创建棋盘或矩阵布局。 ```xml android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 添加你的子视图在这里 --> ...
12. **GridLayout**:GridLayout按照网格布局控件,每个子视图占据一定的格子,通过`android:rowCount`和`android:columnCount`设置行数和列数。 在实际开发中,开发者需要根据需求灵活组合使用这些控件,同时掌握...
在Android XML布局文件中,可以使用`<android.widget.CheckBox>`标签来创建一个多选框。最基本的用法如下: ```xml android:id="@+id/my_checkbox" android:layout_width="wrap_content" android:layout_height...
5. **GridLayout**:网格布局,以表格形式排列子元素,适合创建具有多列布局的应用程序。 6. **CoordinatorLayout**:协调布局,提供了一种机制来处理多个View之间的交互和行为,比如底部导航栏和浮动操作按钮之间的...
GridLayout按网格排列子视图,每行和每列的视图数量可以预设。 9. **Spinner** Spinner是下拉选择框,通常用于提供多个选项供用户选择。`android:entries`属性定义选项列表。 10. **Checkbox** Checkbox是复选...
通过`<ImageView>`标签创建,`android:src`设置图片源,`android:scaleType`控制图片缩放方式。 8. **列表(ListView)**和**RecycleView**:用于显示多行数据的容器。ListView是早期版本的组件,而RecycleView在性能...
它通常配合RadioGroup使用。在XML布局中,`<RadioButton>`标签定义单选按钮,`android:text`设置文字,`android:checked`决定默认选中状态。 四、复选框(CheckBox) CheckBox控件允许用户进行多选。例如,在设置中,...
在Android开发中,`RadioGroup`控件通常用于实现单选按钮(RadioButton)的互斥选择,即用户只能选择其中一个选项。然而,默认的`RadioGroup`仅支持一行显示且无法直接实现多行多列的布局效果。为了满足设计需求,...
它们属于RadioGroup和CheckBoxGroup的成员,通过`<RadioButton>`和`<CheckBox>`标签创建,通过`android:checked`控制初始状态。 4. **图像视图(ImageView)**:展示图片资源,常用于图标或背景。通过`<ImageView>`...
- **GridView**: 网格视图,类似于ListView,但以网格形式展示数据。 - **ImageSwitcher**: 用于快速切换图像。 - **Gallery**: 画廊视图,类似于旋转木马。 - **ExpandableListView**: 可展开列表视图,允许某些...
布局(Layout)是组织控件的关键,Android提供了多种布局方式,如AbsoluteLayout(绝对布局)、FrameLayout(帧布局)、GridView(网格布局)、LinearLayout(线性布局)、ListLayout(列表布局)、RadioGroup(单选...
它们属于`RadioGroup`的一部分,`RadioGroup`可以管理一组单选按钮,确保同一时间内只有一个按钮被选中。 6. **ListView**: 显示可滚动的列表项,常用于显示大量数据。结合`Adapter`使用,可以将数据源绑定到列表...
- **RadioGroup**:单选按钮组视图,包含一组互斥的`RadioButton`。 - **RatingBar**:评分条视图,用于展示星级评价。 - **ScrollView**:滚动视图,可以滚动其包含的单一子视图。 - **SeekBar**:滑动条视图,用于...