Nút "đóng" vật liệu trong Thanh công cụ thay vì Quay lại


81

Tôi đã thấy trong Ứng dụng Hộp thư đến của Google, soạn một email mới, trên thanh công cụ thay vì nút quay lại (mũi tên) nó có nút "đóng" (xem hình).

Làm thế nào tôi có thể đạt được điều này?

nút đóng soạn hộp thư đến

Câu trả lời:


108

Sử dụng  

this.getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_close);

 

để đạt được điều này.

Bạn có thể tạo biểu tượng đóng của riêng mình hoặc lấy từ bộ biểu tượng material design trên GitHub. Ngoài ra, thêm dòng này trước dòng trên để đóng chức năng như mũi tên quay lại.

this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Nó không hoạt động. Nó không thay thế mũi tên quay lại bằng biểu tượng mới, cả hai đều xuất hiện. Hơn nữa, với giải pháp này, biểu tượng không nhận thuộc tính "colorPrimaryDark".
Marta Rodriguez

Nó hoạt động nhưng không phải là chính xác những gì tôi muốn. Tôi dự kiến ​​sẽ hoạt động như biểu tượng quay lại, với "colorPrimaryDark". Nhưng có vẻ như biểu tượng "đóng" không phải là một phần của SDK. Cảm ơn @AlokNair!
Marta Rodriguez

1
Hoạt động tốt khi sử dụng ActionBarActivity và PARENT được chỉ định trong tệp kê khai. +1 cho câu trả lời. Cảm ơn bạn đời!
PsyGik

7
Tôi thấy rằng tôi phải gọi setDisplayHomeAsUpEnabled trước SetHomeAsUpIndicator nếu không biểu tượng sẽ không được thay thế.
CodeChimp

1
và làm thế nào để thay đổi trở lại ban đầu?
Michel Feinstein

22

Tất nhiên, bạn cần xác định cha mẹ trong tệp kê khai, sau đó ghi đè onSupportNavigationUp () nếu sử dụng thanh ứng dụng hỗ trợ. Ngoài ra, hãy truy cập trang web hữu ích này để xem các gói biểu tượng: https://www.google.com/design/icons/

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.yourAwesomeLayout);

    setupToolBar();    
}

private void setupToolBar() {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    if (toolbar == null) return;

    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
}

@Override
public boolean onSupportNavigateUp() {
    finish(); // close this activity as oppose to navigating up

    return false;
}

nhập mô tả hình ảnh ở đây


3
bất kỳ lý do nào bạn trả lại sai trong số onSupportNavigateUp()? Tài liệu nói rằng nó chỉ là một lá cờ thành công
brainmurphy1

7

xin lỗi vì trả lời muộn. tôi đã tìm thấy giải pháp dễ dàng nhất cho bạn . ở đây trên tất cả câu trả lời không hoạt động cho tôi ( because i want to use toolbar not actionBar due to theming). vì vậy hãy cố gắng thêm nút đóng thông qua bố cục xml. Và nó hoạt động.

đây là cú pháp xml để thêm nút đóng vào thanh công cụ (v7).

app:navigationIcon="@drawable/ic_close_black_24dp"

ans đây là một hình ảnh ngoài lề hình ảnh đầu ra


Từ đâu @drawable/ic_close_black_24dpđến?
CACuzcatlan

@CACuzcatlan Đó chỉ là một hình ảnh ngẫu nhiên mà anh ấy có trong thư mục có thể vẽ của mình. Bạn có thể chọn bất kỳ biểu tượng nào.
Mikkel Larsen

@CACuzcatlan bạn có thể tìm thấy nó trong nội dung vectơ của Android Studio.
Sourav Bagchi

5
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Search");
toolbar.setNavigationIcon(R.drawable.abc_ic_clear_mtrl_alpha);
setSupportActionBar(toolbar);

3

Một giải pháp thay thế để xác định hoạt động chính trong tệp kê khai là xử lý hành động cần thực hiện trong phương thức onOptionsItemSelected như trong ví dụ này:

 @Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        // Respond to the action bar's Up/Home/back button
        case android.R.id.home:
            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
}

-5

Bạn có thể xác định một kiểu:

<style name="Theme.Toolbar.Clear">
    <item name="toolbarNavigationIcon">@drawable/abc_ic_clear_mtrl_alpha</item>
</style>

và sử dụng nó trong chủ đề của bạn:

<style name="Theme.Clear">
    <item name="toolbarTheme">@style/Theme.Toolbar.Clear</item>
</style>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.