gpt4 book ai didi

java - 删除操作栏

转载 作者:行者123 更新时间:2023-12-01 22:31:53 24 4
gpt4 key购买 nike

我想从中删除 ActionBar。我尝试调用 requestWindowFeature(Window.FEATURE_NO_TITLE); 但它不起作用。这是我的 Java 代码:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

人们说将语句放在 setContentView() 之前会起作用,但事实并非如此。

最佳答案

设置 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"放入主题后, Activity 将绘制其正常的窗口标题而不是 ActionBar。

如果我们试图通过使用一些 *.NoTitleBar 库存主题来避免这种情况,或者我们尝试放置:

<item name="android:windowNoTitle">true</item> in our own theme, it won't work.

原因是ActionBar依赖于Window Title来显示自身——也就是说ActionBar是一个变换后的Window Title。因此,可以帮助我们解决这个问题的技巧是在我们的 Activity 主题 xml 中添加一件事:

<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>

这将使窗口标题的高度为零,因此几乎不可见。

就您而言,完成显示启动屏幕后,您只需调用

setContentView(R.layout.main);
getActionBar().show();

你就完成了。 Activity 将启动,操作栏不会闪烁,窗口标题也不会显示。

ADDON:如果您多次显示和隐藏 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();

但可能需要一些额外的逻辑来检查这是否是 Activity 的第一次显示。

这个想法是延迟一点 ActionBar 的隐藏。在某种程度上,我们让 ActionBar 显示,但随后立即隐藏它。因此,我们超越了第一个非动画放映,下一个放映将被视为第二个,因此它将是动画的。

正如您可能已经猜到的,ActionBar 有可能在被延迟操作隐藏之前就可见。实际情况确实如此。大多数时候什么也看不到,但偶尔,您会看到 ActionBar 闪烁一瞬间。

无论如何,这都不是一个很好的解决方案,所以我欢迎任何建议。

添加v7支持actionbar用户,代码为:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();

关于java - 删除操作栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com