使用多个按钮或视图填充RelativeLayout

时间:2014-05-04 10:34:26

标签: android android-layout relativelayout

在与 RelativeLayout 的规则挣扎之后,我投降了。所以,我真的很感谢你的帮助。

我正在尝试加载一些 标记 的数组,并制作这些标记的按钮。所以,以编程方式,我这样做。 使用 RelativeLayout ,因为在 LinearLayout 中,有2个方向:垂直水平

动态添加按钮的代码:

RelativeLayout innerLayout = (RelativeLayout) findViewById(R.id.innerRelativeLayout);
String tags[] = {"friends","love","motivate","sad","party","fun"};

for (int i = 0; i < tags.length; i++) {
    Button bt = new Button(this);
    bt.setText(tags[i]);
    bt.setId(i+1);
    bt.setBackgroundResource(R.drawable.radius_button_selector);
    bt.setPadding(10, 10, 10, 10);
    bt.setTextSize(20);

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    if (i == 0) {
        params.addRule(RelativeLayout.ALIGN_PARENT_START);
    }
    else {
        params.addRule(RelativeLayout.RIGHT_OF, bt.getId() - 1);
    }
    params.setMargins(0, 0, 10, 10);
    bt.setLayoutParams(params);
    innerLayout.addView(bt);
}

我得到的是:(图片截图)

Error http://i62.tinypic.com/sfvxcj.jpg Error http://i60.tinypic.com/whyy3t.jpg

我想要实现的目标:

我想要所有的按钮并排,当按钮从屏幕的宽度溢出时,它们应该进入下一行。 像这样:(图片截图)

Error http://i62.tinypic.com/2cfpksn.jpg

我是布局中的菜鸟。请帮帮我!

谢谢

最好的问候

2 个答案:

答案 0 :(得分:1)

RelativeLayout不是为此设计的。您可能应该尝试FlexboxLayout。一些链接:

https://android-developers.googleblog.com/2017/02/build-flexible-layouts-with.html

https://github.com/google/flexbox-layout

答案 1 :(得分:0)

尝试使用RecyclerView获得此视图类型的视图。您可以将recyclerview与GridLayoutManager一起使用。在gridview中,如果项目超出了它对下一行的筛选范围,则将项目数设置为一行。

  

FirstActivity

public class FirstActivity extends AppCompatActivity{
   RecyclerView recycler_view;
   GridLayoutManager manager;

   CustomAdapter customAdapter;
   protected void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_first);
      initView();
   }

   private void initView(){
      ArrayList<String> list=new ArrayList<>();
      list.add("8");
      list.add("10");
      list.add("11");
      list.add("12");
      list.add("14");
      list.add("16");
      list.add("18");
      recycler_view=findViewById(R.id.recycler_view);
      manager=new GridLayoutManager(this, 5);
      recycler_view.setLayoutManager(manager);
        customAdapter=new CustomAdapter(this, list);
      recycler_view.setAdapter(customAdapter);
   }
}
  

CustomAdapter

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyHolder>{
   Context context;
   ArrayList<String> dataList;


   public CustomAdapter(Context context, ArrayList<String> dataList, ){
      this.context=context;
      this.dataList=dataList;

   }

   @NonNull

   @Override
   public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i){
      View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_custom,viewGroup,false);
      MyHolder myHolder=new MyHolder(view);
      return myHolder;
   }

   @Override
   public void onBindViewHolder(@NonNull MyHolder myHolder, final int i){
      //check select item position
      if(selectItem==i){
         myHolder.textView.setTextColor(Color.RED);
      }else {
         myHolder.textView.setTextColor(Color.BLACK);
      }
    myHolder.textView.setText(dataList.get(i));
    myHolder.itemView.setOnClickListener(new View.OnClickListener(){
       @Override
       public void onClick(View v){

       }
    });
   }

   @Override
   public int getItemCount(){
      return dataList.size();
   }

   public class MyHolder extends RecyclerView.ViewHolder{
    TextView textView;
      public MyHolder(@NonNull View itemView){
         super(itemView);
         textView=itemView.findViewById(R.id.text_tv);
      }
   }
}

enter image description here