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 ...
随机推荐
- Hibernate 入门的第一个程序
一. Hibernate介绍 Hibernate是基于对象/关系映射(ORM,Object/Relational Mapping)的一个解决方案.ORM方案的思想是将对象模型表示的对象映射到关 ...
- Android Studio导入GitHub上的项目常见问题(以图片轮播开源项目为实例)
前言:github对开发者而言无疑是个宝藏,但想利用它可不是件简单的事,用Android studio导入开源项目会遇到各种问题,今天我就以github上的一个图片轮播项目为例,解决导入过程中的常见问 ...
- nginx 配置轮询服务
通常我们应用nginx做代理时,用到它的轮训服务 #设置轮询名称 upstream zyy{ server 127.0.0.1:8080 #本机的apache服务 } server { listen ...
- Python基础----函数
1.作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'wupeiqi' print name 下面的结论对吗? 外层变量,可以被内 ...
- ASP.NET-FineUI开发实践-9(三)
1. TextChanged事件前台触发回发后台,接上文,先给TextBox1加上事件,看看是怎么生成出来的, 注意AutoPostBack="true",找源代码,f4多出了个 ...
- Visual Studio写的项目在 IIS 服务器上运行的两种简单方法
首先需要PC上开启了IIS服务,相关方法网上很多,也很简单 第一种:直接在项目中操作 1.创建一个项目,然后右击选中项目,右击,单击属性,打开项目属性标签页面 如图,选择Web标签,在服务器栏目中选中 ...
- javascript基础之自执行函数
1.匿名函数的定义方式 如下 var temp = function(){} 2.自执行函数 (function(){ 内容 }) () 不带参数 (fun ...
- nexus 的使用及maven的配置
一.nexus的安装 1.下载nexus(点解这里) 2.下载后解压文件,将解压后的nexus文件放在你自己想要的地方 3.配置环境变量(和配置java的环境变量一样) 4.安装和启动nexus 由于 ...
- sql-----点点滴滴
from--------where-------groud by---------having----------select---------order by------------top --时间 ...
- java转换流
转换流是把字节流转换成字符流,比如往一个文件中写内容,原本是一个字节一个字节的写,转换为字符流后,我们可以一个字符串,一个字符串的写,书写中文很方便 转换流class: OutputStreamWri ...