在与 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
我是布局中的菜鸟。请帮帮我!
谢谢
最好的问候
答案 0 :(得分:1)
RelativeLayout
不是为此设计的。您可能应该尝试FlexboxLayout
。一些链接:
https://android-developers.googleblog.com/2017/02/build-flexible-layouts-with.html
答案 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);
}
}
}