web-dev-qa-db-ja.com

NavigationViewヘッダー内のビューを制御する方法はありますか?

タイトルが言うように、NavigationViewヘッダー内のビューを制御する方法があるかどうか知りたいですか? (ヘッダーの追加または削除を除く。)

例:ヘッダーに、ユーザーのアバターがあります。デフォルトでは、ゲストの画像が表示されますが、ユーザーがログインすると、実際のアバターが表示されます。

どうすればこれを達成できますか?

25
Lạng Hoàng

サポートライブラリをバージョン23.1.1以降に更新した後、

あなたはこれを行うことができます-

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

57
RmK

コメントは回答としてお受けできませんので。だから、私はMoinkhanの答えをここに再投稿します:

まず、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);

それでおしまい...

次の場所でも確認できます。 NavigationViewのカスタマイズ-動的headerViewの追加、Androidサポートデザインライブラリ

どうもありがとう!繰り返しになりますが、ユーザーがコメントを回答として受け入れることができる関数が必要です!

7
Lạng Hoàng

これを行う別の方法は、以下のように、NavigationViewオブジェクトのメソッド「inflateHeaderView()」を使用することです(「setContentView()」を使用した後):

View headerLayout = navigationView.inflateHeaderView(R.layout.yours_nav_header_layout);

この後、「headerLayout」を使用して、次のようにヘッダーレイアウトのカスタムビューにアクセスできます。

View cutomView = (TextView) headerLayout.findViewById(R.id.lay_sign_in);

私の場合、ButterKnifeフレームワークを使用して、次のようにView "navigationView"を挿入しています。

@Bind(R.id.nav_view) NavigationView navigationView;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }
1
GFPF

単にあなたの活動であなたの見解を見つけてみてください:

tvUserName = (TextView) findViewById(R.id.tv_username);

わたしにはできる。私のヘッダーのレイアウトは:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="192dp"
    Android:background="?attr/colorPrimaryDark"
    Android:padding="16dp"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark"
    Android:orientation="vertical"
    Android:gravity="bottom">

    <TextView
        Android:id="@+id/tv_username"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>

</LinearLayout>

アクティビティレイアウトのNavigationViewは次のとおりです。

<Android.support.design.widget.NavigationView
    Android:id="@+id/nav_view"
    Android:layout_height="match_parent"
    Android:layout_width="wrap_content"
    Android:layout_gravity="start"
    Android:fitsSystemWindows="true"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/menu_drawer"/>

ところで、レイアウトパラメータが提供されていないLinearLayoutを膨らませているときに問題が発生しました。

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

それが役に立てば幸い。

0
Jiawei Dai