我正在开发一个Android应用程序。在我决定在主题中使用材料设计之前,一切似乎都很完美。添加材料设计主题后,布局预览不会显示预览,但是在手机上构建时效果很好。删除xml中使用的材料设计组件时,一切工作正常。
附加我的代码:
activity_home.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="@color/background"
tools:context=".home.Home">
<com.google.android.material.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_centerInParent="true"
android:id="@+id/logout"
android:text="LOG OUT"
/>
</RelativeLayout>
HomeActivity.java
package com.****.*****.home;
import androidx.appcompat.app.AppCompatActivity;
import com.hashimshafiq.prepup.R;
import butterknife.OnClick;
public class Home extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
}
@OnClick(R.id.logout) void onClickLogout(){
}
}
build.graple(应用程序模块)
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.****.*****"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
buildToolsVersion = '28.0.3'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
implementation 'com.google.firebase:firebase-database:16.0.4'
implementation 'com.google.firebase:firebase-auth:16.0.5'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation "com.google.android.material:material:1.1.0-alpha09"
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
implementation 'com.facebook.android:facebook-android-sdk:5.2.0'
}
build.gradle(Prepup)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTextField" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="boxBackgroundColor">@color/background</item>
<item name="boxStrokeColor">@android:color/white</item>
<item name="hintTextColor">@android:color/white</item>
</style>
</resources>
主要在布局预览中出现的错误
java.lang.IllegalArgumentException:java.lang.ClassCastException@b83d5b8 在sun.reflect.GeneratedMethodAccessor509.invoke(未知来源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498) 在android.animation.PropertyValuesHolder_Delegate.callMethod(PropertyValuesHolder_Delegate.java:108) 在android.animation.PropertyValuesHolder_Delegate.nCallFloatMethod(PropertyValuesHolder_Delegate.java:143) 在android.animation.PropertyValuesHolder.nCallFloatMethod(PropertyValuesHolder.java) 在android.animation.PropertyValuesHolder.access $ 400(PropertyValuesHolder.java:38) 在android.animation.PropertyValuesHolder $ FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1387) 在android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:990) 在android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:674) 在android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:637) 在android.animation.ValueAnimator.start(ValueAnimator.java:1069) 在android.animation.ValueAnimator.start(ValueAnimator.java:1088) 在android.animation.ObjectAnimator.start(ObjectAnimator.java:852) 在android.animation.ValueAnimator.startWithoutPulsing(ValueAnimator.java:1081) 在android.animation.AnimatorSet.handleAnimationEvents(AnimatorSet.java:1142) 在android.animation.AnimatorSet.startAnimation(AnimatorSet.java:1227) 在android.animation.AnimatorSet.start(AnimatorSet.java:729) 在android.animation.AnimatorSet.start(AnimatorSet.java:684) 在android.animation.StateListAnimator.start(StateListAnimator.java:188) 在android.animation.StateListAnimator.setState(StateListAnimator.java:181) 在android.view.View.drawableStateChanged(View.java:21105) 在android.widget.TextView.drawableStateChanged(TextView.java:5283) 在androidx.appcompat.widget.AppCompatButton.drawableStateChanged(AppCompatButton.java:156) 在android.view.View.refreshDrawableState(View.java:21160) 在android.view.View.dispatchAttachedToWindow(View.java:18379) 在android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) 在android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) 在android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) 在android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) 在android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.java:42) 在com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:335) 在com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:391) 在com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:195) 在com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:540) 在com.android.tools.idea.rendering.RenderTask.lambda $ inflate $ 5(RenderTask.java:666) 在java.util.concurrent.CompletableFuture $ AsyncSupply.run(CompletableFuture.java:1590) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)
注意:应用程序在Moble上运行正常,但是布局预览无法显示布局,这就是问题所在。
谢谢。
修改 我已经完成了以下解决方案,但没有任何反应,错误仍然存在。
答案 0 :(得分:0)
在进行以下更改后刷新布局:
1)从文件 activity_home.xml 中的父布局中删除行tools:context=".home.Home"
。
2)将文件 HomeActivity.java 中的类 Home 的名称更改为 HomeActivity 。
3)使用gradle文件重新同步项目。
这不是由于XML /后端代码中的错误引起的。这是由于Android Studio中的一个错误引起的,here可以在3.6 Canary 3版本(API 29和material_version ='1.1.0-alpha08')中得到修复。