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

直接看效果。此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. 【safari挖的那些坑】iOS safari 浏览器 时间乱码(ios时间显示NaN) 问题解决

    通常 iOS下时间错误表现形式 问题一: 这个界面运用了大量的日期类型的计算,当我们用JavaScript实例化一个日期对象时,我们可以这样用: var date =new Date(); 上面这段代 ...

  2. [Javascript] JavaScript Array Methods in Depth - push

    Array push is used to add elements to the end of an Array. In this lesson we'll see how the push met ...

  3. sql 删除多项

    delete from 表名 where 字段 in(值,值,值.......)

  4. css过渡+3D

    <!DOCTYPE html><html><head> <title>guodu</title> <meta charset=&quo ...

  5. Java请求参数类QueryParameter

    import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; /** * 请求 ...

  6. spring aop例子

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAATcAAAFWCAIAAACD6E2aAAAgAElEQVR4nO2df1gTV77/55/93z/2ee

  7. java中的final, finally, finalize的区别

    final修饰符(关键字),如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为abstract的,又被声明为final的.将变量或方法声明为fin ...

  8. MySQL数据库my.cnf配置文件注释详解

    我们知道,在MySQL数据库安装完成后,要对my.cnf配置文件进行适当的修改才能充分利用MySQL数据库的功能.但是对于初学者来说,修改my.cnf配置文件似乎是一个比较难的过程.为了解决这个问题, ...

  9. 日期 bootsrtap-datatimepicker and bootstrap-datepicker 控件支持中文

    引用 bootsrtap-datatimepicker and bootstrap-datepicker 控件,发现官方控件不支持中文 1,bootstrap-datepicker - >解决方 ...

  10. Windows服务器之间rsync同步文件

    两台windows7机器 server:192.168.12.104 client:192.168.12.103 目的:将server上的E盘的目录FYFR里面的内容定时同步到client上的D盘下F ...