2012-05-17 23 views
6

Tôi đang làm việc trên Ứng dụng Android sử dụng biểu tượng Máy chủ tab được tải xuống từ internet và Kích thước biểu tượng là 30x30.Android tabHost và tabWidget icon issue

for(int i = 0; i < titleNames.size(); i++) 
{ 
    intent = new Intent().setClass(context, Gallery.class); 
    sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), res.getDrawable(R.drawable.icon)).setContent(intent); 
    tabHost.addTab(sp); 
} 

Nếu tôi sử dụng mã này ở trên (biểu tượng từ tài nguyên) để đặt văn bản chỉ báo và biểu tượng, Biểu tượng hoạt động khá tốt và biểu tượng phù hợp với tiện ích tab.

for(int i = 0; i < titleNames.size(); i++) 
{ 
    intent = new Intent().setClass(context, Gallery.class); 
    sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), Drawable.createFromPath(path+iconNames.get(i))).setContent(intent); 
    tabHost.addTab(sp); 
} 

Nhưng Nếu tôi sử dụng mã này (hình ảnh tải về từ internet và nó trong bộ nhớ trong) thay vì trước đó, biểu tượng dường như quá nhỏ, và thậm chí cả chiều cao và giá trị chiều rộng là như nhau cho cả hai biểu tượng. Tôi không quy mô các biểu tượng khi tải xuống từ internet và tôi lưu chúng dưới dạng PNG. Bất cứ ai có bất kỳ ý tưởng về vấn đề là gì?

Here is the tabhost with icons from resources

Here is the tabhost with icons downloaded from internet

SOLUTION:

Thay vì thêm đối tượng để các máy chủ tab với mã trước đây của tôi, bây giờ tôi sử dụng mã dưới đây, và nó hoạt động khá tốt. Sự khác biệt giữa hai cái này là cái mới là sử dụng Bố cục có chế độ xem hình ảnh và chế độ xem văn bản để biểu thị biểu tượng và văn bản bên dưới để đặt chỉ báo về mục đích. Vì vậy, theo cách này, tôi có thể gọi phương thức từ chế độ xem hình ảnh để làm cho hình ảnh phù hợp với giới hạn của nó được xác định trong tệp xml. Đây là cách để thực hiện với Chế độ xem.

private void addTab(String labelId, Drawable drawable, Class<?> c) { 

    tabHost = getTabHost(); 
    intent = new Intent(this, c); 
    spec = tabHost.newTabSpec("tab" + labelId); 

    View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false); 
    TextView title = (TextView) tabIndicator.findViewById(R.id.title); 
    title.setText(labelId); 

    ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon); 
    icon.setImageDrawable(drawable); 
    icon.setScaleType(ImageView.ScaleType.FIT_CENTER); 

    spec.setIndicator(tabIndicator); 
    spec.setContent(intent); 
    tabHost.addTab(spec); 
} 

Và đây là bố cục với chế độ xem hình ảnh và chế độ xem văn bản.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="0dip" 
android:layout_height="55dip"  
android:layout_weight="1" 
android:orientation="vertical" 
android:padding="5dp" 
android:weightSum="55" > 
<ImageView 
    android:id="@+id/icon" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:src="@drawable/icon" 
    android:adjustViewBounds="false" 
    android:layout_weight="30" 
/> 
<TextView 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="25" 
    android:gravity="center_horizontal" 
/> 
</LinearLayout> 

Nhờ @Venky và @SpK đã cho tôi ý tưởng.

+0

[Bạn nên thử ví dụ này] (http://stackoverflow.com/a/6992662/940096) Tôi luôn đề xuất ví dụ này cho tất cả. – Praveenkumar

+0

http://stackoverflow.com/questions/5567532/android-ui-tabactivity-issue/5567823#5567823 .. Hãy thử bài đăng này – Venky

+0

Cảm ơn câu trả lời của bạn khá hữu ích, tôi có thể sử dụng sau này. Nhưng những gì tôi muốn làm là thiết lập các biểu tượng thanh tab này với các biểu tượng mà tôi đã tải xuống từ internet và vì tôi không sử dụng drawable-mdpi hoặc drawable-ldpi trong tài nguyên mà chúng không phù hợp với tabbar theo độ phân giải màn hình. Thay vì sử dụng tài nguyên, tôi muốn sử dụng các biểu tượng trong bộ nhớ trong của mình. ví dụ với createDrawableFromPath(). – osayilgan

Trả lời

11

Thay vì thêm đối tượng vào máy chủ tab với mã trước của tôi, bây giờ tôi sử dụng mã bên dưới và hoạt động khá tốt. Sự khác biệt giữa hai cái này là cái mới là sử dụng Bố cục có chế độ xem hình ảnh và chế độ xem văn bản để biểu thị biểu tượng và văn bản bên dưới để đặt chỉ báo về mục đích. Vì vậy, theo cách này, tôi có thể gọi phương thức từ chế độ xem hình ảnh để làm cho hình ảnh phù hợp với giới hạn của nó được xác định trong tệp xml. Đây là cách để làm điều đó với Xem.

private void addTab(String labelId, Drawable drawable, Class<?> c) { 

tabHost = getTabHost(); 
intent = new Intent(this, c); 
spec = tabHost.newTabSpec("tab" + labelId); 

View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false); 
TextView title = (TextView) tabIndicator.findViewById(R.id.title); 
title.setText(labelId); 

ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon); 
icon.setImageDrawable(drawable); 
icon.setScaleType(ImageView.ScaleType.FIT_CENTER); 

spec.setIndicator(tabIndicator); 
spec.setContent(intent); 
tabHost.addTab(spec); 
} 

Và đây là bố cục với chế độ xem hình ảnh và chế độ xem văn bản.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="0dip" 
android:layout_height="55dip"  
android:layout_weight="1" 
android:orientation="vertical" 
android:padding="5dp" 
android:weightSum="55" > 
<ImageView 
    android:id="@+id/icon" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:src="@drawable/icon" 
    android:adjustViewBounds="false" 
    android:layout_weight="30" 
/> 
<TextView 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="25" 
    android:gravity="center_horizontal" 
/> 
</LinearLayout> 

Nhờ @Venky và @SpK đã cho tôi ý tưởng.

+0

GetTabWidget() là gì? –

3

kích thước Tab biểu tượng cho mật độ cao (hdpi) màn hình: Full Asset: 48 x 48 px Biểu tượng: 42 x 42 px

kích thước Tab biểu tượng cho trung mật độ (mdpi) màn hình: Full Asset : 32 x 32 px Biểu tượng: 28 x 28 px

kích thước Tab biểu tượng cho mật độ thấp (ldpi) màn hình: Full Asset: 24 x 24 px Biểu tượng: 22 x 22 px

bạn có thể nhìn thấy này: http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html

+1

bạn có thể sử dụng trong trường hợp bạn sử dụng các biểu tượng từ tài nguyên của ứng dụng chứ không phải từ bộ nhớ trong, vì chỉ có một thứ nguyên cho biểu tượng đã tải xuống. – osayilgan

+0

@osayilgan từ các tài nguyên ứng dụng có nghĩa là từ thư mục có thể drawable? – user3233280

+0

@ user3233280 Có, tài nguyên có nghĩa là mọi thứ đi kèm với ứng dụng của bạn. Nó có thể là bất cứ thứ gì trong thư mục "Res" hoặc "Assets". – osayilgan