布局中@null的代码实现方式

布局中通常会用到@null。如RadioButton常用的技巧通过RadioGroup实现Tab,需要设置android:button="@null"。如果要在代码中动态创建控件,android中并不能找到相关的属性或方法。搜索均无解决办法,最后想到一个变通的方法:通过透明色获取drawable。
Java代码 复制代码  收藏代码
  1. setButtonDrawable(getResources().getDrawable(android.R.color.transparent))  
setButtonDrawable(getResources().getDrawable(android.R.color.transparent))
 

   实际还是可以通过布局的方法来动态创建控件。先创建一个RadioButton的rb.xml

 

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RadioButton xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:button="@null" >  
  6.   
  7. </RadioButton>  

 

再在代码生成RadioButton

 

Java代码 复制代码  收藏代码
  1. RadioButton rb =(RadioButton)LayoutInflater.from(getContext()).inflate(R.layout.rb, null);  
RadioButton rb =(RadioButton)LayoutInflater.from(getContext()).inflate(R.layout.rb, null);

 这种方式的好处是样式等属性可以在布局中统一指定省的查sdk寻找相关属性的设置方法。

下面是一个使用RecyclerView实现布局的示例代码: public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<Object> items; private final int USER = 0, IMAGE = 1; public MyAdapter(List<Object> items) { this.items = items; } @Override public int getItemViewType(int position) { Object object = items.get(position); if (object instanceof User) { return USER; } else if (object instanceof Image) { return IMAGE; } return -1; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); View view; if (viewType == USER) { view = layoutInflater.inflate(R.layout.user_layout, parent, false); return new UserViewHolder(view); } else if (viewType == IMAGE) { view = layoutInflater.inflate(R.layout.image_layout, parent, false); return new ImageViewHolder(view); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { Object object = items.get(position); if (object instanceof User) { ((UserViewHolder) holder).bindView((User) object); } else if (object instanceof Image) { ((ImageViewHolder) holder).bindView((Image) object); } } @Override public int getItemCount() { return items.size(); } private class UserViewHolder extends RecyclerView.ViewHolder { private TextView name; public UserViewHolder(View itemView) { super(itemView); name = itemView.findViewById(R.id.name); } public void bindView(User user) { name.setText(user.getName()); } } private class ImageViewHolder extends RecyclerView.ViewHolder { private ImageView image; public ImageViewHolder(View itemView) { super(itemView); image = itemView.findViewById(R.id.image); } public void bindView(Image image) { this.image.setImageDrawable(image.getImage()); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值