2013-10-13 6 views
1

Привет Я разрабатываю приложение для Android, в котором я создаю относительную компоновку программ и пытаюсь установить для этого разницу, и добавил ее в линейную компоновку с линейной ориентацией. Так вот мой код:создать и установить марж программный для относительной компоновки android

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/screen_background" 
    tools:context=".ChooseChannelsFragment" > 

    <LinearLayout 
     android:id="@+id/main_outer_llt" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal" 
     > 

    </LinearLayout> 

</RelativeLayout> 

и внутри фрагмента я добавляю относительное расположение, как этого

RelativeLayout relativeLayout = new RelativeLayout(getActivity()); 
    RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(200, 80); 
    relativeParams.setMargins(20, 20, 20, 20); 
    relativeLayout.setLayoutParams(relativeParams); 
    relativeLayout.setBackgroundColor(getResources().getColor(R.color.green_color)); 
    linearLayout.addView(relativeLayout); 

Это создать макет с заданным цветом и размером, но не принимающими полей. Я делаю что-то неправильно? Как это сделать? Нужна помощь. Спасибо.

+0

попробуйте эту ссылку http://stackoverflow.com/questions/2481455/set-margins-in- a-linearlayout-программно –

+0

ваш код решает мою проблему, отлично (Y) –

ответ

8

Тип LayoutParams, который вы используете в представлении, должен быть фактически от его родителя.

Итак, если вы добавляете RelativeLayout в LinearLayout, LayoutParams, который вы установили в RelativeLayout, на самом деле должен быть LinearLayout.LayourParams, а не RelativeLayout.LayoutParams.

+0

Thats отлично работает. Спасибо за помощь ... – nilkash

0

В этом случае отцом является LinearLayout. Поэтому вы должны использовать:

TableLayout.LayoutParams layoutParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT); 
     layoutParams.setMargins(20, 20, 20, 20); 
+0

Но это для макета таблицы это применимо для относительной раскладки? – nilkash

+0

Это правильно, TableLayout для LinearLayout :) – Younes

2

Как и другие, layout_margin # - это пространство между # краем родителя и вашим представлением.

  • # заменяет "Left", "Right", "Top" или "Bottom"

Получение/настройка полей работал для меня с:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams(); 
params.topMargin += 20; 
mView.requestLayout(); // important 

Конечно, мой взгляд действительно была ViewGroup, а родитель также был ViewGroup. В большинстве случаев вам следует отбрасывать параметры макета в родительский класс класса LayoutParams (в данном случае это ViewGroup и RelativeLayout)

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

  • Нет связанных вопросов^_^