导航抽屉问题(无法显示布局预览)

12

我创建了这个应用程序,并想使用抽屉式导航菜单,但当我尝试在抽屉式导航菜单的XML文件中进行编辑时,出现了"等待构建完成..."的问题,并且我没有在Android Studio左侧看到布局预览。

相关链接:

activity_main_drawer

这里找不到layout_preview

layout_preview

我尝试了这个解决方案来解决这个问题,但不幸的是对我没用。

这是activity_main_drawer.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/articles"
            android:icon="@drawable/ic_menu_camera"
            android:title="@string/articles" />
        <item
            android:id="@+id/windows"
            android:icon="@drawable/ic_menu_gallery"
            android:title="@string/windows" />
        <item
            android:id="@+id/linux"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="@string/linux" />
        <item
            android:id="@+id/miscellaneous_devices"
            android:icon="@drawable/ic_menu_manage"
            android:title="@string/miscellaneous_devices" />

        <item
            android:id="@+id/information_security"
            android:icon="@drawable/ic_menu_manage"
            android:title="@string/information_security" />

        <item
            android:id="@+id/facebook"
            android:icon="@drawable/ic_menu_manage"
            android:title="@string/facebook" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_menu_share"
                android:title="Share" />
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_menu_send"
                android:title="Send" />
        </menu>
    </item>

</menu>

主活动

    package www.pro.cs_is.com.procsis;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);



        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.miscellaneous_devices) {
            // Handle the camera action
        } else if (id == R.id.articles) {

        } else if (id == R.id.windows) {

        } else if (id == R.id.linux) {

        } else if (id == R.id.facebook) {

        } else if (id == R.id.information_security) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

更新1: 经过多次尝试,似乎是将IDE更新到3.1.2版本后出现了普遍问题,目前只有一个解决方案,正如@mtak所建议的那样,虽然它类似于预览中的顶部菜单选项。

6个回答

21

删除该行

tools:showIn="navigation_view"

从activity_main_drawer.xml中重建。这对我解决了同样的问题。不知道为什么!!!

问题在AS 3.1.3(2018年6月8日)中得到解决,但又再次出现(2018年6月16日)!!!

新的临时解决方法:

  1. 从菜单文件中删除tools:showIn="navigation_view"行。
  2. 关闭菜单文件。
  3. 重新打开并粘贴该行。
  4. 进入设计视图,查看菜单是否正常。

如果关闭菜单文件并重新打开,则问题会再次出现!文本预览仍然无法显示。


使用 AS 3.1.3 仍然存在这个问题。 - DanMossa
2
你是对的DanMossa。我不知道发生了什么事,自从我看到那个问题解决以来唯一的更新就是升级到Kotlin 1.50。 - user8959091
也适用于我。谢谢。这是2018年9月22日,问题仍然存在。 - Chandy Kunhu
嗨,我遇到了同样的问题。尝试了你提供的解决方案后,仍然无法解决。 - Devika Sujith

4
你可以尝试以下方法:
  • 运行构建,然后再次尝试预览

  • 关闭当前布局,打开另一个布局,然后重新打开


1
不幸的是,这也没有起作用,这导致在文本模式下隐藏了布局预览。 - Dr Mido
隐藏文本模式下的布局是什么意思? - user9025311
我在设计中看到了预览,但是出现了渲染问题:“在当前主题中找不到'style'协调布局风格”。 - Dr Mido
这是因为你没有任何CoordinatorLayoutStyle,它应该是CoordinatorLayout。同时尝试点击“文件”→“无效缓存/重启”。 - user9025311

1
由于您扩展了AppCompatActivity,因此需要确保在您的styles.xml中,您的AppTheme是AppCompat的后代。
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
     </style>

那对我很有效,而被接受的答案并没有帮助到我。

0

我已经找到解决方案。删除这两行工具条并关闭/重新打开:

xmlns:tools = "http://schemas.android.com/tools"

tools:showIn = "navigation_view"

0
实际上,这个问题是因为你在Activity中扩展了AppCompatActivity,而且你的父主题不是Theme.AppCompat。请在manifest.xml文件中,在应用程序标签下将此主题设置为默认主题。你的样式应该如下所示:
 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 </style>



-2
重新构建项目对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接