16

Tôi đã thêm android-support-library-v7-appcompat vào dự án của mình để hỗ trợ ActionBar từ cấp API 7 ở trên.ActionBar với thư viện hỗ trợ và nội dung lớp phủ Fragments

Nó hoạt động giống như một sự quyến rũ trên Android 4.0+ và cũng trên Android 2.3 với một hoạt động bình thường có setContentView trong onCreate, nhưng khi hoạt động đang tải một Fragment trong onCreate ActionBar được chồng chéo với nội dung bố cục của tôi. Ở tất cả các kịch bản khác, ActionBar hoạt động tốt.

Dưới đây là một số mã:

class AssetsActivity extends ActionBarActivity{ 
    @Override 
    protected void onCreate(Bundle arg0) 
    { 
     super.onCreate(arg0); 

     OpenLocalFragment assets = OpenLocalFragment.newInstance(index); 
      assets.setArguments(getIntent().getExtras()); 
     getSupportFragmentManager().beginTransaction() 
        .add(android.R.id.content, assets).commit(); 
    } 
} 

Chủ đề của hoạt động này được đặt trong tệp kê khai để:

@ style/Theme.AppCompat

Một này là kết quả trên android 2.3 (trên 4.0+ ActionBar hiển thị tốt) actionBar overlaping

Bạn có thể biết rằng mục lisview đầu tiên đang chồng lên ActionBar (biểu tượng tròn màu trắng và tiêu đề "Hoạt động của tôi")

Có thể tôi đã tìm thấy lỗi trong thư viện hỗ trợ, nó chỉ được phát hành trong 2 ngày ? Xin cảm ơn tất cả.

+0

Sự cố được giải quyết, vui lòng xem câu trả lời của tôi bên dưới. – Primoz990

Trả lời

18

Edit: này hiện nay đã chính thức ấn định và công bố trong Hỗ trợ Thư viện V19.

Như JJD nhận xét dưới đây, bạn có thể sử dụng bình thường android.R.id.content với appcompat-v7 r.19.0.0 hoặc mới hơn. Nút home cũng hoạt động.

Với các từ khác: Cách giải quyết bên dưới không cần thiết nếu bạn sử dụng phiên bản 19.0.0 trở lên.


Tôi nhận được câu trả lời tại code.google.com. tôi đã thực hiện một bản tóm tắt từ Frederic của câu trả lời:

Đối với thiết bị ICS trước bạn phải sử dụng:

R.id.action_bar_activity_content

thay vì

android.R .id.content

R.id.action_bar_activity_content là id mới được sử dụng trong bố cục để hiển thị nội dung ứng dụng, có vẻ như nó thay thế android.R.id.content khi bạn sử dụng hỗ trợ v7 appcompat ActionBarActivity.

Bạn có thể sử dụng mã này để lấy id chính xác của các nội dung hoạt động:

public static int getContentViewCompat() { 
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ? 
       android.R.id.content : R.id.action_bar_activity_content; 
} 

Nhờ Frederic

+1

LƯU Ý: đây chính thức là lỗi trong Android. Họ đã sửa nó và nó sẽ được phát hành trong tương lai. https://code.google.com/p/android/issues/detail?id=58108 – Primoz990

+2

Xin lưu ý rằng việc sử dụng appcompat-v7 r.19.0.0 giới thiệu một [lỗi mới ảnh hưởng đến các thiết bị chạy Android 2.3.x như được thảo luận trong vấn đề # 59077] (https://code.google.com/p/android/issues/detail?id=59077). – JJD

+1

Ngoài câu trả lời Primoz990: Bạn có thể sử dụng 'android.R.id.content' nếu bạn sử dụng ** appcompat-v7 r.19.0.0 hoặc mới hơn **. Chris Banes [số cố định 59077] (https://code.google.com/p/android/issues/detail?id=59077#c8) để nút trang chủ hoạt động trên Android 2.3 trở lên. Bạn không còn cần giải pháp tham chiếu 'R.id.action_bar_activity_content' nữa. – JJD

0

Thêm tiêu đề danh sách trống bổ sung có kích thước của thanh tác vụ. Nên là một cách giải quyết tốt.

+0

Trong trường hợp này, đây là một giải pháp đơn giản nhưng tôi đang sử dụng nguyên tắc này trong nhiều hoạt động với bố cục khác nhau. Tôi sẽ đăng chỉnh sửa bằng cách giải quyết hiện tại của tôi. Cảm ơn anyway, có thể là giải pháp someones. – Primoz990

1

Một lựa chọn khác nếu bạn không muốn thay đổi mã nguồn của android-hỗ trợ -library-v7-appcompat là thêm bố cục trống trong tệp xml bố cục như:

<LinearLayout 
    android:id="@+id/content_view" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

và mak e gọi đoạn để thêm vào cách bố trí mà thay vào đó:

ft.add(R.id.content_view, mFragment, mTag); 
1

vẻ hơi muộn để đóng góp nhưng tôi có cùng một vấn đề và chưa thấy câu trả lời ở đây ....

Kiểm tra phong cách của bạn. tập tin xml, có thể có một thuộc tính xml cho bao phủ rộng actionbar thiết lập là true tức là

đúng

toàn bộ entry trông giống như này

<item name ="actionBarTabTextStyle" > @style/TabTextStyle</item> 
    <item name = "windowActionBarOverlay">true</item> 

Nếu trường hợp đó chỉ cần thay đổi giá trị của "windowActionBarOverlay" thành false.

Các vấn đề liên quan