【问题标题】:Fill RelativeLayout with Multiple Buttons or Views用多个按钮或视图填充 RelativeLayout
【发布时间】:2014-05-04 10:34:26
【问题描述】:

RelativeLayout的规则上苦苦挣扎之后,我投降了。所以,我非常感谢您的帮助。

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

动态添加按钮的代码:

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);
}

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

我想要达到的目标:

我希望所有按钮并排放置,当按钮从屏幕宽度溢出时,它们应该出现在下一行。 类似这样的:(图片截图)

我是布局方面的菜鸟。请帮帮我!

谢谢

最好的问候

【问题讨论】:

  • 你需要的是this
  • 没有。我认为这根本与我的问题无关。

标签: android android-layout android-relativelayout


【解决方案1】:

RelativeLayout 不是为此而设计的。你应该试试FlexboxLayout。一些链接:

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

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

【讨论】:

    【解决方案2】:

    尝试 RecyclerView 来实现这种视图类型的视图。您可以将 recyclerview 与 GridLayoutManager 一起使用。在 gridview 中,如果项目超过其筛选到下一行,我们将项目数设置为一行。

    第一个活动

    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);
       }
    }
    

    自定义适配器

    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);
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 2015-01-09
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2012-05-01
      • 2013-03-11
      相关资源
      最近更新 更多