您好,我查找了以前关于使用androidx的工具栏的问题,但没有找到关于我的特定状态的答案,它在我的activity\u main.xml中包含此工具栏时不断崩溃:以下是我的工具栏xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
</androidx.appcompat.widget.Toolbar>
</LinearLayout>
my mainactivity.java代码:
package com.hfad.bitsandpizzas.ui.activities;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.appcompat.widget.Toolbar;
import com.hfad.bitsandpizzas.R;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
}
这是我在gradle构建中添加的依赖项:
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
这是我的日志错误:
原因:java.lang.classcastexception:android.widget.linearlayout无法转换为com.hfad.bitsandpizzas.ui.activities.mainactivity.oncreate上的androidx.appcompat.widget.toolbar
1条答案
按热度按时间brvekthn1#
要么你膨胀了错误的视图,要么你的主题已经有了工具栏。
使用默认主题
如果使用包含动作栏的材质设计主题(例如:
Theme.MaterialComponents.DayNight.DarkActionBar
),则不需要提供操作栏/工具栏,因为它将在那里。使用默认主题但不使用“工具栏”
如果你想拥有自己的
AppBarLayout/MaterialToolbar
(所以你可以自定义),然后你需要改变活动的主题(或者整个应用程序,如果你在任何地方都这样做的话)Theme.MaterialComponents.DayNight.NoActionBar
所以无论哪种情况,在你的themes.xml
定义应用程序主题的位置。。。确保您的
AndroidManifest.xml
指向您定义的主题:或者至少定义您的活动以使用清单中的主题:
那么活动本身中的kotlin/java代码呢?
根据您的解决方案(使用主题或提供您自己的),您将需要更多或更少的代码。
如果你选择使用
DarkActionBar
(或轻!),那你就不需要别的了。你的“actionbar”是为你设置的。您也不需要xml中的任何内容。只是setContentView(R.layout.yourLayout)
你可以走了。如果你选择使用
NoActionBar
变量,则除非添加一个操作栏,否则将没有操作栏。所以在xml中。。。您将需要这样的内容(注意:这是android模板为“空活动”提供的默认布局,我删除了textview并添加了appbarlayout+material工具栏):
现在在mainactivity.kt。。。
如果主题是
NoActionBar
,否则setSupportActionBar
将抛出一个illegalstateexception,说“你已经有一个操作栏”或类似的。有一个解决方法(可以在主题中将“windowactionbar”设置为false以覆盖默认值,但如果是这样的话,我宁愿使用另一个主题)。更新(java)
java真的没什么不同。如果您的活动是在java中进行的,则看起来是这样的: