net.lucode.hackware.magicindicator使用及修改

net.lucode.hackware.magicindicator打造万能指示器。
相关文章已经有很多,且具体可以下载源码阅读。
今天遇上的问题是使用标题位置的修改,使用的标题view是ColorTransitionPagerTitleView,它的父类是SimplePagerTitleView,其中关于文字位置部分的在init方法中,但这个方法时private,就是说无法修改,他设置左右边距,即便设置LEFT,依旧会出现左边的一个边距,项目中不能有这个边距。所有改了源码

protected void init(Context context) {
        setGravity(Gravity.CENTER);
        int padding = UIUtil.dip2px(context, 10);
        setPadding(padding, 0, padding, 0);
        setSingleLine();
        setEllipsize(TextUtils.TruncateAt.END);
    }

对其扩展:
* -设置标题位置居左
*/

public class ColorMagicTitleView extends ColorTransitionPagerTitleView {

public ColorMagicTitleView(Context context) {
    super(context);
}

@Override
protected void init(Context context) {
    setGravity(Gravity.LEFT);
    int padding = UIUtil.dip2px(context, 10);
    setPadding(0, 0, padding, 0);
    setSingleLine();
    setEllipsize(TextUtils.TruncateAt.END);
}

}
中间发现一个当我想要获取所有的标题view的时候,没有提供getter方法,即private LinearLayout mTitleContainer;成员变量,所以只能使用反射了,拿到代码的小伙伴也可以添加getter方法。

/**
     * 获取所有的标题
     * @param commonNavigator
     */
    private void getIndicatorTitleContainer(CommonNavigator commonNavigator){
        Class clazz = commonNavigator.getClass();
        Field[] attrFieldes = clazz.getDeclaredFields();
        Object container = null;
        for (Field zField : attrFieldes) {
            zField.setAccessible(true);
            Log.d("IndicatorTitleContainer", "Field name -->" + zField.getName());
            if (zField.getName().contains("mTitleContainer")) {
                try {
                    container = zField.get(commonNavigator);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } finally {
                    break;
                }
            }
        }
        if (container != null && container instanceof LinearLayout){
            LinearLayout mLinearLayout = (LinearLayout) container;
            for (int i=0; i < mLinearLayout.getChildCount(); i++){
                SimplePagerTitleView mSimplePagerTitleView = (SimplePagerTitleView) mLinearLayout.getChildAt(i);
                commonNavigators.add(mSimplePagerTitleView);
            }
        }
    }

这个指示器很不错,推荐替换tablayout等控件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值