2016-08-29 3 views
0

Я пытаюсь добавить два текстовых файла программно в линейный макет, который находится в макете фрейма. Код XML является:Невозможно добавить динамический вид в линейную компоновку в макете кадра

<FrameLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <LinearLayout 
        android:id="@+id/ll_dynamic" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical" 
        android:layout_marginStart="20dp" 
        android:orientation="vertical" > 

       </LinearLayout> 

       <com.anheuserbusch.hifive.util.TextViewFiftySeven 
        android:id="@+id/txt_no_badges" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:gravity="center" 
        android:visibility="gone" 
        android:textColor="@color/app_default_font_color" 
        android:text="@string/no_badges_yet"/> 

      </FrameLayout> 

ll_dynamic является Linear Layout, в котором я добавляю мнение программно.

Код:

for (int i = 0; i < 10; i++) 
      { 

       TextViewFiftySeven txtIncentiveName = new TextViewFiftySeven(context); 
       TextViewFiftySeven txtDate = new TextViewFiftySeven(context); 


       //for Incentive name 
       LinearLayout.LayoutParams llptextname = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
       llptextname.setMargins(0, 10, 0, 0); // llp.setMargins(left, top, right, bottom); 

       //for date 
       LinearLayout.LayoutParams llptextdate = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
       llptextdate.setMargins(0, 1, 0, 0); // llp.setMargins(left, top, right, bottom); 

       txtIncentiveName.setLayoutParams(llptextname); 
       txtIncentiveName.setTextColor(ContextCompat.getColor(context, R.color.app_default_font_color)); 
       txtIncentiveName.setText("Summer Incentive"); 

       txtDate.setLayoutParams(llptextdate); 
       txtDate.setTextColor(ContextCompat.getColor(context, R.color.app_default_font_color)); 
       txtDate.setText("23.2.2015"); 

       holder.ll_dynamic.addView(txtIncentiveName); 
       holder.ll_dynamic.addView(txtDate); 
       System.out.println("Looping-->"+i); 


       if (i != badgeCount - 1) { 
        LinearLayout.LayoutParams llhorizontalLine = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 2); 
        llhorizontalLine.setMargins(0, 20, 0, 0); // llp.setMargins(left, top, right, bottom); 
        View horizontalLine = new View(context); 
        horizontalLine.setLayoutParams(llhorizontalLine); 
        horizontalLine.setBackgroundColor(ContextCompat.getColor(context, R.color.gray_light)); 
        holder.ll_dynamic.addView(horizontalLine); 
       } 
      } 

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

Итак, почему представления не добавляются динамически к линейной компоновке, если она находится в макете кадра?

ответ

0

Как вы можете прочитать в documentation of the FrameLayout, он предназначен для использования только с одним макетом ребенка.

FrameLayout предназначен для блокировки области на экране, чтобы отобразить один элемент. Как правило, FrameLayout следует использовать для хранения единственного дочернего представления, потому что может быть сложно организовать дочерние представления таким образом, чтобы они масштабировались до разных размеров экрана, если бы дети не перекрывали друг друга.

Однако вы можете контролировать мнения ребенка с помощью layout-gravity

Вы можете, однако, добавить несколько детей в FrameLayout и контролировать их положение в FrameLayout, назначая тяжести каждого ребенка, с помощью андроида: Атрибут layout_gravity.

Так что в вашем случае вы можете добавить атрибут layout-gravity в макете XML под TextViewFiftySeven и каждый раз, когда вы добавляете вид программно.

+0

Я добавляю вид внутри линейного макета, который находится в макете кадра ... не сам кадр рамки – kgandroid

+0

Ах да, я вижу. Тем не менее макет-гравитация может работать. Или попробуйте удалить TextViewFiftySeven из xml и проверить, работает ли LinearLayout так, как предполагалось. Если нет, вы уверены, что вам нужно использовать FrameLayout? Существует много других макетов, которые могут дать вам желаемые результаты. – miva2

+0

Да, я выполнил свою задачу, удалив фрейм-макет ... но логически я не смог найти никакой ошибки при добавлении к линейному макету, ЧТО ОСТАЕТСЯ В РАМКАХ LAMEOUT. Но не знаю, почему этого не происходит. – kgandroid

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