2012-10-19 14 views
20

Tôi đang cố gắng tạo thanh tác vụ không có biểu tượng/văn bản ứng dụng và với hình ảnh tập trung và tôi biết có thể có chế độ xem tùy chỉnh, đây là mã của tôi:ActionBarSherlock - Tab xuất hiện thanh hành động ABOVE với chế độ xem tùy chỉnh

protected void initActionBar() 
{ 
    RelativeLayout custom = new RelativeLayout(getApplicationContext()); 
    ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    custom.setLayoutParams(params); 

    custom.setGravity(Gravity.CENTER); 
    custom.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_grad_grey_rounded)); 

    ImageView image =new ImageView(getApplicationContext()); 
    image.setBackgroundResource(R.drawable.ic_launcher); 
    custom.addView(image); 

    ab = getSupportActionBar(); 


    ab.setDisplayShowCustomEnabled(true); 
    ab.setCustomView(custom); 
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    tab_connect = ab.newTab(); 
    tab_connect.setText("CONNECT"); 
    tab_connect.setTabListener(this); 

    tab_discover = ab.newTab(); 
    tab_discover.setText("DISCOVER"); 
    tab_discover.setTabListener(this); 

    tab_simplify= ab.newTab(); 
    tab_simplify.setText("SIMPLIFY"); 
    tab_simplify.setTabListener(this); 

    ab.addTab(tab_simplify); 
    ab.addTab(tab_discover); 
    ab.addTab(tab_connect); 

    ab.setDisplayShowTitleEnabled(false); 
    ab.setDisplayShowHomeEnabled(false); 

} 

tuy nhiên khi tôi ẩn logo, sự thay đổi actionbar bên dưới các tab của tôi như vậy:

screen shot

nhưng nếu tôi đặt ab.setDisplayShowHomeEnabled (true) các actionbar xuất hiện trong đó là đúng nơi (nhưng với biểu trưng mà tôi không muốn):

enter image description here

Tôi đang làm gì sai?

+1

Có vẻ như một lỗi: https://github.com/JakeWharton/ActionBarSherlock/issues/327 – input

+0

Chỉ cần thử nó với actionbar android bình thường và có cùng một vấn đề ... – AndroidNoob

Trả lời

32

Dưới đây là một cách giải quyết đơn giản:

sử dụng như sau trong phương pháp onCreate của bạn:

View homeIcon = findViewById(android.R.id.home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 

này sụp đổ vào nút nhà hoàn toàn.

PS: Tôi đang sử dụng ActionBar tiêu chuẩn nhưng điều này nên làm việc cùng

Hoặc

nếu bạn muốn hỗ trợ trong Sherlock Actionbar để hơn bạn phải sử dụng này

actionBar.setLogo(null); // forgot why this one but it helped 

View homeIcon = findViewById(
     Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
     android.R.id.home : R.id.abs__home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 
((View) homeIcon).setVisibility(View.GONE); 

actionBar.setDisplayShowTitleEnabled(false); 
12

Nó đáng chú ý là câu trả lời đã chọn sẽ chỉ hoạt động với ActionBar gốc bởi vì phần tử android.R.id.home không tồn tại trên tiền tố hc. Đó là, trên các thiết bị trước hc, bạn sẽ nhận được một NPE.

Vì bạn đang sử dụng ActionBarSherlock, tôi giả sử bạn muốn hỗ trợ thiết bị trước hc nên bạn nên sử dụng id chính xác dựa trên phiên bản nền tảng. ABS sẽ phơi bày tương đương với android.R.id.home qua R.id.abs__home để triển khai ActionBar.

Vì vậy, chúng ta có thể tinh chỉnh các workaround gợi ý như:

View homeIcon = findViewById(
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
        android.R.id.home : R.id.abs__home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 
+0

Tuy nhiên, điều này doesn' t cho phép tôi sử dụng tiêu đề như một nút "lên" như tôi muốn. – Czechnology

+0

hoạt động tốt nhưng không gian màu đen không còn ở vị trí của logo. Làm cách nào để loại bỏ không gian đen? – BurninatorDor

6

công trình này tuyệt vời quá! (Đọc các ý kiến ​​về báo cáo lỗi;))

actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); 
1

Tôi sử dụng này

ActionBar ab = getSupportActionBar(); 
ab.setDisplayShowHomeEnabled(true); 
    ab.setDisplayHomeAsUpEnabled(false); 
    ab.setHomeButtonEnabled(false); 
    ab.setLogo(null); 

    View homeIcon = findViewById(
      Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.id.home : R.id.abs__home); 
    ((View) homeIcon.getParent()).setVisibility(View.GONE); 
    ((View) homeIcon).setVisibility(View.GONE); 

    ab.setDisplayShowTitleEnabled(false); 
0

chỉ cần loại bỏ DISPLAY_SHOW_HOME cờ từ phương pháp() actionBar.setDisplayOptions của bạn.

3

Sau câu trả lời @furyfred, mã này có thể được sử dụng khi sử dụng ActionBar từ AppCompat thư viện:

View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.id.home : android.support.v7.appcompat.R.id.home); 

if (null != homeIcon && null != homeIcon.getParent()) 
{ 
    ((View) homeIcon.getParent()).setVisibility(View.GONE); 
} 
2

Tất cả các bài viết ở trên bị sụp đổ vào biểu tượng nhà nhưng để lại một khoảng trống. Để tránh điều đó, bạn cần đặt kích thước logo thành 0. Dưới đây được thêm vào đoạn mã của tôi.it có thể giúp cho những người khác đấu tranh với cùng một vấn đề.nhờ

 actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); 

     View homeIcon = findViewById(
       Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
       android.R.id.home : R.id.abs__home); 
     ((View) homeIcon.getParent()).setLayoutParams(new LinearLayout.LayoutParams(0, 0)); 
     ((View) homeIcon).setVisibility(View.GONE); 
+0

đây là câu trả lời hay nhất, các giải pháp khác thay đổi kiểu dáng thanh tác vụ – marmor