这里我尝试在我的应用程序屏幕中添加菜单,当我运行应用程序时,它崩溃并显示这个错误:@layout/activity_main
不包含id为webview
的声明了解我的问题,看看我的代码
活动布局<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:itemIconTint="@drawable/tab"
app:itemTextColor="@drawable/tab"
app:headerLayout="@layout/nav_header"
app:menu="@menu/menu" />
</androidx.drawerlayout.widget.DrawerLayout>
和这个内容布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".MainActivity"
android:orientation="vertical">
<WebView
tools:context=".MainActivity"
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</WebView>
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
</LinearLayout>
部分我的代码从主活动(因为它太长),错误显示与此(R.id.webview)
public class MainActivity extends AppCompatActivity {
LinearLayout LinearLayoutView;
private WebView webView;
private AdView mAdView;
private InterstitialAd mInterstitialAd;
DrawerLayout drawer_layout;
NavigationView nav_view;
ActionBarDrawerToggle drawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawer_layout = findViewById(R.id.drawer_layout);
nav_view = findViewById(R.id.nav_view);
drawerToggle = new ActionBarDrawerToggle(this,drawer_layout, R.string.open, R.string.close);
drawer_layout.addDrawerListener(drawerToggle);
drawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
nav_view.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.nav_item01:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item02:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item03:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item04:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item05:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item06:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item07:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_share:
{
ShareApp();
}
case R.id.rateapp:
{
RateApp();
}
case R.id.moreapps:
{
MoreApps();
}
}
return false;
}
});
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webviewscreen();
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSaveFormData(false);
webSettings.setSupportZoom(false);
webSettings.setGeolocationEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setUseWideViewPort(true);
webSettings.setDomStorageEnabled(true);
webView.setHapticFeedbackEnabled(false);
错误:
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.example.webview, PID: 8114
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.example.webview/app.example.webview.MainActivity}: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class com.google.android.material.navigation.NavigationView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
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 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:775)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:197)
at app.example.webview**strong text**.MainActivity.onCreate(MainActivity.java:58)
at android.app.Activity.performCreate(Activity.java:7009)
at android.app.Activity.performCreate(Activity.java:7000)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: android.content.res.Resources$NotFoundException: Can't find ColorStateList from drawable resource ID #0x7f0700f6
at android.content.res.ResourcesImpl.loadColorStateList(ResourcesImpl.java:1013)
at android.content.res.Resources.getColorStateList(Resources.java:1021)
at androidx.core.content.res.ResourcesCompat$Api23Impl.getColorStateList(ResourcesCompat.java:688)
at androidx.core.content.res.ResourcesCompat.getColorStateList(ResourcesCompat.java:244)
at androidx.core.content.ContextCompat.getColorStateList(ContextCompat.java:558)
at androidx.appcompat.content.res.AppCompatResources.getColorStateList(AppCompatResources.java:48)
at androidx.appcompat.widget.TintTypedArray.getColorStateList(TintTypedArray.java:179)
at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:213)
E/AndroidRuntime: at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:141)
26 more
我看了很多视频,他们和我做的一模一样,这对他们很有帮助
在您的MainActivity
类中,您将视图设置为:
setContentView(R.layout.activity_main);
但是,您的布局文件activity_main.xml
不包含WebView
小部件,因此您得到该错误。
请尝试在activity_main.xml
文件中移动/创建WebView
小部件以解决此错误。
希望对你有帮助。
从您的日志堆栈跟踪中,它表明您的NavigationView
有问题:
. lang。运行时异常:无法启动活动ComponentInfo{app.example.webview/app.example.webview。MainActivity}: android.view.InflateException:二进制XML文件行#23:二进制XML文件行#23:错误膨胀类com.google.android. materier .navigation. navigationview
主要原因应该是:
原因:android.content.res。$NotFoundException:无法从可绘制的资源ID #0x7f0700f6中找到ColorStateList
所以你的@drawable/tab
:
<com.google.android.material.navigation.NavigationView
...
app:itemIconTint="@drawable/tab"
app:itemTextColor="@drawable/tab"
... />
您应该检查@drawable/tab
的值是否正确定义。
在你的activity_main.xml文件中,你必须添加如下的include标签
<androidx.drawerlayout.widget.DrawerLayout
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/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="HardcodedText">
<include
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="your content layout like this @layout/content" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/navigation_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
这个包含标签帮助MainActivity.java在类中找到(R.id.webview),由于这个包含标签android.view.InflateException
将解决和你的应用程序顺利运行。