2014-09-16 3 views
1

Я пытаюсь установить динамическую границу RelativeLayout. По какой-то причине, когда я делаю это вручную в работе XML, он работает отлично, но когда я пытаюсь добавить его динамически, он не отображается.Граница XML не загружается динамически в Android

border.xml находится в папке

вводимого коэффициента
<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="#000" /> 
     </shape> 
    </item> 
    <item android:bottom="1dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#fff" /> 
     </shape> 
    </item> 
</layer-list> 

активность XML файл

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingBottom="5px" 
      android:paddingTop="5px" 
      android:background="@drawable/border"> 

код, чтобы добавить его непосредственно и добавить его к существующему LinearLayout

public void load(){ 

LinearLayout UsersContainer = (LinearLayout) findViewById(R.id.usersContainer); 
RelativeLayout UserContainer = new RelativeLayout(this); 
UserContainer.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT)); 
UserContainer.setPadding(0,5,5,0); 
UserContainer.setBackgroundResource(R.drawable.border); 
UsersContainer.addView(UserContainer); 
} 

Буду признателен за вашу помощь! Я попытался загрузить TextView в LinearLayout, и он отлично работает. Однако RelativeLayout не показывает границу (она загружается, хотя!).

+0

Почему бы вам не сохранить границу, определенную в XML, то? – joao2fast4u

+0

Почему вы не устанавливаете границу непосредственно на RelativeLayout? – joao2fast4u

+0

Потому что я действительно не знаю, сколько у меня будет, поскольку я загружаю многие из них динамически. –

ответ

1

Вам просто нужно немного исправить.

В коде кода изменить метод load() к:

LinearLayout usersLinear = (LinearLayout) findViewById(R.id.usersContainer); 
RelativeLayout userRelative = new RelativeLayout(this); 
//you were setting your height value as RelativeLayout.LayoutParams.WRAP_CONTENT, I changed it //to RelativeLayout.LayoutParams.MATCH_PARENT 
userRelative.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)); 
//apply padding 
userRelative.setPadding(0,5,5,0); 
userRelative.setBackgroundResource(R.drawable.border); 
usersLinear.addView(userRelative); 

Итак, ваш код работает, но не применяя правильное значение высоты к динамически RelativeLayout, и он не показывал на макет, потому что он пуст (в нем нет дочернего представления). С MATCH_PARENT он будет иметь ту же высоту, что и его родитель. Вы можете играть с этими значениями, чтобы приспособиться к своему делу, как хотите. И не забудьте указать параметры Gravity, которые вы также можете настроить динамически.

+1

Спасибо большое! Это сработало :) –

Смежные вопросы