android在代码中怎么使得控件居中,以及代码设置控件selector

      最近在做一个项目,分别是登录前的状态,和登录后的状态,LinearLayout背景颜色和高度需要改变,LinearLayout布局中的TextView字体需要改变,ImageView控件要改变,原来是居中显示的,那么改变控件后,还想要居中,只需要在xml中设置android:layout_gravity="center"属性即可。

       ImageView控件的图片,点击和不点击有两种状态,在代码中设置和xml中android:background="@drawable/xxxx" 的效果。

  

/**
 *    xml的selector对应的java代码设置
 * */
private StateListDrawable addStateDrawable(Context context,  int idNormal, int idPressed, int idFocused) {
    StateListDrawable sd = new StateListDrawable();
    Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal);
    Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed);
    Drawable focus = idFocused == -1 ? null : context.getResources().getDrawable(idFocused);
    //注意该处的顺序,只要有一个状态与之相配,背景就会被换掉
    //所以不要把大范围放在前面了,如果sd.addState(new[]{},normal)放在第一个的话,就没有什么效果了
    //sd.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focus);
    //sd.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);
    //sd.addState(new int[]{android.R.attr.state_focused}, focus);
    sd.addState(new int[]{android.R.attr.state_pressed}, pressed);
    sd.addState(new int[]{android.R.attr.state_enabled}, normal);
    sd.addState(new int[]{}, normal);
    return sd;
}

调用处:

loginOrRegister_iv.setBackgroundDrawable(addStateDrawable(this, R.mipmap.logined ,R.mipmap.logined_pressed ,R.mipmap.logined_pressed ));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值