在阅读了大部分官方android文档后,我遇到了使用Toolbar object 不设置Appbar的麻烦。有趣的是,菜单上的this official page链接到在onCreate()方法中使用工具栏对象。尽管最近有了工具栏可以使用,但我不需要工具栏对象的额外灵活性/自定义,而是选择使用各种菜单xml文件进行活动。 问题:我在选项菜单上的代码没有产生任何类型的Appbar ...它只产生了空白的白色屏幕,任务栏(电池/时间栏)位于顶部。 >
一般说明:我不希望支持旧的SDK(<7)。另外,我使用的手机(LG Stylo3 7.0)的硬件中没有菜单按钮。 我的目标是支持minSdkVersion 21和targetSdkVersion 28。我也不打算扩展片段。我还写了许多其他活动,尽管没有适当的菜单导航也无法访问其内容。
以下代码/资源是我写的:
app / [package] /MainActivity.java
package [package];
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity;
import [package].R;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
注意:我尝试在onCreateOptionsMenu()中调用super,并在return语句中也对其进行调用。我也尝试过扩展AppCompatActivity而不是Activity,但是我不希望支持早期的SDK版本。我已经在onCreateOptionsMenu()中放置了断点,并且调试工具似乎并没有在这里停止。也许不是从onStart()调用onCreateOptionsMenu()吗?
res / menu / main_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item android:id="@+id/action_servers"
android:icon="@drawable/ic_action_server"
android:title="@string/action_server"
app:showAsAction="ifRoom" />
<item android:id="@+id/action_settings"
android:icon="@drawable/ic_action_settings"
android:title="@string/action_settings"
app:showAsAction="ifRoom"/>
</menu>
注意:AndroidStudio可以预览此xml,没有任何问题。
res / layout / activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- Some commented out stuff for now -->
</androidx.constraintlayout.widget.ConstraintLayout>
注意:我已经在此布局中创建了一个工具栏对象,在此之前,只有这些问题与工具栏无关,它才起作用。 AndroidStudio确实允许我预览它,它是空白屏幕。
AndroidManifest.xml
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注意:我在res / values / styles.xml中尝试了各种带/不带ActionBar的android:themes ...尤其是:( Theme.AppCompat.Light.DarkActionBar和Theme.AppCompat。 NoActionBar)。前一个主题显示空白的屏幕,后一个主题显示深灰色的
请让我知道是否需要我省略的其他文件来进行进一步诊断。我的假设是,这与我使用的constraintLayout有关。
这些是我浏览过的页面,无法解决我的问题:
答案 0 :(得分:0)
更改MainActivity.java文件构造函数行以扩展AppCompatActivity
public class MainActivity extends AppCompatActivity {
并将android:theme设置为Theme.AppCompat *的变体,可以显示我一直在努力展示的MainActivity Appbar。接下来是我为寻找合适解决方案所做的更多研究。
Why this works...是AppCompatActivity和基类Activity之间的区别。 AppCompatActivity继承自Activity,使用这些主题之一告诉应用程序使用本机ActionBar类提供应用程序栏。通常,使用新的工具栏对象似乎是最好的方法,因为它允许更多自定义(自2019年起)。围绕该主题的大多数早期问题都使用过时/过时的代码,例如ActionBarActivity。
这可以通过根据documentation更改“活动”的布局文件以使其包含工具栏来实现。然后,可以使用此问题范围之外的技术适当地修改工具栏的主题。