21

我尝试了新的 android 支持设计库中的 navigationView。我想要一个动态的标题视图。基本上,我的 headerview 将显示类似于当天报价的内容。我有大约 10 个引号,我想随机选择一个引号并显示在 headerView 的文本视图中。我还想为 headerView 添加 onClick 方法。

现在,我看不到以编程方式更改 headerview 布局的任何可能性。有什么建议可以实施吗?

4

8 回答 8

25

首先创建像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);

而已...

于 2015-06-05T06:47:32.160 回答
15

在新的支持库更新(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

于 2015-11-29T17:28:03.210 回答
6
TextView txt2;
txt2 = (TextView) navigationView.inflateHeaderView(R.layout.nav_header_main).findViewById(R.id.textView2);
txt2.setText("wow! It works like a charm");
于 2015-11-10T19:18:18.947 回答
2

在此处输入图像描述

创建标题布局在里面获取文本视图,

<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();
        }
    }
于 2015-06-04T05:01:39.533 回答
1

您可以通过调用addHeaderView您的 navigationView 以编程方式添加您的自定义标题,或者使用app:headerLayout="@layout/myheader".

于 2015-06-03T15:30:44.060 回答
1

您可以使用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 在说同样的话,但不是很清楚。

于 2015-07-21T05:16:40.263 回答
0

我是这个链接会帮助你

更棘手的问题

final NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);

View headView = navigationView.getHeaderView(0);

((TextView) headView.findViewById(R.id.nav_title)).setText("New title");
于 2015-12-01T08:29:49.970 回答
0

首先你必须得到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");

于 2015-12-27T23:48:21.637 回答