Android笔记:通过RadioGroup/RadioButton自定义tabhost的简单方法

简介:

XML代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     xmlns:tools= "http://schemas.android.com/tools"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     tools:context= ".MainActivity"  >
     <TabHost
         android:id= "@android:id/tabhost"
         android:layout_width= "match_parent"
         android:layout_height= "match_parent"
         android:layout_alignParentLeft= "true"
         android:layout_alignParentTop= "true"  >
         <LinearLayout
             android:layout_width= "match_parent"
             android:layout_height= "match_parent"
             android:orientation= "vertical"  >
             <TabWidget
                 android:id= "@android:id/tabs"
                 android:layout_width= "match_parent"
                 android:layout_height= "wrap_content"
                 android:visibility= "gone"  >
             </TabWidget>
             <FrameLayout
                 android:id= "@android:id/tabcontent"
                 android:layout_width= "match_parent"
                 android:layout_height= "0dp"
                 android:layout_weight= "1"  >
             </FrameLayout>
             <RadioGroup
                 android:layout_width= "match_parent"
                 android:layout_height= "wrap_content"
                 android:layout_gravity= "bottom"
                 android:orientation= "horizontal"  >
                 <RadioButton
                     android:id= "@+id/maintab_radio_tab1"
                     style= "@style/tab_button"
                     android:checked= "true"
                     android:text= "主页"
                     android:background= "#ff00ff00"  />
                 <RadioButton
                     android:id= "@+id/maintab_radio_tab2"
                     style= "@style/tab_button"
                     android:text= "分页"
                     android:background= "#ff00ff00"  />
                 <RadioButton
                     android:id= "@+id/maintab_radio_tab3"
                     style= "@style/tab_button"
                     android:text= "设置"
                     android:background= "#ff00ff00"  />
             </RadioGroup>
         </LinearLayout>
     </TabHost>
</RelativeLayout>


style="@style/tab_button"文件:

1
2
3
4
5
6
7
8
9
10
11
12
     <!-- 主页底部RadioButton样式 -->
<style name= "tab_button" >
     <item name= "android:layout_width" >fill_parent</item>
     <item name= "android:layout_height" >wrap_content</item>
     <item name= "android:ellipsize" >marquee</item>
     <item name= "android:button" > @null </item>
     <item name= "android:paddingTop" >1dp</item>
     <item name= "android:layout_weight" > 1.0 </item>
     <item name= "android:gravity" >center_horizontal</item>
     <item name= "android:singleLine" > true </item>
     <item name= "android:drawablePadding" > 1 .0dip</item>
</style>


布局结构:(将TabWidget隐藏,用一组去掉button勾选框的RadioButton替代




java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public  class  MainActivity  extends  TabActivity  implements  OnClickListener
{
       
     private  RadioButton mBtn_tab1;
     private  RadioButton mBtn_tab2;
     private  RadioButton mBtn_tab3;
     private  TabHost mTabHost;
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
           
         init();
         initTab();
     }
     //初始化界面
     private  void  init()
     {
         mBtn_tab1 = (RadioButton)findViewById(R.id.maintab_radio_tab1);
         mBtn_tab2 = (RadioButton)findViewById(R.id.maintab_radio_tab2);
         mBtn_tab3 = (RadioButton)findViewById(R.id.maintab_radio_tab3);
           
           
         mBtn_tab1.setOnClickListener( this );
         mBtn_tab2.setOnClickListener( this );
         mBtn_tab3.setOnClickListener( this );
     }
     //初始化底部标签栏
     private  void  initTab()
     {
         mTabHost = getTabHost();
         mTabHost.addTab(mTabHost.newTabSpec( "tab1" ).setIndicator( "tab1" ).setContent( new  Intent( this , Tab1Activity. class )));
         mTabHost.addTab(mTabHost.newTabSpec( "tab2" ).setIndicator( "tab2" ).setContent( new  Intent( this , Tab2Activity. class )));
         mTabHost.addTab(mTabHost.newTabSpec( "tab3" ).setIndicator( "tab3" ).setContent( new  Intent( this , Tab1Activity. class )));
     }
       
       
     @Override
     public  void  onClick(View v)
     {
         switch  (v.getId())
         {
             case  R.id.maintab_radio_tab1:
                 mTabHost.setCurrentTabByTag( "tab1" );
                 break ;
                   
             case  R.id.maintab_radio_tab2:
                 mTabHost.setCurrentTabByTag( "tab2" );
                 break ;
                   
             case  R.id.maintab_radio_tab3:
                 mTabHost.setCurrentTabByTag( "tab3" );
                 break ;
               
             default :
                 break ;
         }
     }
}





本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1281759,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
Android开发 UED 计算机视觉
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
本文介绍了一款受游戏“金铲铲之战”启发的Android自定义View——线条等待动画的实现过程。通过将布局分为10份,利用`onSizeChanged`测量最小长度,并借助画笔绘制动态线条,实现渐变伸缩效果。动画逻辑通过四个变量控制线条的增长与回退,最终形成流畅的等待动画。代码中详细展示了画笔初始化、线条绘制及动画更新的核心步骤,并提供完整源码供参考。此动画适用于加载场景,提升用户体验。
451 5
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
|
5月前
|
Android开发
Android自定义view之利用PathEffect实现动态效果
本文介绍如何在Android自定义View中利用`PathEffect`实现动态效果。通过改变偏移量,结合`PathEffect`的子类(如`CornerPathEffect`、`DashPathEffect`、`PathDashPathEffect`等)实现路径绘制的动态变化。文章详细解析了各子类的功能与参数,并通过案例代码展示了如何使用`ComposePathEffect`组合效果,以及通过修改偏移量实现动画。最终效果为一个菱形图案沿路径运动,源码附于文末供参考。
|
5月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
225 65
Android自定义view之网易云推荐歌单界面
|
5月前
|
XML 前端开发 Android开发
一篇文章带你走近Android自定义view
这是一篇关于Android自定义View的全面教程,涵盖从基础到进阶的知识点。文章首先讲解了自定义View的必要性及简单实现(如通过三个构造函数解决焦点问题),接着深入探讨Canvas绘图、自定义属性设置、动画实现等内容。还提供了具体案例,如跑马灯、折线图、太极图等。此外,文章详细解析了View绘制流程(measure、layout、draw)和事件分发机制。最后延伸至SurfaceView、GLSurfaceView、SVG动画等高级主题,并附带GitHub案例供实践。适合希望深入理解Android自定义View的开发者学习参考。
552 84
|
3月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
179 11
|
5月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
114 3
|
5月前
|
Android开发 开发者
Android自定义view之围棋动画(化繁为简)
本文介绍了Android自定义View的动画实现,通过两个案例拓展动态效果。第一个案例基于`drawArc`方法实现单次动画,借助布尔值控制动画流程。第二个案例以围棋动画为例,从简单的小球直线运动到双向变速运动,最终实现循环动画效果。代码结构清晰,逻辑简明,展示了如何化繁为简实现复杂动画,帮助读者拓展动态效果设计思路。文末提供完整源码,适合初学者和进阶开发者学习参考。
Android自定义view之围棋动画(化繁为简)
|
5月前
|
Java Android开发 开发者
Android自定义view之围棋动画
本文详细介绍了在Android中自定义View实现围棋动画的过程。从测量宽高、绘制棋盘背景,到创建固定棋子及动态棋子,最后通过属性动画实现棋子的移动效果。文章还讲解了如何通过自定义属性调整棋子和棋盘的颜色及动画时长,并优化视觉效果,如添加渐变色让白子更明显。最终效果既可作为围棋动画展示,也可用作加载等待动画。代码完整,适合进阶开发者学习参考。
104 0

热门文章

最新文章

  • 1
    Android实战经验之Kotlin中快速实现MVI架构
    344
  • 2
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    211
  • 3
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    553
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    854
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    313
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    230
  • 7
    Android历史版本与APK文件结构
    739
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    245
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    259
  • 10
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    491