Расположение Android с навигационным ящиком

Я новичок в android и разрабатываю приложение для практики, используя навигационный ящик. Я хочу, чтобы основной вид был пейджером с 3 вкладками, и ящик навигации мог отображаться, когда пользователь скользит слева направо.

Вот мой код Main.xml :

<android.support.v4.widget.DrawerLayout 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:id="@+id/main_layout" tools:context=".ExampleMain" > <!-- Main Content place holder --> <FrameLayout android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"/> <!-- Left Drawer main style --> <ListView style="@style/HighlightColor" android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </android.support.v4.widget.DrawerLayout> 

В котором <Framelayout> должен содержать мое фактическое основное представление, определенное в другом файле xml Main_Content.xml

 <andriod.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_content_pager" android:layout_width="match_parent" android:layout_height="match_parent"/> 

Я не уверен, как поместить Viewpager в Main_Content.xml в раздел <FrameLayout> в Main.xml . Укажите пример кода или указатель. спасибо

Технически вы не должны использовать вкладки ActionBar с помощью NavigationDrawer:

«Вы не должны использовать навигационные ящики с вкладками панели действий. Если вы нацелены на пользовательский интерфейс, подобный пользовательскому интерфейсу Google Play Музыки, вы должны реализовать вкладки вручную (и остерегаться того, как это выглядит на планшете, – вы не хотите, чтобы полные А также убедитесь, что вы проверили структуру в сеансе Android App Design с помощью ввода-вывода Google в этом году для подробного прогона различных шаблонов интерфейса, доступных для раскрытия иерархии приложений ». – Роман Нурик, разработчик Android Advocate @ Google

Использование FragmentTransaction в Activity которое раздувает Main.xml :

 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); ExampleFragment fragment = new ExampleFragment(); fragmentTransaction.add(R.id.main_content, fragment); fragmentTransaction.commit(); 

ExampleFragment будет содержать метод onCreateView() который будет раздувать ваш XML:

 @Override public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) { return layoutInflater.inflate(R.layout.Main_Content, container, false); } 

Вы можете использовать его следующим образом:

 <android.support.v4.widget.DrawerLayout 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:id="@+id/main_layout" tools:context=".ExampleMain" > <!-- Main Content place holder --> <FrameLayout android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <andriod.support.v4.view.ViewPager android:id="@+id/main_content_pager" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout> <!-- Left Drawer main style --> <ListView style="@style/HighlightColor" android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </android.support.v4.widget.DrawerLayout> 

NavigationDrawer в соответствии с дизайном сконструирован таким образом, что он будет отображаться, если вы попытаетесь проскочить с поля 20dp левой (или правой) части экрана.

РЕДАКТИРОВАТЬ 1: если вы хотите поместить представления в отдельные xmls, вы можете очень хорошо это сделать и добавить представления во время выполнения.

Напишите еще один xmls: view_pager.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> 

main_layout.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout 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:id="@+id/main_layout" > <!-- Main Content place holder --> <FrameLayout android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"/> <!-- Left Drawer main style --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </android.support.v4.widget.DrawerLayout> 

Затем в onCreate вашей деятельности вы можете использовать следующий код:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); ViewPage pager = (ViewPager) LayoutInflater.from(this).inflate(R.layout.view_pager, null, false); ViewGroup container = (ViewGroup) findViewById(R.id.main_content); container.addView(pager); } 

Я надеюсь, что это помогает!

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

Если его статический:

 <FrameLayout android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/your_layout"/> </FrameLayout> 

Но поскольку вы используете навигационный чертеж, я надеюсь, что вам нужно динамическое. Итак, из кода, что вам нужно сделать, это:

 private void onNavigationClicked(){ View v=LayoutInflater.from(this).inflate(R.layout.your_layout,null); FrameLayout fl = (FrameLayout)findViewById(R.layout.main_content); fl.removeAllViews(); fl.addView(v); fl.invalidate(); }