2015-09-29 2 views
1

Кажется, что это должно быть легко, но пока не повезло. Я установил основной макет моей деятельности, а затем в зависимости от того, какая кнопка нажата. Мне нужно добавить конкретный макет к концу текущего основного макета.Как программно добавить макет к концу текущего макета?

Основная деятельность:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //live_video_layout is a vertical LinearLayout 
    setContentView(R.layout.live_video_layout); 

    //Psuedo code for clarity; these layouts are ScrollViews that will sit under live_video_layout seen above 
    if(button1 is clicked) 
     {add R.id.first_layout under live_video_layout} 

    else if(button2 is clicked) 
     {add R.id.second_layout under live_video_layout 
} 

Любое руководство здесь было бы весьма признателен, я все из идей.

ответ

1

Вы можете подготовить два Макеты в файле XML, первый для просмотров видео, и второе для динамических макетов:

main_activity.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/live_video_container"> 

     <!-- include your live_video_layout.xml or directly add your views--> 

    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/dynamic_layouts_container"> 
     <!-- here we'll add layouts from java code depending on buttons click --> 
    </LinearLayout> 
</LinearLayout> 

Тогда в вашей деятельности :

private LinearLayout mDynamicLayoutsContainer; 
    private LayoutInflater mInflater; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main_activity); 

     mInflater = LayoutInflater.from(context); 
     mDynamicLayoutsContainer = (LinearLayout) findViewById(R.id.dynamic_layouts_container); 

     if(button1 is clicked){ 

      View firstLayout = mInflater.inflate(R.layout.first_layout , null, false); 
      mDynamicLayoutsContainer.addView(firstLayout); 

     }else if(button2 is clicked){ 

      View secondLayout = mInflater.inflate(R.layout.second_layout , null, false); 
      mDynamicLayoutsContainer.addView(secondLayout); 

     } 
    } 
+0

Огромное спасибо Rami. Последующий вопрос: какой был бы правильный способ переключения между firstLayout и secondLayout, чтобы только один был видимым за раз? Сейчас я делаю removeAllViews() перед добавлением нового представления в DynamicContainer. – shoota

+0

Добро пожаловать! Если вид существует (после первого раздувания), вы можете играть с видимостью View (GONE/VISIBLE) вместо того, чтобы удалять и добавлять его снова. – Rami

+0

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

0

Вам нужен третий макет как родительский. Вы помещаете тогда R.layout.live_video_layout и новый в этом третьем макете.

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