Android 以编程方式设置相对布局位置

Android 以编程方式设置相对布局位置,android,android-relativelayout,Android,Android Relativelayout,我正在尝试使用相对布局添加不同的视图。添加了edittext和微调器,但没有显示listview public class CustomView extends LinearLayout { Context rContext; private String rTitle; private Spinner rSpinner; private EditText rInput; private ListView rResultsList; publi

我正在尝试使用相对布局添加不同的视图。添加了edittext和微调器,但没有显示listview

public class CustomView extends LinearLayout {
    Context rContext;
    private String rTitle;

    private Spinner rSpinner;
    private EditText rInput;
    private ListView rResultsList;

    public CustomView(Context context) {
        super(context);
        rContext = context;
    }

    public CustomView(Context context, AttributeSet attrs, int theme) {
        super(context, attrs, theme);
    }

    public void initialize(String title) {

        rTitle = title;
        rInput = new EditText(rContext);
        rInput.setId(1);
        rSpinner = new Spinner(rContext);
        rSpinner.setId(2);
        rResultsList = new ListView(rContext);
        rResultsList.setId(3);
        rInput.setText("1");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(rContext, R.layout.result_item, R.id.result_item, new String[] { "this", "that" });
        rResultsList.setAdapter(adapter);
        addViews();
    }

    @Override
    public String toString() {

        return rTitle;
    }

    private void addViews() {

        RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(ConvertoActivity.APP_WIDTH / 2, 100);
        relativeParams.addRule(RelativeLayout.RIGHT_OF, rInput.getId());

        RelativeLayout.LayoutParams relativeParams2 = new RelativeLayout.LayoutParams(ConvertoActivity.APP_WIDTH / 2, 100);
        relativeParams.addRule(RelativeLayout.LEFT_OF, rSpinner.getId());

        RelativeLayout.LayoutParams relativeParams3 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        relativeParams.addRule(RelativeLayout.BELOW, rInput.getId());

        this.addView(rInput, relativeParams2);
        this.addView(rSpinner, relativeParams);
        this.addView(rResultsList, relativeParams3);


    }
}
公共类CustomView扩展了LinearLayout{
语境;
私有字符串;
私人纺纱机;
私人编辑文本输入;
私有ListView-rResultsList;
公共自定义视图(上下文){
超级(上下文);
rContext=上下文;
}
公共自定义视图(上下文上下文、属性集属性、int主题){
超级(上下文、属性、主题);
}
公共void初始化(字符串标题){
rTitle=头衔;
rInput=新编辑文本(rContext);
rInput.setId(1);
rSpinner=新微调器(rContext);
rSpinner.setId(2);
rResultsList=新列表视图(rContext);
rResultsList.setId(3);
rInput.setText(“1”);
ArrayAdapter=新的ArrayAdapter(rContext,R.layout.result_项,R.id.result_项,新字符串[]{“this”,“that”});
rResultsList.setAdapter(适配器);
添加视图();
}
@凌驾
公共字符串toString(){
回程时间;
}
私有void addViews(){
RelativeLayout.LayoutParams relativeParams=新的RelativeLayout.LayoutParams(ConvertoActivity.APP_WIDTH/2100);
relativeParams.addRule(RelativeLayout.RIGHT_OF,rInput.getId());
RelativeLayout.LayoutParams relativeParams2=新的RelativeLayout.LayoutParams(ConvertoActivity.APP_WIDTH/2100);
addRule(RelativeLayout.LEFT_OF,rSpinner.getId());
RelativeLayout.LayoutParams relativeParams3=新的RelativeLayout.LayoutParams(LayoutParams.WRAP\u内容,LayoutParams.WRAP\u内容);
addRule(RelativeLayout.down,rInput.getId());
this.addView(rInput,relativeParams2);
此.addView(rSpinner,relativeParams);
this.addView(rResultsList,relativeParams3);
}
}

您的自定义视图扩展了LinearLayout,并且您正在使用RelativeLayout.Layout参数。更改自定义视图以扩展RelativeLayout。

不管怎样,我找到了答案。
我正在给相对参数的同一个对象添加规则。

我试过了。当我扩展相对布局时,它只显示listview,而不显示inputview和Spinner,这可能是因为您使用的是布局参数的三个不同实例。如果要垂直显示每个视图组件,只需将lienar布局的方向设置为垂直,并将高度作为每个项目的换行内容。