Вы почти на правильном пути, вам нужно изменить гравитацию mNavView на Gravity.START и использовать DrawerLayout.LayoutParams
для NavigationView
,
Также вам необходимо преобразовать NavigationView
от dp до pixel перед настройкой его в качестве параметра Layout.
Ниже приведен полнофункциональный пример для программного создания DrawerLayout
и NavigationView
Примечание : я не сделал Не создавайте заголовок и меню макета NavigationView
программно, чтобы упростить задачу.
Поведение
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Building Main layout
LinearLayout mainLayout = new LinearLayout(this);
mainLayout.setGravity(Gravity.CENTER);
mainLayout.setOrientation(LinearLayout.HORIZONTAL);
TextView textView = new TextView(this);
textView.setText("Some text In Main Layout");
textView.setTextSize(30);
mainLayout.addView(textView);
mainLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
// Building NavigationView layout
NavigationView navView = new NavigationView(this);
DrawerLayout.LayoutParams navParams = new DrawerLayout.LayoutParams(
convertDpToPx(250), LinearLayout.LayoutParams.MATCH_PARENT);
navParams.gravity = Gravity.START;
navView.setLayoutParams(navParams);
// Navigation View header
View child = getLayoutInflater().inflate(R.layout.nav_header_layout, null);
navView.addHeaderView(child);
// Navigation View menu
navView.inflateMenu(R.menu.nav_menu);
// Building DrawerLayout
DrawerLayout drawerLayout = new DrawerLayout(this);
// adding main layout to the DrawerLayout
drawerLayout.addView(mainLayout);
// adding NavigationView to the DrawerLayout
drawerLayout.addView(navView);
// Set activity layout to the DrawerLayout
setContentView(drawerLayout);
}
/**
* Convert from dp to Pixels
*/
private int convertDpToPx(int dp) {
return Math.round(dp * (getResources().getDisplayMetrics().xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
}
Макет
Расположение заголовка NavigationView (nav_header_layout. xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="@color/colorPrimary"
android:gravity="bottom"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingTop="16dp"
android:paddingRight="16dp"
android:paddingBottom="16dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="8dp"
app:srcCompat="@mipmap/ic_launcher_round" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:text="Header Title"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Header Subtitle" />
</LinearLayout>
Меню NavigationView (nav_menu. xml)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_menu_camera"
android:title="Home" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow" />
</group>
</menu>
Вот демо
Wi sh, которое поможет вам