0

У меня есть некоторые проблемы с динамическим добавлением linearlayout. Он добавляется в верхней части экрана, накладывает другие linearlayout.Linearlayout overlay another linearlayout

Здесь XML, код и результаты.

XML:

<TextView 
    android:id="@+id/top_km" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:background="#888" 
    android:gravity="top" 
    android:textColor="#fff" 
    android:textSize="30dip" 
    android:layout_centerHorizontal="true"/> 

<RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/top_km" 
     android:id="@id/textLayout"> 

</RelativeLayout> 

Код:

myLayout = (RelativeLayout) page.findViewById(R.id.textLayout); 
LinearLayout linLayout = new LinearLayout(this); 
linLayout.setOrientation(LinearLayout.VERTICAL); 
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
myLayout.addView(linLayout); 
LinearLayout hozLayout = new LinearLayout(this); 
hozLayout.setOrientation(LinearLayout.HORIZONTAL); 
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
myLayout.addView(hozLayout); 

Результаты: enter link description here

Благодарности

ответ

1

Это потому, что вы используете RealativeLayout для правильного добавления использования 1. RelativeLayout.LayoutParams прп LayoutParams 2. В LayoutParams используйте поле ниже

Пример:

RelativeLayout rl=new RelativeLayout(this); 
LinearLayout ll1=new LinearLayout(this); 
TextView tx1=new TextView(this); 
tx1.setText("Test1"); 
ll1.addView(tx1); 
rl.addView(ll1); 
LinearLayout ll2=new LinearLayout(this); 
TextView tx2=new TextView(this); 
tx2.setText("Test1"); 
ll2.addView(tx1); 
rl.addView(ll2); 
RelativeLayout.LayoutParams lp2=(LayoutParams) ll2.getLayoutParams(); 

И затем использовать lp2.addRule

Здесь некоторая помощь:

Параметры глагол Один из глаголов, определенных RelativeLayout, например ALIGN_WITH_PARENT_LEFT. anchor Идентификатор другого представления для использования в качестве привязки или логическое значение (представленное как TRUE) для true или 0 для false). Для глаголов, которые не относятся к другому брату (например, ALIGN_WITH_PARENT_BOTTOM), просто используйте -1.

+0

Я пытался сделать это: RelativeLayout.LayoutParams PARAMS = новые RelativeLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.addRule (RelativeLayout.ALIGN_BOTTOM, id_value_layout-1); hozLayout.setLayoutParams (params); Но ситуация такая же. – Postnik

0

Возможно, вам будет проще добавить его в файл XML с помощью android:visibility="GONE", а затем в коде просто показать его (View.VISIBLE) или скрыть его (View.GONE).

+0

Нет ((я не знаю число LinearLayout. Может быть 10 или может быть 100. – Postnik

+0

Итак, почему бы не использовать ListView, а ваши макеты в качестве строк проще кода. В любом случае, если вы все еще хотите сделать это программно (что обескуражено, см. здесь http: // stackoverflow.com/questions/9827819/best-practices-layouts-on-android-programtic-vs-xml), тогда сделайте это, как говорит Кен Вольф, с LinearLayout в качестве контейнера –

1

Не используйте RelativeLayout в качестве вашего держателя. Используйте вместо этого LinearLayout с orientation="vertical".

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/top_km" 
    android:orientation="vertical" 
    android:id="@id/textLayout" /> 

затем в коде

myLayout = (LinearLayout) page.findViewById(R.id.textLayout);

следуют

// rest of your code 
Смежные вопросы