问题描述
我有 2 个活动 MainActivity
来展示一些书籍和 ViewMoreActivity
来展示更多书籍,MainActivity
完美打开而 ViewMoreActivity
打开时崩溃但是当我改变 {{ 1}} 为 textColor
形式 textView
到 android:textColor="?attr/text_color
android:textColor="#000"
工作完美,那么我如何解决错误使用 ViewMoreActivity
。
我遇到的错误
attr
android.view.InflateException: Binary XML file line #27: Binary XML file line #27: Error inflating class android.widget.TextView
Caused by: android.view.InflateException: Binary XML file line #27: Error inflating class android.widget.TextView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:658)
at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:64)
at com.android.internal.policy.HwPhoneLayoutInflater.onCreateView(HwPhoneLayoutInflater.java:105)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:731)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:799)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:874)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:835)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.example.bookstore.BookAdapter.onCreateViewHolder(BookAdapter.java:34)
at com.example.bookstore.BookAdapter.onCreateViewHolder(BookAdapter.java:19)
at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:7078)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6235)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.linearlayoutmanager$LayoutState.next(linearlayoutmanager.java:2303)
at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:561)
at androidx.recyclerview.widget.linearlayoutmanager.fill(linearlayoutmanager.java:1587)
at androidx.recyclerview.widget.linearlayoutmanager.onLayoutChildren(linearlayoutmanager.java:665)
at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)
at android.view.View.measure(View.java:23454)
at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:792)
at androidx.constraintlayout.solver.widgets.analyzer.Basicmeasure.measure(Basicmeasure.java:480)
at androidx.constraintlayout.solver.widgets.analyzer.Basicmeasure.measureChildren(Basicmeasure.java:134)
at androidx.constraintlayout.solver.widgets.analyzer.Basicmeasure.solverMeasure(Basicmeasure.java:277)
at androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:119)
at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1578)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1690)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:726)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
2021-01-31 05:35:37.746 3442-3442/com.example.bookstore E/AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:726)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:847)
at android.view.View.measure(View.java:23454)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2954)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1753)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2041)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
at android.view.Choreographer.doCallbacks(Choreographer.java:893)
at android.view.Choreographer.doFrame(Choreographer.java:812)
at android.view.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:1078)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 5: TypedValue{t=0x2/d=0x7f03031d a=-1}
at android.content.res.TypedArray.getColorStateList(TypedArray.java:580)
at android.widget.TextView.readTextAppearance(TextView.java:3747)
at android.widget.TextView.<init>(TextView.java:1122)
at android.widget.TextView.<init>(TextView.java:940)
at android.widget.TextView.<init>(TextView.java:936)
在设计中的 textView
recyclerView
main_activity.xml
<TextView
android:id="@+id/TvBookName"
android:layout_width="123dp"
android:layout_height="wrap_content"
android:text="@string/book_name"
android:maxLines="2"
android:textColor="#000"
android:textSize="18sp"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/cardView" />
MainActivity.java
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.nestedScrollView
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:paddingTop="45dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/app_bar_main"
android:orientation="vertical"
android:background="?attr/background_lite2">
<TextView
android:id="@+id/TvTitle1"
style="@style/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="@string/time"
app:layout_constraintBottom_toTopOf="@id/recyclerView"
app:layout_constraintHorizontal_bias="0.077"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="10" />
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:text="@string/more2"
style="@style/viewMore"
app:layout_constraintBottom_toTopOf="@id/recyclerView"
app:layout_constraintHorizontal_bias="0.99"
app:layout_constraintLeft_toRightOf="@id/TvTitle1"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.7" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/background_lite2"
android:layout_marginTop="10dp"
android:scrollbars="horizontal"
android:scrollbarSize="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/TvTitle1" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.nestedScrollView>
view_more_activity.xml
package com.example.bookstore;
import android.content.Intent;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.core.view.GravityCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.Menu;
import android.widget.Button;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private AppBarConfiguration mAppBarConfiguration;
SharedPref sharedPref;
RecyclerView recyclerView,recyclerView2,recyclerView3,recyclerView4;
BookAdapter adapter,adapter2,adapter3,adapter4;
Button arrow,arrow2,arrow3,arrow4;
List<Book> bookList = new ArrayList<>();
private BookAdapter.RecyclerViewClickListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
sharedPref = new SharedPref(this);
if(sharedPref.NightMode()) {
setTheme(R.style.DarkTheme);
}
else setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
toggle.syncState();
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
arrow = findViewById(R.id.btn1);
arrow2 = findViewById(R.id.btn2);
arrow3 = findViewById(R.id.btn3);
arrow4 = findViewById(R.id.btn4);
recyclerView = findViewById(R.id.recyclerView);
linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this,linearlayoutmanager.HORIZONTAL,false);
recyclerView.setLayoutManager(linearlayoutmanager);
recyclerView.setHasFixedSize(true);
adapter = new BookAdapter(bookList,MainActivity.this,listener);
recyclerView.setAdapter(adapter);
recyclerView2 = findViewById(R.id.recyclerView2);
recyclerView3 = findViewById(R.id.recyclerView3);
recyclerView4 = findViewById(R.id.recyclerView4);
recyclerView2.setHasFixedSize(true);
recyclerView3.setHasFixedSize(true);
recyclerView4.setHasFixedSize(true);
linearlayoutmanager linearlayoutmanager2 = new linearlayoutmanager(this,false);
linearlayoutmanager linearlayoutmanager3 = new linearlayoutmanager(this,false);
linearlayoutmanager linearlayoutmanager4 = new linearlayoutmanager(this,false);
recyclerView2.setLayoutManager(linearlayoutmanager2);
recyclerView3.setLayoutManager(linearlayoutmanager3);
recyclerView4.setLayoutManager(linearlayoutmanager4);
setonClicklistener();
bookList.add(new Book("Java for Beginner2","To learn java language and programming essentials","120 LE",R.drawable.poster2));
bookList.add(new Book("Java for Beginner",R.drawable.poster2));
arrow.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),ViewMoreActivity.class);
startActivity(intent);
}
});
}
private void setonClicklistener() {
listener = new BookAdapter.RecyclerViewClickListener() {
@Override
public void onClick(View v,int position) {
Intent intent = new Intent(getApplicationContext(),BookActivity.class);
intent.putExtra("1",bookList.get(position).getName());
startActivity(intent);
}
};
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
return true;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id ==R.id.nav_day){
sharedPref.setNightModeState(false);
restartApp();
}
else if (id ==R.id.nav_night){
sharedPref.setNightModeState(true);
restartApp();
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
public void restartApp() {
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
ViewMoreActivity.java
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ViewMoreActivity"
android:background="?attr/background_lite2">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/AppTheme.AppBarOverlay"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/toolbar2"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
BookAdaper.java
package com.example.bookstore;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import java.util.ArrayList;
import java.util.List;
public class ViewMoreActivity extends AppCompatActivity {
RecyclerView recyclerView,adapter4;
List<Book> bookList2 = new ArrayList<>();
private BookAdapter.RecyclerViewClickListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPref sharedPref = new SharedPref(this);
if(sharedPref.NightMode()) {
setTheme(R.style.DarkTheme);
}
else setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_more);
Toolbar toolbar=findViewById(R.id.toolbar2);
setSupportActionBar(toolbar);
getSupportActionBar().setdisplayHomeAsUpEnabled(true);
getSupportActionBar().setdisplayShowHomeEnabled(true);
recyclerView = findViewById(R.id.recyclerView5);
GridLayoutManager gridLayoutManager= new GridLayoutManager(this,2);
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setHasFixedSize(true);
adapter = new BookAdapter(bookList2,getApplicationContext(),listener);
recyclerView.setAdapter(adapter);
setonClicklistener();
bookList2.add(new Book("Java for Beginner2",R.drawable.poster2));
bookList2.add(new Book("Java for Beginner",R.drawable.poster2));
}
private void setonClicklistener() {
listener = new BookAdapter.RecyclerViewClickListener() {
@Override
public void onClick(View v,bookList2.get(position).getName());
startActivity(intent);
}
};
}
@Override
public void onBackpressed() {
super.onBackpressed();
}
@Override
public boolean onSupportNavigateUp() {
onBackpressed();
return true;
}
}
解决方法
如果 text_color
是您的 colors.xml
的一部分,请尝试使用 android:textColor = "@color/text_color"
而不是 android:textColor="?attr/text_color