Cài đặt android:windowActionBar="false"
thực sự vô hiệu hóa ActionBar nhưng sau đó, như bạn nói, getActionBar();
trả về null. Điều này được giải quyết bằng:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.splash); // be sure you call this AFTER requestFeature
Điều này tạo ra ActionBar và ngay lập tức ẩn nó trước khi nó có cơ hội được hiển thị.
Nhưng bây giờ có một vấn đề khác. Sau khi đưa windowActionBar="false"
vào chủ đề, Activity sẽ vẽ Tiêu đề cửa sổ bình thường thay vì ActionBar.
Nếu chúng tôi cố gắng tránh điều này bằng cách sử dụng một số *.NoTitleBar
chủ đề chứng khoán hoặc chúng tôi cố gắng đưa <item name="android:windowNoTitle">true</item>
vào chủ đề của riêng mình, nó sẽ không hoạt động.
Lý do là ActionBar phụ thuộc vào Tiêu đề cửa sổ để hiển thị - đó là ActionBar là Tiêu đề cửa sổ được chuyển đổi.
Vì vậy, mẹo có thể giúp chúng tôi hiểu là thêm một điều nữa vào chủ đề Hoạt động xml của chúng tôi:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Điều này sẽ làm cho Tiêu đề cửa sổ có chiều cao bằng không, do đó thực tế là vô hình.
Trong trường hợp của bạn, sau khi hoàn thành việc hiển thị màn hình giật gân, bạn chỉ cần gọi
setContentView(R.layout.main);
getActionBar().show();
và bạn đã hoàn thành. Hoạt động sẽ bắt đầu mà không nhấp nháy ActionBar, cũng không hiển thị Tiêu đề cửa sổ.
ADDON:
Nếu bạn hiển thị và ẩn các ActionBar nhiều lần có thể bạn đã nhận thấy rằng đầu tiên hiển thị là không hoạt hình. Từ đó trở đi hiển thị và ẩn là hoạt hình. Nếu bạn muốn có hoạt hình trong lần đầu tiên hiển thị, bạn có thể sử dụng điều này:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
// delaying the hiding of the ActionBar
Handler h = new Handler();
h.post(new Runnable() {
@Override
public void run() {
getActionBar().hide();
}
});
Điều tương tự có thể đạt được với:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
nhưng nó có thể cần một số logic bổ sung để kiểm tra xem đây có phải là lần đầu tiên hiển thị Hoạt động không.
Ý tưởng là trì hoãn một chút việc ẩn ActionBar. Theo cách chúng tôi để ActionBar được hiển thị, nhưng sau đó ẩn nó ngay lập tức. Do đó, chúng tôi vượt xa chương trình phi hoạt hình đầu tiên và chương trình tiếp theo sẽ được coi là thứ hai, do đó nó sẽ là hoạt hình.
Như bạn có thể đoán, có khả năng ActionBar có thể được nhìn thấy trước khi nó bị ẩn bởi hoạt động bị trì hoãn. Đây thực sự là trường hợp. Hầu hết thời gian không thấy gì nhưng thỉnh thoảng, bạn có thể thấy ActionBar nhấp nháy trong một giây.
Trong mọi trường hợp, đây không phải là một giải pháp hay, vì vậy tôi hoan nghênh mọi đề xuất.
Ngoài ra cho người dùng thanh hành động hỗ trợ v7, mã sẽ là:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... sử dụng cách này Cách trả lời [1] [1]: stackoverflow.com/a/25365193/1364896