11

Tôi muốn làm nổi bật biểu tượng ngăn kéo trong số Toolbar của mình (làm việc trên hướng dẫn). Vì điều đó, tôi cần vị trí của nó. Làm cách nào để tôi có được tham chiếu đến chế độ xem biểu tượng điều hướng (hamburger) của trình thu hút?Nhận biểu tượng điều hướng của Thanh công cụ xem tham chiếu

+1

'((ViewGroup) yourtoolbar) .get (0);' nó có thể là '0' hoặc' 1' nhưng im chắc chắn zero của nó, btw này là những gì bạn muốn? nó sẽ trả về một 'View' và' View' là biểu tượng ngăn kéo của bạn có thể là một 'imageButton' – Elltz

+0

Bạn có ý nghĩa gì" làm nổi bật "biểu tượng ngăn kéo? –

+0

Bạn có chắc chắn bạn cần chế độ xem để làm nổi bật không? bạn có thể có được drawable được sử dụng cho các biểu tượng ví dụ. –

Trả lời

16

Bạn có thể sử dụng mô tả nội dung của quan điểm và sau đó sử dụng findViewWithText() phương pháp để có được cái nhìn tham khảo

public static View getToolbarNavigationIcon(Toolbar toolbar){ 
     //check if contentDescription previously was set 
     boolean hadContentDescription = TextUtils.isEmpty(toolbar.getNavigationContentDescription()); 
     String contentDescription = !hadContentDescription ? toolbar.getNavigationContentDescription() : "navigationIcon"; 
     toolbar.setNavigationContentDescription(contentDescription); 
     ArrayList<View> potentialViews = new ArrayList<View>(); 
     //find the view based on it's content description, set programatically or with android:contentDescription 
     toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 
     //Nav icon is always instantiated at this point because calling setNavigationContentDescription ensures its existence 
     View navIcon = null; 
     if(potentialViews.size() > 0){ 
      navIcon = potentialViews.get(0); //navigation icon is ImageButton 
     } 
     //Clear content description if not previously present 
     if(hadContentDescription) 
      toolbar.setNavigationContentDescription(null); 
     return navIcon; 
    } 

More

+7

Thú vị, nhưng tại sao chúng ta phải làm điều này. Tại sao không có cái gì đó như 'toolbar.getNavigationIconView()' – Singed

6

Sau khi nhìn vào chế độ xem con của Thanh công cụ trong chế độ gỡ lỗi, tôi thấy biểu tượng ngăn kéo có thể được tìm thấy ở đó, dưới dạng ImageButton. (Cảm ơn Elltz)

tôi sử dụng một thanh công cụ với bố trí tùy chỉnh xml với 2 trẻ em (LinearLayout và ImageView), do Thanh công cụ của tôi đã có 4 trẻ em cuối cùng, với các vị trí:

[0] LinearLayout(from custom xml) 
[1] ImageView(from custom xml) 
[2] ImageButton(drawer icon) 
[3] ActionMenuView(menu icon) 

Biết được điều này, tôi hiện có thể sử dụng:

View drawerIcon = toolbar.getChildAt(2); 

để nhận tham chiếu đến biểu tượng trình đơn ngăn kéo. Trong trường hợp của tôi, vị trí là 2. Vị trí này phải bằng số lần xem của con trong bố cục thanh công cụ tùy chỉnh của bạn.

Nếu ai đó tìm thấy giải pháp tốt hơn, vui lòng cho tôi biết.

4

Nếu bạn chỉ muốn để có được những Drawable đại diện cho biểu tượng trên thanh công cụ điều hướng, bạn có thể làm điều này:

Drawable d = mToolbar.getNavigationIcon(); 

Bạn có thể tham chiếu đến ImageButton được sử dụng cho biểu tượng điều hướng olbar bằng cách có một phương pháp như thế này:

public ImageButton getToolbarNavigationButton() { 
    int size = mToolbar.getChildCount(); 
    for (int i = 0; i < size; i++) { 
     View child = mToolbar.getChildAt(i); 
     if (child instanceof ImageButton) { 
      ImageButton btn = (ImageButton) child; 
      if (btn.getDrawable() == mToolbar.getNavigationIcon()) { 
       return btn; 
      } 
     } 
    } 
    return null; 
} 
Các vấn đề liên quan