การตั้งค่าandroid:windowActionBar="false"
ปิดการใช้งาน ActionBar อย่างแท้จริง แต่แล้วตามที่คุณบอกว่าgetActionBar();
จะคืนค่าว่าง นี่คือการแก้ไขโดย:
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
สิ่งนี้จะสร้าง ActionBar และซ่อนทันทีก่อนที่จะมีโอกาสแสดง
แต่ตอนนี้มีปัญหาอื่น หลังจากใส่windowActionBar="false"
ธีมแล้วกิจกรรมจะดึงชื่อหน้าต่างปกติแทน ActionBar
หากเราพยายามหลีกเลี่ยงสิ่งนี้โดยใช้*.NoTitleBar
ธีมสต็อกบางส่วนหรือพยายามใส่<item name="android:windowNoTitle">true</item>
ในธีมของเราเองมันจะไม่ทำงาน
เหตุผลคือ ActionBar ขึ้นอยู่กับ Window Title เพื่อแสดงตัวเองนั่นคือ ActionBar เป็น Window Title ที่ถูกแปลง
ดังนั้นเคล็ดลับที่สามารถช่วยเราได้คือเพิ่มสิ่งอื่นเข้าไปในธีมกิจกรรม xml:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
สิ่งนี้จะทำให้ชื่อหน้าต่างมีความสูงเป็นศูนย์จึงมองไม่เห็นจริง
ในกรณีของคุณหลังจากเสร็จสิ้นการแสดงหน้าจอสแปลชที่คุณสามารถโทรได้
setContentView(R.layout.main);
getActionBar().show();
และคุณทำเสร็จแล้ว กิจกรรมจะเริ่มต้นโดยไม่มีการกะพริบของ ActionBar หรือแสดงชื่อหน้าต่าง
เพิ่ม:
ถ้าคุณแสดงและซ่อน ActionBar หลายครั้งคุณอาจสังเกตเห็นว่าการแสดงครั้งแรกไม่ได้เคลื่อนไหว ตั้งแต่นั้นมาการแสดงและการซ่อนเป็นภาพเคลื่อนไหว หากคุณต้องการมีภาพเคลื่อนไหวในการแสดงครั้งแรกเกินไปคุณสามารถใช้สิ่งนี้:
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();
}
});
สิ่งเดียวกันสามารถทำได้ด้วย:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
แต่อาจต้องใช้ตรรกะพิเศษเพื่อตรวจสอบว่านี่เป็นการแสดงครั้งแรกของกิจกรรมหรือไม่
ความคิดคือการหน่วงเวลาเล็กน้อยในการซ่อน ActionBar ในวิธีที่เราให้ ActionBar แสดง แต่ซ่อนมันทันที ดังนั้นเราไปไกลกว่าการแสดงที่ไม่มีภาพเคลื่อนไหวครั้งแรกและการแสดงครั้งต่อไปจะถูกพิจารณาเป็นอันดับที่สองดังนั้นมันจะเป็นการเคลื่อนไหว
เนื่องจากคุณอาจเดาได้ว่ามีโอกาสที่ ActionBar จะสามารถเห็นได้ก่อนที่มันจะถูกซ่อนโดยการดำเนินการล่าช้า กรณีนี้เป็นจริง เวลาส่วนใหญ่ยังไม่เห็นอะไรเลย แต่ในบางครั้งคุณสามารถเห็นการสั่นไหวของ ActionBar สักเสี้ยววินาที
ไม่ว่าในกรณีใด ๆ นี่ไม่ใช่ทางออกที่ดีดังนั้นฉันจึงยินดีรับข้อเสนอแนะ
นอกจากนี้สำหรับผู้ใช้ actionbar v7 สนับสนุนรหัสจะเป็น:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... ใช้สิ่งนี้วิธีตอบ [1] [1]: stackoverflow.com/a/25365193/1364896