2017-06-06 20 views
0

我正在用minSdk = 14編寫一個Android應用程序。我有一個RelativeLayout的活動,其中放置了一些視圖。當我按下此Activity中的按鈕時,我必須在此佈局中添加5個視圖:2個textview,2個editTexts和一個ImageView。我想這樣做是這樣的:Android RelativeLayout在API17之前添加規則

CustomTextView fromLabel = new CustomTextView(this); 
    RelativeLayout.LayoutParams paramsForFromLabel = new RelativeLayout.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); //ширина, длина 
    paramsForFromLabel.addRule(RelativeLayout.BELOW, lastCounterId); 
    paramsForFromLabel.topMargin = 10; 
    fromLabel.setId(counterIds.get(5*counterMax)); 
    fromLabel.setGravity(Gravity.CENTER); 
    fromLabel.setText(R.string.labelCommunalCounterFrom); 
    int newFromLabelId = fromLabel.getId(); 

    EditText from = new EditText(this); 
    from.setInputType(InputType.TYPE_CLASS_NUMBER); 
    RelativeLayout.LayoutParams paramsForFrom = new RelativeLayout.LayoutParams(
      (int) getResources().getDimension(R.dimen.number_width), ViewGroup.LayoutParams.WRAP_CONTENT); 
    paramsForFrom.addRule(RelativeLayout.BELOW, lastCounterId); 
    paramsForFrom.addRule(RelativeLayout.RIGHT_OF, fromLabel.getId()); 
    from.setId(counterIds.get(5*counterMax+1)); 
    int newFromFieldId = from.getId(); 

    paramsForFromLabel.addRule(RelativeLayout.ALIGN_BASELINE, newFromFieldId); 

    CustomTextView toLabel = new CustomTextView(this); 
    RelativeLayout.LayoutParams paramsForToLabel = new RelativeLayout.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    paramsForFromLabel.addRule(RelativeLayout.BELOW, lastCounterId); 
    paramsForToLabel.addRule(RelativeLayout.RIGHT_OF, from.getId()); 
    paramsForFromLabel.topMargin = 10; 
    toLabel.setId(counterIds.get(5*counterMax+2)); 
    toLabel.setGravity(Gravity.CENTER); 
    toLabel.setText(R.string.labelCommunalCounterTo); 
    int newToLabelId = toLabel.getId(); 

    EditText to = new EditText(this); 
    to.setInputType(InputType.TYPE_CLASS_NUMBER); 
    RelativeLayout.LayoutParams paramsForTo = new RelativeLayout.LayoutParams(
      (int) getResources().getDimension(R.dimen.number_width), ViewGroup.LayoutParams.WRAP_CONTENT); 
    paramsForTo.addRule(RelativeLayout.BELOW, lastCounterId); 
    paramsForTo.addRule(RelativeLayout.RIGHT_OF, toLabel.getId()); 
    to.setId(counterIds.get(5*counterMax+3)); 
    int newToFieldId = to.getId(); 

    paramsForToLabel.addRule(RelativeLayout.ALIGN_BASELINE, newToFieldId); 

    ImageView dropCounter = new ImageView(this); 
    dropCounter.setId(counterIds.get(5*counterMax+4)); 
    dropCounter.setImageResource(R.drawable.cancel_icon); 
    RelativeLayout.LayoutParams paramsForDrop = new RelativeLayout.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    paramsForDrop.addRule(RelativeLayout.BELOW, lastCounterId); 
    paramsForDrop.addRule(RelativeLayout.RIGHT_OF, to.getId()); 
    paramsForDrop.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); 

    layout.addView(fromLabel, paramsForFromLabel); 
    layout.addView(from, paramsForFrom); 
    layout.addView(toLabel, paramsForToLabel); 
    layout.addView(to, paramsForTo); 
    layout.addView(dropCounter, paramsForDrop); 

的問題是:對於第二視圖(EditText from),該規則RIGHT_OF被忽略。所有其他領域顯示良好。 接下來的問題是:我如何重寫視圖的規則?我有一個按照XML規定的按鈕LAYOUT_BELOW規則。我怎樣才能以編程方式更改它?

回答

0

固定!這聽起來很愚蠢,但問題是: 我爲我的第一個視圖(第一個TextField)設置了一個id = 0。當我嘗試引用此ID時,此規則被忽略。當我設置ID = 1時 - 所有問題都消失了! 對不起,這個問題!在閱讀文檔期間,我並不在意:我們可以將POSITIVE整數用作View ID。