技术人员核心竞争力还是技术啊。努力提高各种实现效果。加油哦!

直接看效果。此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设置下划线选中效果的更多相关文章

  1. [HTML/CSS]导航栏的下划线跟随效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈

    目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...

  3. tab 切换下划线跟随实现

    HTML 结构如下: <ul> <li class="active">不可思议的CSS</li> <li>导航栏</li> ...

  4. 不可思议的纯CSS导航栏下划线跟随效果

    先上张图,如何使用纯 CSS 制作如下效果? 在继续阅读下文之前,你可以先缓一缓.尝试思考一下上面的效果或者动手尝试一下,不借助 JS ,能否巧妙的实现上述效果. OK,继续.这个效果是我在业务开发的 ...

  5. [CSS]textarea设置下划线格式

    功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线  2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...

  6. 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

    http://www.bubuko.com/infodetail-382485.html 标签:des   class   style   代码   html   使用   问题   文件   数据 ...

  7. The usage of Markdown---文字强调:加粗/斜体/文本高亮/删除线/下划线/按键效果

    更新时间:2019.09.14 1. 序言 有时候,我们需要对某些文字进行强调,例如粗体和斜体.而Markdown通常可以使用星号*或者下划线_进行文字强调. 2. 加粗 如果想要达到加粗的效果,可以 ...

  8. [Android] TabLayout设置下划线(Indicator)宽度

    在使用TabLayout的过程中,为每个标签添加一个 下划线,但发现每个下划线的 宽度 都是一样的,例如会如下显示 这样很难看,所以必须进行调整后的效果如下: 看,这样不是非常和谐啦!~~ 实现方法很 ...

  9. Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换

    开发中遇到了一个问题,Tablayout设置下换线长度,看了点资料,分享给大家. 效果图:               直接贴代码(要在tabLayout添加完所有的tab后调用) public vo ...

随机推荐

  1. 程序中使用7-zip(7z)压缩文件

    Email:longsu2010 at yeah dot net 工作中难免遇到需要压缩文件的情况,比如有一千万个小文件,每个文件约100k,如果使用7-zip压缩后可能十几k,可以节省很多磁盘空间. ...

  2. Maven实战——生命周期和插件

    Maven的构建过程包含:初始化.编译.測试.打包.集成測试.部署 Maven拥有三套相互独立的生命周期:clean(清理项目).default(构建项目).site(建立项目网站) 每一个生命周期包 ...

  3. 配置ISCSI服务器

    一.在linux下安装启动iscsi target 1.安装启动iscsi服务 [root@wjb10000 ~]# yum -y install targetcli.noarch 2.建立一个目录设 ...

  4. linux批量执行工具omnitty使用方法

    一.omnitty概述 在生产环境中,可能会有多台linux主机.运维人员可能会对多台主机进行同样的操作,例:同时在多台主机上添加一个user或查看所有主机的硬件信息,如果没有批量操作工具,设备少于2 ...

  5. MM32看门狗学习(兼容STM32)

    MM32看门狗学习(兼容STM32) IWDG独立看门狗 思维导图 IWDG框图与理解 1.独立看门狗分为两个部分,配置寄存器在1.8V供电区,计数器的核心部分在VDD供电区(即使停机/待机模式计数器 ...

  6. Gamit解算脚本

    这是一个解算单天的shell脚本,对于初学者很有帮助. 首先就是需要在项目(四个字符)建立rinex brdc igs 还有以年纪日命名的目录,然后提前准备好station.info和lfile.文件 ...

  7. oracle的一知半解

    这里只讲第一次开发运用oracle数据库的.net程序遇到问题: 1.程序与oracle数据库在同一台的服务器,貌似设置好连接字符串就可以直接访问( 需要主要的问题: 字符串格式:Data Sourc ...

  8. GridView and DropDownList

    <form id="form1" runat="server"> <div> <asp:GridView runat=" ...

  9. Debugging Failed Because Integrated Windows Authentication Is Not Enabled

    To enable integrated Windows authentication Log onto the Web server using an administrator account. ...

  10. HADOOP报错Incompatible namespaceIDs

    出现这个问题的原因是因为namespaceIDs导致的 解决方案1<推荐> 1. 进入链接不上的从机 stop-all.sh关闭hadoop 2. 编辑namespaceID,路径是< ...