2015-06-08 3 views
0
LinearLayout usersPlaceholder = Main.lay_found_users; //Found Users Placeholder 

    //RelativeLayout Params 
    RelativeLayout userlay = new RelativeLayout(mCtx);  //Create new Element 
    userlay.setBackgroundResource(R.drawable.btn_useritem); //Background 
    userlay.setGravity(RelativeLayout.CENTER_HORIZONTAL); //Gravity 
    userlay.setClickable(true);        //Clickable 

    RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, dp(80)); 
    relativeParams.setMargins(dp(80), dp(80), dp(80), dp(80)); 
    userlay.setLayoutParams(relativeParams); 
    userlay.requestLayout(); 
    usersPlaceholder.addView(userlay); 

Поля не устанавливаются. RelativeLayout, являющийся дочерним элементом, расширяется до соответствия родительскому usersPlaceholder, который является LinearLayout. Я также попытался установить Прокладки к родительскому элементу, но с той же проблемой ...RelativeLayout программные поля не работают

Этот метод преобразует меры

public int dp(int dps){ 
    final float scale = mCtx.getResources().getDisplayMetrics().density; 
    return (int) (dps * scale + 0.5f); 
} 

Главная Активность:

public class Main extends Activity{ 

    Context ctx; 
    public static LinearLayout lay_found_users; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.act_main); 

     lay_found_users = (LinearLayout) findViewById(R.id.lay_found_users); 
    } 
} 

Предложения? Благодарю.

+0

Dont называть requestLayout() система будет звонить вам – EE66

+0

Okay спасибо, я назвал его, потому что я прочитал это может быть решением, но оба вызова или не вызывая не делают наценки работы:/ – ProtectedVoid

+0

Поделитесь больше кодом. этот код довольно прямолинейный, и я не проблема здесь. Main.lay_found_useres. обмениваться этим представлением – EE66

ответ

1

И LinearLayout.LayoutParams, и RelativeLayout.LayoutParams удлиняет MarginLayoutParams, что объясняет, почему некоторые настройки применяются к обоим макетам. Если вы установите параметр, который недоступен в макете, он просто игнорируется.

При использовании RelativeLayout, я бы использовал padding вместо margins. Это может решить вашу проблему.

Padding установлен непосредственно на вид, а не на LayoutParams. Так, например: userLay.setPadding(dp(80),dp(80),dp(80),dp(80));

+0

Спасибо за ответ. Теперь я понимаю! – ProtectedVoid

0

Я нашел решение, но я его не понимаю. Я сделал работу наценки, создавая LayoutParams из LinearLayout так:

LinearLayout.LayoutParams relativeParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, dp(80)); 

Я не получить его, потому что я создал новый RelativeLayout:

RelativeLayout userlay = new RelativeLayout(mCtx); 

Я претендую LinearLayout параметров к RelativeLayout

Типы макетов не совпадают, но параметры работают. Может кто-нибудь сказать мне, почему? Благодарю.

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