как добавить навигационное представление с помощью Java кода - PullRequest
1 голос
/ 25 февраля 2020

Я использую androidx для разработки и пытаюсь использовать NavigationView, и поскольку findViewById обычно не работает, когда вам это нужно, я пытаюсь сделать все в Java Коде , Итак, я пытаюсь заставить это NavigationView появиться, но, похоже, чего-то не хватает:

public class MainActivity extends AppCompatActivity {

Activity_Animation001_Layout animation001_layout;
Animation_Activity002 animLay2;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    DrawerLayout mDrawer = new DrawerLayout(this);
    mDrawer.setLayoutParams(new DrawerLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    LinearLayout mLinearLayout = new LinearLayout(this);
    mLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    mLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
    TextView mTextView = new TextView(this);
    mTextView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    mTextView.setText("something");
    mTextView.setTextSize(30);
    mLinearLayout.addView(mTextView);



    NavigationView mNavView = new NavigationView(this);
    NavigationView.LayoutParams mNavLayParam = new NavigationView.LayoutParams(250, ViewGroup.LayoutParams.MATCH_PARENT);
    mNavLayParam.gravity= Gravity.RIGHT;
    mNavView.setLayoutParams(mNavLayParam);


    mDrawer.addView(mLinearLayout);
    mDrawer.addView(mNavView);

    //        animLay2 = new Animation_Activity002(this);
    setContentView(mDrawer);

}

Drawer, LinearLayout и TextView, кажется, появляются, но Я заставляю NavigationView появляться, когда я провожу пальцем влево от правого края экрана. Как мы должны добавлять и создавать экземпляры Views (или NavigationView в данном случае)?

1 Ответ

1 голос
/ 14 марта 2020

Вы почти на правильном пути, вам нужно изменить гравитацию 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, которое поможет вам

...