Sự cải tiến của AppCompatActivity so với ActionBarActivity là gì?


164

android.support.v7.app.AppCompatActivity đã được thêm vào thư viện hỗ trợ v7 mới nhất như một tính năng mới ngày hôm qua.

Người ta nói rằng ActionBarActivityđã bị từ chối ủng hộ cái mới AppCompatActivityvà đó AppCompatActivitylà lớp cơ sở cho các hoạt động sử dụng các tính năng của thanh hành động thư viện hỗ trợ. Vì vậy, các tính năng mới của AppCompatActivityhơn là ActionBarActivitygì? Những cải tiến nào AppCompatActivitycó hơn ActionBarActivity? Và lợi thế của là AppCompatActivitygì? Ai đó có thể cung cấp một vài mẫu?

Bất kỳ lời khuyên được đánh giá cao. Và cảm ơn trước.

Tái bút: điều làm tôi ngạc nhiên nhất là lớp AppCompatActivityđược mở rộng từ android.support.v4.app.FragmentActivitylớp cha mẹ trực tiếp của ActionBarActivity! Ý tôi là thực sự bây giờ ActionBarActivitycó thể làm bất cứ điều gì AppCompatActivitycó thể làm, tại sao Android lại đẩy ra thứ hai?

Trong khi đó, tôi thấy một bài viết trên blog rằng các quốc gia: " Đó không phải là đổi tên từ ActionBarActivityđến AppCompatActivity, logic nội bộ AppCompatlà có sẵn thông quaAppCompatDelegate ", do đó "là những gì logic nội bộ " của AppCompat? Có thể AppCompatDelegatelàm gì? Ai đó có thể gửi một số mã về điều này?



Tôi đã đọc nó, nó là một giới thiệu, quá nông.
SilentKnight

1
AppCompatActivity là lớp cha của ActionBarActivity. Và để biết thêm ý tưởng bạn cần xem xét mã.
Pankaj Kumar

Vâng, tôi nhận thấy điều này.
SilentKnight

Câu trả lời:


145

Như Chris đã viết, phiên bản mới không dùng nữa ActionBarActivity(một AppCompatActivitylớp mở rộng ) là an toàn để sử dụng lớp tương thích ngược. Sự phản đối của nó chỉ là một gợi ý cho bạn yêu cầu sử dụng mới AppCompatActivitytrực tiếp thay thế. AppCompatActivitylà một triển khai mới, chung chung hơn, sử dụng AppCompatDelegatelớp bên trong.

Nếu bạn bắt đầu một sự phát triển mới, thì bạn nên sử dụng AppCompatActivitylớp mới ngay lập tức. Nếu bạn có cơ hội cập nhật ứng dụng của mình, thì hãy thay thế ActionBarActivitybằng hoạt động mới. Nếu không, bạn có thể ở lại với hoạt động không được chấp nhận và sẽ không có sự khác biệt trong hành vi.

Về AppCompatDelegate, nó cho phép bạn có các vật dụng được tô màu mới trong một hoạt động, điều này cũng không AppCompatActivityphải ActionBarActivity.

Chẳng hạn, bạn kế thừa một hoạt động từ một thư viện bên ngoài, do đó, nó không kế thừa từ AppCompatActivitynhưng bạn muốn hoạt động này có các vật liệu (chế độ xem) được tô màu. Để thực hiện điều đó, bạn cần tạo một thể hiện AppCompatDelegatebên trong hoạt động của mình, ghi đè các phương thức của hoạt động đó addContentView(), setContentView()v.v. (xem AppCompatDelegatejavadoc để biết danh sách đầy đủ các phương thức) và bên trong các phương thức được ghi đè đó chuyển tiếp các cuộc gọi đến thể hiện bên trong AppCompatDelegate. AppCompatDelegatesẽ làm phần còn lại và hoạt động "lỗi thời" của bạn sẽ được "cụ thể hóa".


Ví dụ hay .. Cảm ơn bạn @ sergej shafarenka
Rakesh L

2
Bạn có thể vui lòng cho tôi biết điều gì xảy ra khi tôi sẽ sử dụng Activity thay cho Appcompactivity không? Tôi đã tìm kiếm nhưng không nhận được giải pháp. Xin hãy giúp tôi
Ravindra Kushwaha

35

Đây chủ yếu là một sự thay đổi tên: ActionBarActivitykhông thực sự mô tả tất cả mọi thứ bây giờ. Bạn có thể sử dụng một cách an toàn ActionBarActivitynếu bạn muốn. Hãy nghĩ về nó giống như một liên kết tượng trưng.


AppCompatActivitylà lớp cha mẹ trực tiếp của ActionBarActivity, bây giờ ActionBarActivitycó thể làm bất cứ điều gì AppCompatActivitycó thể làm, tại sao lại Androidđẩy ra sau?
SilentKnight

4
@SilentKnight: Như Chris đã viết, chủ yếu là thay đổi tên. Trích dẫn Blog của Nhà phát triển Android : "Thư viện hỗ trợ AppCompat bắt đầu với những khởi đầu khiêm tốn nhưng quan trọng: một Action Bar duy nhất cho tất cả các API 7 và các thiết bị cao hơn. Trong phiên bản 21, nó chịu trách nhiệm mới: đưa bảng màu vật liệu, pha màu, Hỗ trợ thanh công cụ và hơn thế nữa cho tất cả các thiết bị API 7+. Cùng với đó, cái tên ActionBarActivity không thực sự bao gồm toàn bộ phạm vi của những gì nó thực sự đã làm. "
CommonsWare

3
Không an toàn khi sử dụng các lớp không dùng nữa, vì chúng có thể bị xóa trong các phiên bản trong tương lai. Mặc dù bạn có thể dễ dàng thay thế tất cả các tham chiếu đến ActionBarActivitykhi nó bị xóa khỏi thư viện hỗ trợ (ví dụ: khi cập nhật ứng dụng của bạn), tôi khuyên bạn nên tránh sử dụng nó từ bây giờ.
david.schreiber

12

Thư viện hỗ trợ AppCompat bắt đầu với những khởi đầu khiêm tốn nhưng quan trọng: một thanh hành động nhất quán duy nhất cho tất cả các thiết bị API 7 trở lên. Trong phiên bản 21, nó chịu trách nhiệm mới : mang bảng màu vật liệu, pha màu widget, hỗ trợ Thanh công cụ và hơn thế nữa cho tất cả các thiết bị API 7+. Cùng với đó, cái tên ActionBarActivity không thực sự bao gồm toàn bộ phạm vi của những gì nó thực sự đã làm .

http://android-developers.blogspot.it/2015/04/android-support-l Library-21.html


..Có thể xin vui lòng cho tôi biết điều gì xảy ra khi tôi sẽ sử dụng Hoạt động thay cho Ứng dụng? Tôi đã tìm kiếm nhưng không nhận được giải pháp. Xin hãy giúp tôi
Ravindra Kushwaha

9

AppCompatActivityđã được giới thiệu vào Android-SDK kể từ khi phát hành thư viện appcompat hỗ trợ Android .

AppCompatActivitylà lớp con trực tiếp FragmentActivitycủa hỗ trợ v4 và lớp cha mẹ trực tiếp của ActionBarActivity.

AppCompatActivitylà lớp cơ sở cho các hoạt động sử dụng các tính năng của thanh hành động thư viện hỗ trợ .

Bạn có thể thêm một ActionBarhoạt động của mình khi chạy trên API cấp 7 trở lên bằng cách mở rộng lớp này cho hoạt động của bạn và đặt chủ đề hoạt động thành Theme.AppCompat hoặc một chủ đề tương tự.

Đối với thư viện appcompat v7 hỗ trợ, nó bổ sung hỗ trợ cho mẫu thiết kế giao diện người dùng Action Bar . Thư viện này bao gồm hỗ trợ cho việc triển khai giao diện người dùng thiết kế vật liệu .

Dưới đây là một vài trong số các lớp chính có trong thư viện appcompat v7:

  • ActionBar - Cung cấp việc thực hiện mẫu giao diện người dùng trên thanh hành động.
  • AppCompatActivity- Thêm một lớp hoạt động ứng dụng có thể được sử dụng làm lớp cơ sở cho các hoạt động sử dụng triển khai thanh hành động Thư viện hỗ trợ .
  • AppCompatDialog- Thêm một lớp hộp thoại có thể được sử dụng làm lớp cơ sở cho các hộp thoại theo chủ đề AppCompat .
  • ShareActionProvider - Thêm hỗ trợ cho một hành động chia sẻ được tiêu chuẩn hóa (như email hoặc đăng lên các ứng dụng xã hội) có thể được bao gồm trong một thanh hành động.

Sau khi bạn tải xuống Thư viện hỗ trợ Android , thư viện này nằm trong thư mục / extend / android / support / v7 / appcompat / .


Thế còn android.support.v4.app.ActivityCompat? Đây chỉ là tên cũ của AppCompatActivity?
Taylan

7

Trước đây, điểm vào duy nhất AppCompatlà thông qua ActionBarActivitylớp không dùng nữa . Thật không may, điều này buộc bạn phải sử dụng một hệ thống phân cấp Hoạt động được thiết lập khiến cho những thứ như PreferenceActivitykhông thể sử dụng .

xem thư viện hỗ trợ của chris banes -v22-1-0 để biết thêm thông tin


1
Đó là blog của Chris, rất cảm kích.
SilentKnight

2

Phiên bản mới nhất của thư viện hỗ trợ android, 22.1, deprecates sự ActionBarActivityủng hộ AppCompatActivity, trong đó hứa hẹn sẽ mang lại một quán duy nhất ActionBarcho tất cả các thiết bị bắt đầu với API Level 7 trở lên

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.