2012-08-22 10 views
5

Tôi đang di chuyển ActionBar của ứng dụng sang ActionBarSherlock và tôi đang cố gắng tùy chỉnh nền bằng nền lát. Tôi đang thử nghiệm mã của mình trên 2 thiết bị thực, một thiết bị chạy Android 2.1 và một thiết bị khác đang chạy Android 4.0.4.Nền ActionBarSherlock không lặp lại trên các phiên bản ICS trước

Mã bên dưới đang hoạt động trên thiết bị ICS (nền lặp lại) nhưng không hoạt động trên nền Eclair (nền được kéo dài thay vì lặp lại). Tôi cũng đã thử nghiệm này trên giả lập Android 2.3 và nền không lặp lại quá. Có vẻ như tileMode="repeat" chỉ hoạt động trên ICS.

themes.xml:

<style name="Theme.Opheodrys.Base" parent="Theme.Sherlock.Light"> 
    <item name="android:actionBarStyle">@style/Opheodrys.Widget.ActionBar</item> 
    <item name="actionBarStyle">@style/Opheodrys.Widget.ActionBar</item> 
</style> 

<style name="Opheodrys.Widget.ActionBar" parent="Widget.Sherlock.Light.ActionBar"> 
    <item name="android:background">@drawable/ab_background_pattern</item> 
    <item name="background">@drawable/ab_background_pattern</item> 
</style> 

ab_background_pattern.xml:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/ab_background_tile" 
    android:tileMode="repeat" 
    tileMode="repeat" /> <!-- I've added this just in case, but it doesn't seem to be needed --> 

Trả lời

15

Đây là Android bug #15340 và không phải là một lỗi ActionBarSherlock.

Bạn có thể khắc phục điều này với một cái gì đó tương tự như:

BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.bg_striped); 
bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); 
getSupportActionBar().setBackgroundDrawable(bg); 
+0

Sau khi đăng câu hỏi này tôi đã đi qua lỗi đó và đang tìm kiếm một giải pháp về trường hợp đặc biệt này. Cảm ơn bạn đã viết mã. Tôi cho rằng đó là một vấn đề với ActionBarSherlock vì tôi có một drawable tương tự được áp dụng cho nền của một ImageView và tôi không bao giờ nhận thấy nó kéo dài ... –

+0

Khách du lịch trong tương lai: Điều này hiện được tự động sửa bởi ABS. –