如何使用 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);
}
Drawer
、LinearLayout
和 TextView
似乎出现了,但我让 NavigationView
在我从屏幕右边缘向左滑动时出现.我们应该如何添加和实例化视图(或本例中的 NavigationView
)?
您几乎走对了,您需要将 mNavView gravity 更改为 Gravity.START,并将 DrawerLayout.LayoutParams
用于 NavigationView
,
此外,您还需要将 NavigationView
从 dp 转换为像素,然后再将其设置为布局参数。
下面是以编程方式创建 DrawerLayout
和 NavigationView
的完整功能示例
注意:我没有以编程方式创建 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>
这里有演示
希望能帮到你
我正在使用 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
在我从屏幕右边缘向左滑动时出现.我们应该如何添加和实例化视图(或本例中的 NavigationView
)?
您几乎走对了,您需要将 mNavView gravity 更改为 Gravity.START,并将 DrawerLayout.LayoutParams
用于 NavigationView
,
此外,您还需要将 NavigationView
从 dp 转换为像素,然后再将其设置为布局参数。
下面是以编程方式创建 DrawerLayout
和 NavigationView
的完整功能示例
注意:我没有以编程方式创建 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>
这里有演示
希望能帮到你