自定义NavigationView – 添加dynamicheaderView,Android支持devise库

我试图从新的android支持devise库navigationView。 我想要一个dynamic的headerview。 基本上,我的headerview会显示一些像今天的报价。 我喜欢10左右的引号,我想随机select一个报价,并显示在headerView的文本视图。 我也想为headerView添加onClick方法。

现在,我没有看到以编程方式更改headerview布局的任何可能性。 任何build议来实施这个?

Solutions Collecting From Web of "自定义NavigationView – 添加dynamicheaderView,Android支持devise库"

首先创build像lay_header.xml这样的头XML

<TextView android:id="@+id/tvThought" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

你的java文件在TextView中膨胀这个上面的头文件。 喜欢

 TextView headerView = (TextView) LayoutInflater.from(this).inflate(R.layout.lay_header, null); headerView.setText("Your_thoght"); 

现在将其添加为HeaderView

 navView = (NavigationView) findViewById(R.id.navView); navView.addHeaderView(headerView); 

而已…

在新的支持库更新(23.1.1)之后,

你可以做到这一点 –

在NavigationView中添加headerview在app:headerLayout="@layout/drawer_header"

那么,你可以通过访问它,

 View header = navigationView.getHeaderView(0); TextView text = (TextView) header.findViewById(R.id.textView); 

或者如果您有多个标题

 navigationView.getHeaderCount() 

参考: https : //code.google.com/p/android/issues/detail? id = 190226# c31

 TextView txt2; txt2 = (TextView) navigationView.inflateHeaderView(R.layout.nav_header_main).findViewById(R.id.textView2); txt2.setText("wow! It works like a charm"); 

您可以通过在navigationView上调用addHeaderView以编程方式添加自定义标题,或者使用app:headerLayout="@layout/myheader"在布局文件中定义它。

在这里输入图像说明

创build页眉布局采取文本视图里面,

 <TextView android:id="@+id/profile_email_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@id/profile_image" android:layout_alignParentBottom="true" android:layout_toLeftOf="@id/expand_account_box_indicator" android:ellipsize="end" android:maxLines="1" android:paddingBottom="16dp" android:singleLine="true" android:clickable="true" android:onClick="onSelectText" android:text="dhaval0122@gmail.com" android:textColor="@color/body_text_2_inverse" android:textSize="@dimen/text_size_medium" /> 

在onCreate,

 ((TextView) findViewById(R.id.profile_email_text)).setText("test"); 

在您的活动中创buildonSelectText方法

 public void onSelectText(View v){ if(v.getId() == R.id.profile_email_text){ Snackbar .make(fab, "clicked on sub title", Snackbar.LENGTH_LONG) //.setAction(R.string.snackbar_action, myOnClickListener) .show(); drawer_layout.closeDrawers(); } } 

您可以使用findViewById()来访问NavigationView中的标题元素。 即使你已经使用headerLayout属性来初始化标题,例如app:headerLayout="@layout/drawer_header" 。 然后,您可以dynamic修改标题,而不需要膨胀或添加新的标题。

 @Override public boolean onNavigationItemSelected(final MenuItem menuItem) { ... if(mNavItemId == R.id.drawer_item_1) { View headerView = mNavigationView.findViewById(R.id.drawer_header_root); // Test modifying the size of the header root element (FrameLayout) // when the first menu item is clicked. LinearLayout.LayoutParams p = (LinearLayout.LayoutParams) headerView.getLayoutParams(); p.height = p.height == 700 ? 400 : 700; headerView.setLayoutParams(p); return true; } ... 

drawer_header.xml

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="196dp" android:background="@color/drawer_header_bg" android:orientation="vertical" android:id="@+id/drawer_header_root"> ... 

我觉得Dhawal说的是同样的事情,但并不是很清楚。

我是这个链接将帮助你

更简单的问题

 final NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view); View headView = navigationView.getHeaderView(0); ((TextView) headView.findViewById(R.id.nav_title)).setText("New title"); 

首先你必须得到navigationView。 NavigationView navigationView =(NavigationView)findViewById(R.id.nav_view);

然后头。 View header = navigationView.getHeaderView(0)然后textView。 TextView text = (TextView) header.findViewById(R.id.textView); 最后你可以设置你想要显示的文字。 text.setText("Hello there");