概述
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等控件。
最后
以上就是发嗲秋天为你收集整理的net.lucode.hackware.magicindicator使用及修改的全部内容,希望文章能够帮你解决net.lucode.hackware.magicindicator使用及修改所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复