2013-05-23 2 views
-1

У меня есть один основной файл макета, который стал чрезмерно большим и становится довольно трудно читать. В настоящее время я просто использую setContentView (int layoutResID) для раздувания всего макета.Использование addContentView для разбиения моего большого файла макета на несколько файлов меньшего размера?

Недавно я обнаружил метод addContentView (View view, ViewGroup.LayoutParams params), и я хочу, чтобы некоторые данные поступали от других, прежде чем тратить время на значительные изменения.

Мой главный файл макета выглядит примерно так в данный момент:

frame layout 
    relative layout 
     ... 
    linear layout a 
     ... 
    linear layout b 
     ... 
    linear layout c 
     ... 
    linear layout d 
     ... 
    linear layout e 
     ... 
/frame layout 

Если некоторые из линейных макетов являются очень сложными.

Мой вопрос заключается в том, что если я разделяю каждый из сложных линейных макетов в свои собственные XML-файлы, а затем последовательно раздуваю каждый из них с помощью addContentView, получится ли я в том же поведении, что и моя текущая реализация с помощью setContentView?

Моей главной мотивацией является то, что каждый отдельный файл макета содержит только один из сложных линейных макетов, что упрощает чтение XML-файлов.

+1

Ваша структура звучит необычно странно. При этом я бы рекомендовал '' над 'addContentView()': http://developer.android.com/training/improving-layouts/reusing-layouts.html – CommonsWare

+0

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

+0

Как я вижу, вы используете несколько линейных макетов, вместо этого вы можете использовать собственный список ListView. –

ответ

0

Вы также можете раздуть эти разные макеты, используя макет Inflater. и динамически добавлять эти завышенные виды в структуру фрейма. Например,

View v; 
if(condition){ 
    v=inflater.inflate(R.layout.a) 
} 
else if(condition){ 
    v=inflater.inflate(R.layout.b) 
} 

FrameLayout f= findviewbyId(R.id.frameLayout) 
f.addView(v); 
+0

Спасибо newBie, это еще один хороший совет. Вчера вечером я использовал технику , и это сработало красиво. –

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