2009-06-13 68 views
25

Có cách nào để ẩn các tiêu đề cửa sổ để nó sẽ không được hiển thị ở chế độ toàn màn hình (Ẩn Tiêu đề ở chế độ Toàn màn hình?

getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, 
       LayoutParams.FLAG_FULLSCREEN) 

) nhưng sau đó sẽ xuất hiện trên

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN) 

?

requestWindowFeature(Window.FEATURE_NO_TITLE) 

không phải là tùy chọn vì điều này sẽ không cho phép lấy lại.

+0

Vì vậy, bạn muốn có thể bật và tắt theo ý muốn? –

+0

Có. Để chính xác hơn, tôi muốn hiển thị thanh tiến trình, nhưng điều đó được kết hợp với tiêu đề. – yanchenko

Trả lời

57

Con đường tôi xử lý này trong các trò chơi Android của tôi là để gọi dòng sau trong onCreate() của Hoạt động của tôi

requestWindowFeature(Window.FEATURE_NO_TITLE); 

sau đó tôi có thể biến khả năng toàn màn hình tắt và về việc sử dụng đoạn mã sau vào lớp hoạt động của tôi (thường được gọi là từ một tùy chọn trình đơn) (biến m_contentView là quan điểm từ findViewById() sử dụng id mà bạn sử dụng khi gọi setContentView() ở trên bạn tạo)

private void updateFullscreenStatus(boolean bUseFullscreen) 
{ 
    if(bUseFullscreen) 
    { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
    } 
    else 
    { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
     getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 

    m_contentView.requestLayout(); 
} 

tôi sử dụng kỹ thuật này trong tất cả các trò chơi của tôi không có vấn đề gì.

Tại sao bạn nói

requestWindowFeature (Window.FEATURE_NO_TITLE); không phải là một tùy chọn của khóa học

?

:: EDIT ::

Vâng, nếu bạn đang cố gắng để tự động hiển thị và ẩn nó trong suốt cuộc đời của hoạt động này tôi không chắc chắn nếu bạn có thể làm điều đó với Window Title chính thức do sự lưu ý rằng có đã được đề cập về các tính năng cửa sổ cần phải được đặt trước khi setContentView() được gọi là (link)

Một điều bạn có thể làm là thực hiện thanh tiêu đề của riêng mình và tự động hiển thị và ẩn ... Tôi đặt cùng ví dụ này đặt bạn o nthe theo dõi đúng

Đây là tệp bố cục

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:fadingEdgeLength="0sp" 
    > 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/myTitleBarLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     > 

     <TextView 
      android:id="@+id/myTitleBarTextView" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/app_name" 
      android:paddingTop="4dip" 
      android:paddingBottom="4dip" 
      android:paddingLeft="6dip" 
      android:textStyle="bold" 
      android:shadowColor="#BB000000" 
      android:shadowRadius="3.0" 
      android:shadowDy=".25" 

     /> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dip" 
      android:background="#CCEEEEEE" 
      android:padding="10dip" 
     /> 
    </LinearLayout> 

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     > 

     <!-- Insert your regular layout stuff here --> 

     <Button android:id="@+id/toggle_title_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Toggle Title" 
     /> 
    </ScrollView> 
</LinearLayout> 

Và đây là mã cho các hoạt động chính mà sẽ cho phép bạn chuyển đổi thanh tiêu đề tùy chỉnh của chúng tôi và tắt

package com.snctln.test.HelloGridView; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class HelloGridView extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TextView tv = (TextView)this.findViewById(R.id.myTitleBarTextView); 
     tv.setBackgroundColor(0xFF848284); 
     tv.setTextColor(0xFFFFFFFF); 

     Button toggleTitleButton = (Button)this.findViewById(R.id.toggle_title_button); 

     toggleTitleButton.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        LinearLayout ll = (LinearLayout)findViewById(R.id.myTitleBarLayout); 

        if(ll.getVisibility() == View.GONE) 
        { 
         ll.setVisibility(View.VISIBLE); 
        } 
        else 
        { 
         ll.setVisibility(View.GONE); 
        } 
       } 
      }); 
    } 
} 

Nó không giống hoàn hảo, nhưng bạn luôn có thể chơi với các bố trí một số chi tiết để làm điều đó.

alt text http://i39.tinypic.com/120sfp1.png

suy nghĩ khác của tôi là nếu bạn chỉ muốn giấu tất cả mọi thứ để hiển thị một thanh tiến trình lý do tại sao không sử dụng ProgressDialog?

Lớp học này khá dễ sử dụng ...

progressDlg = ProgressDialog.show(context, getString(R.string.progress_dialog_title_prepare), getString(R.string.progress_dialog_body_prepare)); 

// do long running operation 

if(operationFailed) 
{ 
    progressDlg.cancel(); 
} 
else 
{ 
    progressDlg.dismiss(); 
} 
+0

Vì tôi cần chuyển ứng dụng từ chế độ toàn màn hình sang chế độ 'bình thường' với tiêu đề tại một số thời điểm. – yanchenko

+0

@snctln: Xin lỗi, tôi không hiểu mô tả của bạn về biến 'm_contentView'. Những gì tôi đã làm trong oncreate của tôi là 'setContentView (R.layout.birdview)'. Đó sẽ là 'm_contentView' của tôi? Tôi đã thử 'findViewById (R.layout.birdview) .requestLayout()' nhưng có một ngoại lệ con trỏ null. –

+0

@Luis A. Florit: Bạn nên tìm kiếm 'android.R.id.content' - nó là cha mẹ trên cùng của hệ thống phân cấp khung nhìn (được tạo ra trong Activity bằng cách gọi phương thức' setContentView() ') –

1

không thể theo tài liệu và nhóm nhà phát triển Android. để thực hiện điều đó, bạn cần thêm mục bố cục 'tựa đề dạng thanh' bằng văn bản và thanh tiến trình của bạn và ẩn/hiện khi bạn cần. ngay bây giờ - không có cách nào khác xung quanh nó, kể từ khi thanh tiêu đề kiểm soát có thể được thực hiện chỉ trước khi gọi setContentView và không thay đổi sau.

10
if(useFullscreen) 
{ 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
} 
else 
{ 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
} 

này làm việc cho tôi .. tại phương pháp onResume

+2

người đã bỏ phiếu xuống? nếu mã này không hoạt động tôi sẽ không bao giờ cung cấp cho nó ở đây ... bạn có thể thử trên của riêng bạn .. làm việc tại giả lập 1.6 và 2.2 và trên anh hùng của tôi 2.1 – David

11

Để vô hiệu hóa các tiêu đề của ứng dụng của bạn (đó là tên ứng dụng)

requestWindowFeature(Window.FEATURE_NO_TITLE) 

Để vô hiệu hóa thanh thông báo trên đầu trang (do đó, yêu cầu cho người quản lý ứng dụng Android cho phép Toàn màn hình)

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

Hy vọng điều này sẽ giúp bất kỳ ai muốn biết sự khác biệt !!

13

Thêm android:theme="@android:style/Theme.NoTitleBar.Fullscreen" vào thẻ ứng dụng trong tệp kê khai sẽ làm cho mọi hoạt động toàn màn hình.

+1

Lưu ý rằng điều này cũng hoạt động trong thẻ biểu hiện của một hoạt động cá nhân. – kungphu

3

Trên Android 3+ nó có thể đạt được bằng cách gọi easilyy getActionBar().hide()getActionBar().show() để lần lượt hiển thị và ẩn các ActionBar chuẩn

Trên Android 1,2 giải pháp tốt nhất (tôi đoán) là thực hiện Xem tùy chỉnh cho yout " thanh tiêu đề "và ẩn nó theo yêu cầu (tất nhiên, gọi tới số requestWindowFeature(Window.FEATURE_NO_TITLE); ngay từ đầu).

+0

'getActionBar(). Hide()' hoạt động hoàn hảo. – sparticvs

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