如何使用 Java 代码添加导航视图

how to add the Navigation View using Java Code

我正在使用 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);

}

DrawerLinearLayoutTextView 似乎出现了,但我让 NavigationView 在我从屏幕右边缘向左滑动时出现.我们应该如何添加和实例化视图(或本例中的 NavigationView)?

您几乎走对了,您需要将 mNavView gravity 更改为 Gravity.START,并将 DrawerLayout.LayoutParams 用于 NavigationView

此外,您还需要将 NavigationView 从 dp 转换为像素,然后再将其设置为布局参数。

下面是以编程方式创建 DrawerLayoutNavigationView 的完整功能示例

注意:我没有以编程方式创建 NavigationView 布局 header 和菜单以使事情更简单。

行为

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 Header 布局(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>

这里有演示

希望能帮到你