Android Studio - 以编程方式操作布局/视图的问题

问题描述 投票:0回答:1

我有一些问题,以编程方式设置LayoutParams和我的布局/视图的其他参数。我无法在XML布局文件中指定它们,因为它们是否出现取决于数据库中保存的数据。

以下是我用来创建一个新的“Section”的函数,它包含一个FrameLayout,其子节点是View和TextView:

public FrameLayout createSection(long id, String name) {
    FrameLayout frame = new FrameLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100);
    params.setMargins(15, 15, 15, 15);
    frame.setLayoutParams(params);

    View view = new View(this);
    LayoutParams viewParams = new LayoutParams(LayoutParams.MATCH_PARENT, 100);
    view.setLayoutParams(viewParams);
    view.setId(toIntExact(id));
    view.setBackgroundResource(R.color.colorButton);
    frame.addView(view);

    TextView text = new TextView(this);
    LayoutParams textParams = new LayoutParams(LayoutParams.MATCH_PARENT, 100);
    textParams.setMarginStart(15);
    text.setGravity(Gravity.CENTER);
    text.setTextAlignment(TextView.TEXT_ALIGNMENT_TEXT_START);
    text.setTextColor(getResources().getColor(R.color.colorTextSecondary));
    text.setText(name);
    frame.addView(text);

    return frame;
}

这个新创建的FrameLayout的父级是LinearLayout,因此基于StackOverflow上的其他类似问题,我认为FrameLayout的设置参数应该通过LinearLayout.LayoutParams来完成。但是,这不会改变。最初的XML页面包含:Initial XML page

第一个“SECTION”在XML文件中创建,另外两个是通过“createSection”函数创建的。这是结果:Design outcome

问题是边距设置不正确,TextView似乎并不关心我正在使用的Gravity + TextAlignment组合。

我将不胜感激,我可以帮助解决这个问题。

java android android-framelayout layoutparams
1个回答
0
投票

我为浪费任何人的时间而道歉。代码似乎有效,边距大小不同,因为它们是以像素(px)而不是像XML文件中的dp一样设置的。

我也忘了添加text.setLayoutParams(textParams);到TextView对象。

© www.soinside.com 2019 - 2024. All rights reserved.