我正在尝试使用本教程的材料设计实现“带图像的灵活空间”:
Toolbar animation with android design support library
但我在布局预览中收到此渲染问题消息:
无法实例化以下类:
- android.support.design.widget.CoordinatorLayout(Open Class,Show Exception,Clear Cache) - android.support.design.widget.AppBarLayout(Open Class,Show Exception,Clear Cache)
我将Theme.AppCompat
主题应用于我的应用程序,但它会阻止操作栏和其他所有活动中的外观。
此外,它会在操作栏方法上引发错误,例如:
actionBar.setDisplayHomeAsUpEnabled(真);
将错误(粗略地)陈述为:
在空对象引用上调用setDisplayHomeAsUpEnabled(boolean)
此外,对整个应用程序使用Theme.AppCompat
会在预览屏幕中显示以下错误:
找不到以下类: - android.support.v7.internal.app.WindowDecorActionBar(修复构建路径,创建类)
因此,我不想在整个应用程序中使用Theme.AppCompat
。但是,对于我要使用“带图片的灵活空间”设计的特定活动使用Theme.AppCompat
,无法解决之前所述的CoordinatorLayout
和AppBarLayout
问题。
请告诉我该怎么做!我已经在同一个问题上阅读了很多stackoverflow帖子,但它们对我不起作用!我已经重新启动了android studio并使我的缓存无效并重启了无数次!!
以下是build.gradle
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:23.0.1'
compile 'com.android.support:appcompat-v7:23.0.1'
compile project(':viewPagerIndicator')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
在手机上按原样运行应用程序会出现此错误:
java.lang.IllegalStateException:此Activity已经有一个动作 酒吧提供的窗户装饰。不要求 Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false 您的主题是使用工具栏。
将windowActionBar设置为false,如下所示:
<item name="windowActionBar">false</item>
然后运行应用程序会抛出此错误:
java.lang.RuntimeException:无法启动活动 ComponentInfo {com.seven.actionbar / com.seven.actionbar.EventsDetailActivity}: java.lang.IllegalArgumentException:AppCompat不支持 当前主题特色:{windowActionBar:false, windowActionBarOverlay:false,android:windowIsFloating:false, windowActionModeOverlay:false,windowNoTitle:false}
以下是EventsDetailsActivity.java文件中的工具栏位:
Toolbar toolbar;
CollapsingToolbarLayout collapsingToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_eventsdetail);
actionBarColor =
new ColorDrawable(ContextCompat.getColor(getApplicationContext(), R.color.ufl_orange));
tDes = (TextView)findViewById(R.id.evt_desc);
tVenue = (TextView)findViewById(R.id.evt_venue);
tDate = (TextView)findViewById(R.id.evt_date);
tTime = (TextView)findViewById(R.id.evt_time);
tPdate = (TextView)findViewById(R.id.evt_post_date);
tPtime = (TextView)findViewById(R.id.evt_post_time);
tCont = (TextView)findViewById(R.id.evt_contact);
tOrg = (TextView)findViewById(R.id.evt_org);
tCount = (TextView)findViewById(R.id.evt_count);
//Intent intent = getIntent();
//joinMap = (HashMap)intent.getSerializableExtra("e_uMap");
myApp = (MyApp)getApplication();
//action bar magic
actionBarColor.setAlpha(0);
toolbar = (Toolbar) findViewById(R.id.anim_toolbar);
setSupportActionBar(toolbar);
collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
ImageView header = (ImageView) findViewById(R.id.header);
new LoadDetail().execute();
goingSwitch = (Switch) findViewById(R.id.btn_join);
goingSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
new JoinEvents().execute(String.valueOf(isChecked));
}
});
}
@Override
public void onStart(){
super.onStart();
// actionBar = this.getActionBar();
// actionBar.setDisplayShowHomeEnabled(false);
}
以下是与之相关的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".EventsDetailActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/monalisa"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"/>'
</android.support.design.widget.CoordinatorLayout>
ScrollView
及相关的子元素(此处未显示)是该页面的主要内容。
还将主题修改为:
<style name="EventsTheme" parent="Theme.AppCompat.Light">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
IllegalStateException
和RuntimeException
消失后,我再也看不到CoordinatorLayout
。
假
答案 0 :(得分:4)
java.lang.IllegalStateException:此Activity已经有一个动作 酒吧提供的窗户装饰。不要求 Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false 您的主题是使用工具栏。
请阅读有关AppCompat
的正式文件请设置 parent="Theme.AppCompat.NoActionBar"
而不是
的父=&#34; Theme.AppCompat.Light 强>&#34;
避免重复库调用。 support:appcompat
在 build.gradle
部分中拨打了两次电话。
您可以在 SO
上查看类似类型的问题答案 1 :(得分:4)
为什么需要使用Toolbar
?你需要支持一些旧的Android版本吗?
关键是Toolbar
实际上不是ActionBar
。它缺少一些功能,迫使您在活动中使用明确的主题。因此,如果您不需要支持某些旧版本的Android (v7.Toolbar is for SDK 7 (Android 2.1).
哦,顺便说一句:你想做什么叫做折叠工具栏布局。查看此链接以获取教程 http://antonioleiva.com/collapsing-toolbar-layout/
P.S。不要编译同一个库的不同版本!不要这样做:
compile 'com.android.support:appcompat-v7:23.0.1'
compile project(':viewPagerIndicator')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
相反,请将其更改为:
compile 'com.android.support:appcompat-v7:23.0.1'
compile project(':viewPagerIndicator')
compile 'com.android.support:design:23.0.1'