【问题标题】:how to add the Navigation View using Java Code如何使用 Java 代码添加导航视图
【发布时间】:2020-06-08 22:52:28
【问题描述】:

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

【问题讨论】:

    标签: java android android-layout navigation navigation-drawer


    【解决方案1】:

    你几乎是在正确的道路上,你需要将mNavView重力改为Gravity.START,并使用DrawerLayout.LayoutParamsNavigationView

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

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

    注意:我没有以编程方式创建 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>
    

    这是一个演示

    希望能帮到你

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 2015-06-15
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多