20

Ich habe versucht, die NavigationView aus der neuen Android-Support-Design-Bibliothek. Ich möchte eine dynamische Headeransicht haben. Im Grunde wird mein Headerview so etwas wie Zitat des Tages zeigen. Ich habe ungefähr 10 Zitate und ich möchte nach dem Zufallsprinzip ein Zitat auswählen und in einer Textansicht in der Kopfzeile anzeigen. Ich möchte auch onClick Methode für die HeaderView hinzufügen.Anpassen von NavigationView - Hinzufügen von dynamischen HeaderView, Android-Support-Design-Bibliothek

Momentan sehe ich keine Möglichkeiten, das Headerview Layout programmatisch zu ändern. Irgendwelche Vorschläge, um das zu implementieren?

+0

bessere Lösung in diesem Beitrag: http://stackoverflow.com/questions/31241683/are-there-any-way-to-control-view-insde-navigationview-header/33358934#33358934 – GFPF

Antwort

24

erster Kopf XML wie lay_header.xml

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

auf Ihrer Java-Datei aufblasen diese über Header in einem Textview erstellen. wie

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

Nun fügen Sie es als HeaderView

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

Thats it ...

+0

Bessere Lösung in diesem Beitrag: http://stackoverflow.com/questions/31241683/are-there-any-way-zu-Kontrolle-Ansicht-insde-navigationview-header/33358934 # 33358934 – GFPF

1

Sie können Ihre benutzerdefinierte Kopfzeile programmgesteuert hinzufügen, indem Sie in Ihrer navigationView addHeaderView aufrufen oder sie in der Layoutdatei unter Verwendung von app:headerLayout="@layout/myheader" definieren.

+0

bessere Lösung in diesem Beitrag: http://stackoverflow.com/questions/31241683/are-there-any-way-to-control-view-insind-navigationview-header/33358934#33358934 – GFPF

2

enter image description here

erstellen Header Layout innerhalb Textansicht nehmen,

<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="[email protected]" 
       android:textColor="@color/body_text_2_inverse" 
       android:textSize="@dimen/text_size_medium" /> 

in onCreate,

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

Methode erstellen onSelectText in Ihrer Tätigkeit

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(); 
     } 
    } 
+0

Bessere Lösung in diesem Beitrag: http: //stackoverflow.com/questions/31241683/are-there-any-way-to-control-view-insinda-navigationview-header/33358934#33358934 – GFPF

1

Sie findViewById() verwenden können, um Header-Elemente innerhalb des NavigationView zugreifen. Dies funktioniert auch, wenn Sie den Header mit der Eigenschaft headerLayout initialisiert haben, z. app:headerLayout="@layout/drawer_header". Sie können dann den Header dynamisch ändern, ohne dass Sie einen neuen Header hinzufügen oder hinzufügen müssen.

@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"> 
... 

denke ich Dhawal die gleiche Sache zu sagen, aber es war nicht super klar.

+0

Bessere Lösung in diesem Beitrag: http://stackoverflow.com/questions/31241683/are-there-any-way-to-control-view-insind-navigationview-header/33358934#33358934 – GFPF

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

Nach dem neuen Support-Bibliothek-Update (23.1.1),

Sie könnten dies tun -

Fügen Sie die headerview im app:headerLayout="@layout/drawer_header" innerhalb NavigationView.

Dann können Sie es zugreifen,

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

oder wenn Sie mehrere Header

navigationView.getHeaderCount() 

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

0

Mein sein diesen Link gelangen Sie

helfen

slimier question

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

View headView = navigationView.getHeaderView(0); 

((TextView) headView.findViewById(R.id.nav_title)).setText("New title"); 
0

Zuerst muss man navigationView aufrufen. NavigationView navigationView =(NavigationView)findViewById(R.id.nav_view);

Dann Kopfzeile. View header = navigationView.getHeaderView(0) Dann TextView. TextView text = (TextView) header.findViewById(R.id.textView); Und schließlich können Sie den Text festlegen, den Sie anzeigen möchten. text.setText("Hello there");

Verwandte Themen