我尝试了新的 android 支持设计库中的 navigationView。我想要一个动态的标题视图。基本上,我的 headerview 将显示类似于当天报价的内容。我有大约 10 个引号,我想随机选择一个引号并显示在 headerView 的文本视图中。我还想为 headerView 添加 onClick 方法。
现在,我看不到以编程方式更改 headerview 布局的任何可能性。有什么建议可以实施吗?
我尝试了新的 android 支持设计库中的 navigationView。我想要一个动态的标题视图。基本上,我的 headerview 将显示类似于当天报价的内容。我有大约 10 个引号,我想随机选择一个引号并显示在 headerView 的文本视图中。我还想为 headerView 添加 onClick 方法。
现在,我看不到以编程方式更改 headerview 布局的任何可能性。有什么建议可以实施吗?
首先创建像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)之后,
你可以这样做——
app:headerLayout="@layout/drawer_header"
在里面的 NavigationView中添加 headerview 。
然后,您可以通过以下方式访问它,
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");
创建标题布局在里面获取文本视图,
<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");
onSelectText
在您的活动中创建方法
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();
}
}
您可以通过调用addHeaderView
您的 navigationView 以编程方式添加您的自定义标题,或者使用app:headerLayout="@layout/myheader"
.
您可以使用findViewById()
来访问 NavigationView 中的标题元素。即使您已经使用 headerLayout 属性初始化了标头,这也有效,例如app:headerLayout="@layout/drawer_header"
. 然后,您可以动态修改标头,而无需膨胀或添加新标头。
@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;
}
...
抽屉头.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 text = (TextView) header.findViewById(R.id.textView);
最后,您可以设置要显示的文本。
text.setText("Hello there");