繁体   English   中英

Android在片段的RelativeLayout中动态对齐按钮

[英]Android Align Button Dynamically In RelativeLayout In Fragment

我试图垂直对齐在RelativeLayout片段内for循环中动态生成的按钮,但是按钮在同一位置重叠,我浏览了很多其他文章,但我仍然不知道如何解决它,helpppppp

我知道使用linearLayout可以解决问题,但是按钮的大小和位置错误,并且由于某些原因,我无法将linearLayout添加到relativeLayout中。 我粘贴了2个代码示例,并且我需要其中的一个解决方案。 提前致谢。

以下是我的代码(尝试1:在相对布局中对齐按钮):

View view = inflater.inflate(R.layout.home, container, false);

RelativeLayout relativeLayout = new RelativeLayout(getActivity().getApplicationContext());
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

List<String> test_list = Arrays.asList("sup1", "sup2", "sup3");

for (int i = 0; i < test_list.size(); i++) {
    final String test_name = test_list.get(i);
    Button button = new Button(getActivity());
    button.setText("Test" + test_name + " " + i);
    button.setId(i);

    if(i > 0){
        lp.addRule(RelativeLayout.RIGHT_OF, (i-1));
    }

    relativeLayout.addView(button, lp);

    button.setOnClickListener(new View.OnClickListener() {@Override 
        public void onClick(View v) {
            FragmentManager fragmentmanager = getFragmentManager();
            FragmentTransaction transaction = fragmentmanager.beginTransaction(); // allows attach,detach,etc
            transaction.replace(R.id.DB2Home, newFragment, "ChooseCategory").addToBackStack(null).commit();
        }
    });
}

((ViewGroup) view).addView(relativeLayout);

return view;

(尝试2:以线性布局对齐按钮并添加到相对布局)

View view = inflater.inflate(R.layout.home, container, false);

LinearLayout linearLayout = new LinearLayout(getActivity().getApplicationContext());
linearLayout.setOrientation(LinearLayout.VERTICAL);

List<String> test_list = Arrays.asList("sup1", "sup2", "sup3");
for (int i = 0; i < test_list.size(); i++) {
    final String test_name = test_list.get(i);
    Button button = new Button(getActivity());
    button.setText(test_name);
    button.setId(i);

    linearLayout.addView(button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fragmentmanager = getFragmentManager();
            FragmentTransaction transaction = fragmentmanager.beginTransaction(); // allows attach,detach,etc
            transaction.replace(R.id.DB2Home, newFragment,"ChooseCategory").addToBackStack(null).commit();
        }
    });
}
// Doesn't work for relative layout
// RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.homescreen);
//relativeLayout.addView(linearLayout);
//((ViewGroup) view).addView(relativeLayout);

((ViewGroup) view).addView(linearLayout);

return view;

您可以通过以下代码获取它:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);

button.setLayoutParams(params); //causes layout update

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM