android的RadioGroup讲解

这个主要是如何替换fragment的demo。效果图如下(下面的tabhost和上面的bar不属于这次的内容,这个是我做的一个应用程序框架的一部分,有需要的或者想研究研究的可以私下联系),主要是讲解中间的内容怎么实现,即点击上面的RadioGroup,下面的内容一起改变(改变的是XML中的布局,这样的话下面三个的布局完全可以自己定义)

1.首先在主界面的xml中添加一个RadioGroup,里面添加三个RadioButton即可

[html] view plaincopyprint?

  1. <RadioGroup  
  2.                 android:id="@+id/radioGroup1"  
  3.                 style="@style/layout_full"  
  4.                 android:layout_margin="5dp"  
  5.                 android:background="@drawable/rounded_edittext"  
  6.                 android:orientation="horizontal"  
  7.                 android:padding="5dp" >  
  8.   
  9.                 <RadioButton  
  10.                     android:id="@+id/radio0"  
  11.                     style="@style/layout_horizontal"  
  12.                     android:layout_gravity="center_horizontal"  
  13.                     android:layout_weight="1"  
  14.                     android:checked="true"  
  15.                     android:text="均分" />  
  16.   
  17.                 <RadioButton  
  18.                     android:id="@+id/radio1"  
  19.                     style="@style/layout_horizontal"  
  20.                     android:layout_gravity="center_horizontal"  
  21.                     android:layout_weight="1"  
  22.                     android:text="个人" />  
  23.   
  24.                 <RadioButton  
  25.                     android:id="@+id/radio2"  
  26.                     style="@style/layout_horizontal"  
  27.                     android:layout_gravity="center"  
  28.                     android:layout_weight="1"  
  29.                     android:text="借贷" />  
  30.             </RadioGroup>  

其中

[html] view plaincopyprint?

  1. android:background="@drawable/rounded_edittext"  

这一句是给这个RadioGroup添加一个带圆角的边框 

rounded_edittext.xml的代码如下

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:shape="rectangle" >  
  4.   
  5.     <solid android:color="#ffffff" />  
  6.   
  7.     <corners android:radius="7dip" />  
  8.   
  9.     <stroke  
  10.         android:width="2px"  
  11.         android:color="#000000" />  
  12.   
  13. </shape>  

放置在drawable文件夹下即可

2.下面的内容由三个xml定义好的布局来呈现,这三个xml的布局可以自己来写 ,我就很简单地建了三个,做例子用

speeddial_fragment_pay1.xml

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:layout_margin="5dp"  
  6.     android:background="@drawable/rounded_edittext"  
  7.     android:orientation="vertical" >  
  8.   
  9.     <Button  
  10.         android:id="@+id/Button04"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:layout_centerHorizontal="true"  
  14.         android:layout_centerVertical="true"  
  15.         android:text="Button" />  
  16.   
  17. </RelativeLayout>  

3.(重要)在主布局文件中添加Fragment的载体,比如一个framlayout,负责承载fragment

在上面的RadioGroup的布局下增加:

[html] view plaincopyprint?

  1. <FrameLayout  
  2.             android:id="@+id/fragment_container"  
  3.             android:layout_width="match_parent"  
  4.             android:layout_height="match_parent" />  

这样布局就完成了

4.由于Fragment的特性,我们要新建三个自己的Fragment,都继承自Fragment 

SpeeddialFragmentOne.java

[java] view plaincopyprint?

  1. package com.gracker.fragment;  
  2.   
  3. import android.app.Fragment;  
  4. import android.os.Bundle;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8.   
  9. import com.gracker.tabactivity.R;  
  10.   
  11. public class SpeeddialFragmentOne extends Fragment {  
  12.   
  13.   
  14.     @Override  
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         // TODO Auto-generated method stub  
  17.         super.onCreate(savedInstanceState);  
  18.     }  
  19.   
  20.       
  21.     @Override  
  22.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  23.             Bundle savedInstanceState) {  
  24.         // TODO Auto-generated method stub  
  25.         return inflater.inflate(R.layout.speeddial_fragment_pay1, container, false);  
  26.     }  
  27. }  

这个Fragment非常简单,没有添加任何的逻辑,仅仅只是在onCreateView的要布局然后以View返回。Fragment有很多方法,可以根据自己的需要进行重载,这里就不多说了,自己到用的时候自然就知道了。

类似地,建立另外两个Fragment ,改变的仅仅是

[java] view plaincopyprint?

  1. return inflater.inflate(R.layout.speeddial_fragment_pay1, container, false);  

5.在主Activity中调用:

MainActivity.java

[java] view plaincopyprint?

  1. /** 
  2.  * 主Activity 
  3.  *  
  4.  * @author Gracker Gao 
  5.  * @date 2012.8.15 
  6.  */  
  7. package com.gracker.hostactivity;  
  8.   
  9. import android.app.Activity;  
  10. import android.app.FragmentTransaction;  
  11. import android.os.Bundle;  
  12. import android.util.Log;  
  13. import android.widget.RadioGroup;  
  14. import android.widget.RadioGroup.OnCheckedChangeListener;  
  15.   
  16. import com.gracker.fragment.SpeeddialFragmentOne;  
  17. import com.gracker.fragment.SpeeddialFragmentThree;  
  18. import com.gracker.fragment.SpeeddialFragmentTwo;  
  19. import com.gracker.tabactivity.R;  
  20.   
  21. public class MainActivity extends Activity {  
  22.   
  23.     private final String TAG = "SpeedDialActivity";  
  24.   
  25.     private RadioGroup mRadioGroup;  
  26.     private SpeeddialFragmentTwo mSpeeddialFragmentTwo;  
  27.     private SpeeddialFragmentOne mSpeeddialFragmentOne;  
  28.     private SpeeddialFragmentThree mSpeeddialFragmentThree;  
  29.       
  30.     private FragmentTransaction transaction;  
  31.   
  32.     public void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.         setContentView(R.layout.speeddial);  
  35.           
  36.         init_date();  
  37.         setupWidgets();  
  38.     }  
  39.       
  40.     private void init_date(){  
  41.         transaction = getFragmentManager()  
  42.                 .beginTransaction();  
  43.         if (null == mSpeeddialFragmentOne) {  
  44.             mSpeeddialFragmentOne = new SpeeddialFragmentOne();  
  45.         }  
  46.         transaction.add(R.id.fragment_container,  
  47.                 mSpeeddialFragmentOne);  
  48.         // Commit the transaction  
  49.         transaction.commit();  
  50.     }  
  51.   
  52.     private void setupWidgets() {  
  53.   
  54.         mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup1);  
  55.         mRadioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {  
  56.   
  57.             @Override  
  58.             public void onCheckedChanged(RadioGroup group, int checkedId) {  
  59.                 // TODO Auto-generated method stub  
  60.   
  61.                 switch (checkedId) {  
  62.                 case R.id.radio0:  
  63.                     Log.v(TAG, "setupWidgets():radio0 clicked");  
  64.                     if (null == mSpeeddialFragmentOne) {  
  65.                         mSpeeddialFragmentOne = new SpeeddialFragmentOne();  
  66.                     }  
  67.                     transaction = getFragmentManager()  
  68.                             .beginTransaction();  
  69.                     transaction.replace(R.id.fragment_container,  
  70.                             mSpeeddialFragmentOne);               
  71.                     // Commit the transaction  
  72.                     transaction.commit();  
  73.                     break;  
  74.                 case R.id.radio1:  
  75.                     Log.v(TAG, "setupWidgets():radio1 clicked");  
  76.                     if (null == mSpeeddialFragmentTwo) {  
  77.                         mSpeeddialFragmentTwo = new SpeeddialFragmentTwo();  
  78.                     }  
  79.                     transaction = getFragmentManager()  
  80.                             .beginTransaction();  
  81.                     transaction.replace(R.id.fragment_container,  
  82.                             mSpeeddialFragmentTwo);                   
  83.                     // Commit the transaction  
  84.                     transaction.commit();  
  85.                     break;  
  86.                 case R.id.radio2:  
  87.                     Log.v(TAG, "setupWidgets():radio2 clicked");  
  88.   
  89.                     if (null == mSpeeddialFragmentThree) {  
  90.                         mSpeeddialFragmentThree = new SpeeddialFragmentThree();  
  91.                     }  
  92.                     transaction = getFragmentManager()  
  93.                             .beginTransaction();  
  94.                     transaction.replace(R.id.fragment_container,  
  95.                             mSpeeddialFragmentThree);                     
  96.                     // Commit the transaction  
  97.                     transaction.commit();  
  98.                     break;  
  99.   
  100.                 default:  
  101.                     break;  
  102.                 }  
  103.             }  
  104.         });  
  105.     }  
  106.   
  107.     @Override  
  108.     protected void onResume() {  
  109.         // TODO Auto-generated method stub  
  110.         super.onResume();  
  111.   
  112.     }  
  113.   
  114.     @Override  
  115.     protected void onDestroy() {  
  116.         // TODO Auto-generated method stub  
  117.         super.onDestroy();  
  118.         // dataEncapsulation.closeDataBase_speedDial();  
  119.     }  
  120.   
  121. }  

init_data()函数中主要是初始化值,包括初始化用户第一个看到的Fragment

在RadioGroup的onCheckedChangeLinsteer中,切换Fragment。关于Fragment的一些操作,比如增加,删除,替换等等,可以参照这个帖子:http://www.eoeandroid.com/thread-71642-1-1.html 讲的很详细,我也不想重复。

这个Demo就不提供下载了,毕竟不是很难,所有的东西都交代了,自己敲一遍收获总是比打开别人的代码来研究要好的多。

例子中有什么错误的地方欢迎指正。

时间: 2024-08-31 09:50:22

android的RadioGroup讲解的相关文章

Android自定义控件----RadioGroup实现APP首页底部Tab的切换

[正文] 实现APP首页底部Tab的切换已经见过四五种方式了,先来看运行的效果图吧: 今天我们就用RadioGroup的方法来实现以下.   [开发环境] 物理机版本:win 7旗舰版(64位) IDE版本:Android Studio 1.2 preview 工程文件结构:(本文最后有源码) HomeActivity.java:整个首页的界面 四个Fragment.java:对应的四个Fragment界面 drawable文件夹中是对应tab和文字切换的状态 剩下的xml文件就是对应的Acti

Android自定义RadioGroup实现单选完整示例

MainActivity如下: [java] view plaincopy package cc.testradiogroup;      import android.os.Bundle;   import android.widget.RadioButton;   import android.widget.RadioGroup;   import android.widget.RadioGroup.OnCheckedChangeListener;   import android.app.

让Android中RadioGroup不显示在输入法上面的办法

如果你在开发过程中经常使用 RadioGroup,那你是否遇到过下面这种情况 每当你点击EditText弹出输入法时,RadioGroup总是向上移动到输入法的上面. 你可能会想到需要给RadioGroup添加下面这条属性: android:layout_alignParentBottom="true" 但当你打开xml文件时,很尴尬的发现这个属性已经加上了,那要怎么解决这个小bug呢? 其实很简单,只需要在AndroidManifest.xml文件里给当前类的注册信息中添加一个属性:

android自定义RadioGroup可以添加多种布局的实现方法_Android

android自带的RadioGroup是继承自LinearLayout,如果布局的时候不是直接写radiobutton,即radiobutton外面还包了一层容器,这时分组是不成功的,因为查找不到radiobutton,如果要实现这种效果呢,于是看了RadioGroup的源码,发现问题在于addView方法和自定义的PassThroughHierarchyChangeListener: 下面就这两个地方动手脚,先拷贝源码,然后去掉RadioGroup(Context context, Attr

Android 解决RadioGroup显示在输入法窗口上面的问题

如果你在开发过程中经常使用 RadioGroup,那你是否遇到过下面这种情况 每当你点击EditText弹出输入法时,RadioGroup总是向上移动到输入法的上面. 你可能会想到需要给RadioGroup添加下面这条属性: android:layout_alignParentBottom="true" 但当你打开xml文件时,很尴尬的发现这个属性已经加上了,那要怎么解决这个小bug呢? 其实很简单,只需要在AndroidManifest.xml文件里给当前类的注册信息中添加一个属性:

android自定义RadioGroup可以添加多种布局的实现方法

android自带的RadioGroup是继承自LinearLayout,如果布局的时候不是直接写radiobutton,即radiobutton外面还包了一层容器,这时分组是不成功的,因为查找不到radiobutton,如果要实现这种效果呢,于是看了RadioGroup的源码,发现问题在于addView方法和自定义的PassThroughHierarchyChangeListener: 下面就这两个地方动手脚,先拷贝源码,然后去掉RadioGroup(Context context, Attr

Android使用RadioGroup实现底部导航栏

RadioGroup实现底部导航栏效果,如图:: 实现可最基本的导航栏功能,不能左右滑动,只能点击 1.内嵌的fragment的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

Android常见控件之RadioGroup,RadioButton,CheckBox和Toast

一.RadioGroup和RadioButton RadioButton单选按钮是一种双状态的按钮,可以选择或不选中.在单选按钮 没有被选中时,用户能够按下或点击来选中它.但是,与复选框相反,用户一旦 选中就不能够通过界面取消选中,但是可以通过代码来取消选中状态. RadioGroup用于创建一组选中状态相互排斥的单选按钮组.一个组中,只有 一个按钮可以被选中,选中了一个RadioButton会自动取消其它按钮的选中状态 .初始状态下,所有的单选按钮都未勾选,虽然不能取消一个特定的单选按钮的 勾

Android编程单选项框RadioGroup综合应用示例_Android

本文实例讲述了Android编程单选项框RadioGroup用法.分享给大家供大家参考,具体如下: 今天介绍的是RadioGroup 的组事件.RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只能做出单一选择(单选题). 首先,我们先设计一个TextView Widget ,以及一个RadioGroup ,并将该RadioGroup 内放置两个RadioButton ,默认为都不选择,在程序运行阶段,利用onC