android实现对导航Tab设置下划线选中效果

技术人员核心竞争力还是技术啊。努力提高各种实现效果。加油哦!
直接看效果。此linearLayout只有两个Button ,当选中Button1,Button1有个下划线选中效果。当选中Buton2,Button2有个下划线选中效果。
如下图。
package com.daoge.ui; import roboguice.activity.RoboActivity;
import roboguice.inject.InjectView;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout; import com.daoge.utils.DensityUtils;
import com.daoge.utils.ResourceReader;
import com.roboguicetest.R; public class MainActivity extends RoboActivity implements OnClickListener { @InjectView(R.id.btnTab001)
Button btnTab001;
@InjectView(R.id.btnTab002)
Button btnTab002;
@InjectView(R.id.layout_tab)
LinearLayout layout_tab; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.test_layout);
initAllViews();
} private void initAllViews() {
btnTab001.setOnClickListener(this);
btnTab002.setOnClickListener(this);
} public void onClick(View v) {
switch (v.getId()) {
case R.id.btnTab001 :
setTabSelected(btnTab001);
break;
case R.id.btnTab002 :
setTabSelected(btnTab002);
break;
default :
break;
}
} private void setTabSelected(Button btnSelected) {
Drawable selectedDrawable = ResourceReader.readDrawable(this, R.drawable.shape_nav_indicator);
int screenWidth = DensityUtils.getScreenSize(MainActivity.this)[0];
int right = screenWidth / 2;
selectedDrawable.setBounds(0, 0, right, DensityUtils.dipTopx(this, 3));
btnSelected.setSelected(true);
btnSelected.setCompoundDrawables(null, null, null, selectedDrawable);
int size = layout_tab.getChildCount();
for (int i = 0; i < size; i++) {
if (btnSelected.getId() != layout_tab.getChildAt(i).getId()) {
layout_tab.getChildAt(i).setSelected(false);
((Button) layout_tab.getChildAt(i)).setCompoundDrawables(null, null, null, null);
}
}
}
}
最重要的地方在这里
private void setTabSelected(Button btnSelected) {
Drawable selectedDrawable = ResourceReader.readDrawable(this, R.drawable.shape_nav_indicator);
int screenWidth = DensityUtils.getScreenSize(MainActivity.this)[0];
int right = screenWidth / 2;
selectedDrawable.setBounds(0, 0, right, DensityUtils.dipTopx(this, 3));
btnSelected.setSelected(true);
btnSelected.setCompoundDrawables(null, null, null, selectedDrawable);
int size = layout_tab.getChildCount();
for (int i = 0; i < size; i++) {
if (btnSelected.getId() != layout_tab.getChildAt(i).getId()) {
layout_tab.getChildAt(i).setSelected(false);
((Button) layout_tab.getChildAt(i)).setCompoundDrawables(null, null, null, null);
}
}
}
得到这个Drawable,那么这个Drawable从哪里来呢??
R.drawable.shape_nav_indicator
看这个drawable.shape文件吧

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" > <solid android:color="@color/global_red" /> <size android:width="1000dp" /> <padding
android:bottom="2dp"
android:left="5dp"
android:right="5dp"
android:top="2dp" /> </shape>
Demo下载地址:点击进入我的百度网盘下载
android实现对导航Tab设置下划线选中效果的更多相关文章
- [HTML/CSS]导航栏的下划线跟随效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈
目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...
- tab 切换下划线跟随实现
HTML 结构如下: <ul> <li class="active">不可思议的CSS</li> <li>导航栏</li> ...
- 不可思议的纯CSS导航栏下划线跟随效果
先上张图,如何使用纯 CSS 制作如下效果? 在继续阅读下文之前,你可以先缓一缓.尝试思考一下上面的效果或者动手尝试一下,不借助 JS ,能否巧妙的实现上述效果. OK,继续.这个效果是我在业务开发的 ...
- [CSS]textarea设置下划线格式
功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线 2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...
- 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber
http://www.bubuko.com/infodetail-382485.html 标签:des class style 代码 html 使用 问题 文件 数据 ...
- The usage of Markdown---文字强调:加粗/斜体/文本高亮/删除线/下划线/按键效果
更新时间:2019.09.14 1. 序言 有时候,我们需要对某些文字进行强调,例如粗体和斜体.而Markdown通常可以使用星号*或者下划线_进行文字强调. 2. 加粗 如果想要达到加粗的效果,可以 ...
- [Android] TabLayout设置下划线(Indicator)宽度
在使用TabLayout的过程中,为每个标签添加一个 下划线,但发现每个下划线的 宽度 都是一样的,例如会如下显示 这样很难看,所以必须进行调整后的效果如下: 看,这样不是非常和谐啦!~~ 实现方法很 ...
- Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换
开发中遇到了一个问题,Tablayout设置下换线长度,看了点资料,分享给大家. 效果图: 直接贴代码(要在tabLayout添加完所有的tab后调用) public vo ...
随机推荐
- 【.NET跨平台】mac上安装VS for mac步骤详解
安装过程中提示以下内容 提示原文如下 It was not possible to complete an automatic installation. This might be due to a ...
- Java基础知识强化97:final、finally、finally区别
1. final修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此,一个类不能既被声明为abstract,又被声明为final. 将 ...
- linux sudo环境变量设置
这是第一次在博客园中写自己的随笔,也是第一次使用Markdown的编辑环境,值得纪念一下!希望在以后学习linux的道路上能多多记录自己的学习心得和遇到问题的解决方法,朝着运维的方向迈出坚实的脚步. ...
- Python 常量与变量
先在lib文件夹中定义一个模块 class _const(object): class ConstError(TypeError):pass def __setattr__(self, name, v ...
- webform 复杂点的服务器控件
1 , dropdownlist: 下拉框 属性items 列表集合, 里面的每一个元素是一个 listitem . 联动的时候注意要 设置属性 .Autopostback 为ture: 注注 ...
- Windows Media Player Plus
Windows Media Player Plus 是一款 Windows Media Player 的插件,提供很多实用功能,Mark 一下.
- 【转】node-webkit:开发桌面+WEB混合型应用的神器
顾名思义,node-webkit就是nodejs+webkit. 这样做的好处显而易见,核心奥义在于,用nodejs来进行本地化调用,用webkit来解析和执行HTML+JS. 快速上手 下载node ...
- activiti总结
1.activiti如何修改登录用户名?在哪个数据库里面添加. 2.activiti的启动和部署在http://activiti.org/userguide/index.html#demo.setup ...
- 简要介绍 My.Ioc 的用法
下面这段代码展示了 My.Ioc 的基本用法: using System; using System.Collections.Generic; namespace My.Ioc.Sample { pu ...
- asp.net微信开发第一篇----开发者接入
在项目的根目录或者特定的文件夹内,创建一个ashx文件(一般处理程序文件),如图 public void ProcessRequest(HttpContext context) { context.R ...