前面简单介绍了选项卡,下面以及后面的几篇文章介绍下Android选项卡的几种简单实现方法。

http://blog.csdn.net/xia215266092/article/details/9613897

看到上面的最版本的QQ软件,整个软件的UI框架就是选项卡,一般想到的就是使用Android自带的TabActivity实现。

实现需要一个主界面,来存放选项卡,在布局中需要存放TabHost和TabWidget。

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="1dip"
android:paddingRight="1dip"
android:paddingTop="4dip"
android:visibility="gone" /> <FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<RadioGroup
android:id="@+id/rg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#f00"
android:orientation="horizontal" > <RadioButton
android:id="@+id/rb01"
style="@style/menu_item"
android:checked="true"
android:drawableTop="@drawable/menu_home"
android:text="主页" /> <RadioButton
android:id="@+id/rb02"
style="@style/menu_item"
android:drawableTop="@drawable/menu_clear"
android:text="清除" /> <RadioButton
android:id="@+id/rb03"
style="@style/menu_item"
android:drawableTop="@drawable/menu_refresh"
android:text="刷新" /> <RadioButton
android:id="@+id/rb04"
style="@style/menu_item"
android:drawableTop="@drawable/menu_save"
android:text="保存" /> <RadioButton
android:id="@+id/rb05"
style="@style/menu_item"
android:drawableTop="@drawable/menu_more"
android:text="更多" />
</RadioGroup> </LinearLayout> </TabHost>

同时需要个Activity,这个Activity必须继承TabActivity,其实也不一定需要继承这个,可以继承ActivityGroup,自定义一个tabactivity,但是这样比较复杂,所以我们还是继承TabActivity吧。

public class TabMainActivity extends TabActivity {

	TabHost tab;
Context context;
RadioGroup rg; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_main); tab = getTabHost();
context = this; tab.addTab(tab.newTabSpec("A").setIndicator("A").setContent(new Intent(context, AActivity.class)));
tab.addTab(tab.newTabSpec("B").setIndicator("B").setContent(new Intent(context, BActivity.class)));
tab.addTab(tab.newTabSpec("C").setIndicator("C").setContent(new Intent(context, CActivity.class)));
tab.addTab(tab.newTabSpec("D").setIndicator("D").setContent(new Intent(context, DActivity.class)));
tab.addTab(tab.newTabSpec("E").setIndicator("E").setContent(new Intent(context, EActivity.class))); rg = (RadioGroup) findViewById(R.id.rg);
rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
int idx = -1;
if (checkedId == R.id.rb01) {
idx = 0;
} else if (checkedId == R.id.rb02) {
idx = 1;
} else if (checkedId == R.id.rb03) {
idx = 2;
} else if (checkedId == R.id.rb04) {
idx = 3;
} else if (checkedId == R.id.rb05) {
idx = 4;
}
switchActivity(idx);
}
});
} protected void switchActivity(int idx) {
int n = tab.getCurrentTab(); if (idx < n) {
tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_left_out));
} else if (idx > n) {
tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right_out));
}
tab.setCurrentTab(idx);
if (idx < n) {
tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_left_in));
} else if (idx > n) {
tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right_in));
} RadioButton rb = (RadioButton) rg.getChildAt(idx);
rb.setChecked(true);
} private Map<String, Object> data = new HashMap<String, Object>(); protected void put(String key, String value) {
data.put(key, value);
} protected Object get(String key) {
return data.get(key);
}
}

AActivity,BActivity,CActivity,DActivity,EActivity,都是点击选项卡,对应的Activity,这样UI框架,可以按照软件的功能来分模块,便于团队人员的合作和开发。

底部的菜单使用的RadioGroup,因在RadioGroup里面的有若干RadioButton,只有能有一个才能被选中,这样就很完美的实现的上面被选中的效果,Android有自定义Radiobutton选中的背景。

自定义一个Radiobutton

<RadioButton
android:id="@+id/rb01"
style="@style/menu_item"
android:checked="true"
android:drawableTop="@drawable/menu_home"
android:text="主页" />

然后在自定义一个style,让RadioButtong使用使用这个Style。

<style name="menu_item">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:padding">10dp</item>
<item name="android:button">@null</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:background">@drawable/menu_item_bg</item>
<item name="android:layout_weight">1</item>
</style>

<item name="android:background">@drawable/menu_item_bg</item>

就是这个RadioButton的背景。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:state_checked="false" android:drawable="@drawable/menu_normal" />
<item android:state_checked="true" android:drawable="@drawable/menu_press" />
<item android:state_pressed="true" android:drawable="@drawable/menu_press" />
</selector>

定义不同状态的显示的背景,当选中或者是被点击的时候,使用的背景menu_press,否则就是menu_normal。

好了,这篇先简单介绍在这里,后面还有后续。

浅谈Android选项卡(二)的更多相关文章

  1. 浅谈Android选项卡(四)

    前面几篇介绍的选项的用法,基本上使用TabActivity.ViewPager.已经基本上满足开发需求了.但是这里再介绍一种小技巧,在有的时候,感觉使用前面的ViewPager和Fragment时候, ...

  2. 浅谈Android选项卡(一)

    选项卡,这样UI设计在很多方面都存在,window,web,ios,Android. 选项卡的主要作用,不用多介绍,可以在有线的空间内,显示出更多内容,同时也是操作起来也很方便.

  3. 浅谈Android选项卡(三)

    上一节介绍了TabActivity的简单用法,但是现在的Api中已经不建议使用了,建议使用Fragment来替代以上的功能,下面介绍下使用Fragment和ViewPager的结合使用. http:/ ...

  4. [转]浅谈Android五大布局(二)——RelativeLayout和TableLayout

    在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局Relati ...

  5. 浅谈Android应用保护(一):Android应用逆向的基本方法

    对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ...

  6. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  7. 浅谈Android应用性能之内存

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...

  8. 浅谈Android五大布局

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...

  9. 浅谈Kotlin(二):基本类型、基本语法、代码风格

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...

随机推荐

  1. 【ZOJ 3228】Searching the String 【AC自动机】

    题意 给出n个模式串和一个文本串,输出各个模式串在文本串中出现的次数.模式串有两种类型,0类型代表可以有重叠,1类型代表不能有重叠.模式串可能出现重复. 分析 算是AC自动机的模板题? 因为模式串可以 ...

  2. 虚拟机安装centos发现inet为127.0.0.1,导致Xshell连接不上

    问题如标题所示: 设置网卡开机自动启动: 实质linux是看一个网卡文件的配置,就是/etc/sysconfig/network-scripts/ifcfg-eth0 (这个文件名看你网卡名称而异,具 ...

  3. Opencv threshold

    图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果.在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓 ...

  4. Python设计模式之"外观模式"实例讲解

    Python中设计模式之外观模式主张以分多模块进行代码管理而减少耦合,下面用实例来进行说明. 应用特性: 在很多复杂而小功能需要调用需求时,而且这些调用往往还有一定相关性,即一调用就是一系列的. 结构 ...

  5. Header add Access-Control-Allow-Origin: *

    允许所有域名跨域 Header add Access-Control-Allow-Origin: *

  6. 23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态

    23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态 摘自:https://blog.csdn.net/qq_35733751/article/details/80146161 2018 ...

  7. xml与java代码相互装换的工具类

    这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你定义好了xml的模板,就能一键生成java代码.省下了自己再使用工具类写代 ...

  8. AJAX和DHTML

    DHTML: (动态的html)本身不是一门新语言,而是一门新技术,包含以下 html . css . dom . js AJAX  :  也是一门新技术包含    html . css.  dom ...

  9. CRISPR/Cas9基因敲除原理及实验建议

    CRISPR/Cas9基因敲除原理及实验建议   CRISPR Cas9已经成为了最受欢迎的基因编辑技术之一,在2016年的国自然基金中也有很多项目是关于 CRISPR Cas9的.目前在市场上已经有 ...

  10. java/rabbitmp发布订阅示例(转)

    原文:http://www.cnblogs.com/tinmh/p/6134875.html 发布/订阅模式即生产者将消息发送给多个消费者. 下面介绍几个在发布/订阅模式中的关键概念-- 1. Exc ...