【问题标题】:Android Material Design on new project in Android StudioAndroid Studio 中新项目的 Android Material Design
【发布时间】:2016-10-11 08:31:55
【问题描述】:

我已经用 Eclipse 构建了一些 Android 应用,现在我开始使用 Android Studio 进行开发

我已经关注这个Build a Material Design App Tutorial

我使用导入在 Android Studio 上成功运行了本教程,并且在设备中完美运行

所以,我已经全新安装了最新的 Android Studio,也下载了最新的 sdk

现在,我想在我的应用中实现它

我尝试过的步骤

  1. 创建新项目

  2. 将教程中的所有活动复制到我的应用中

  3. 将教程中的所有剩余文件夹复制到我的应用程序

  4. 将教程中 android manifest 中的应用程序设置复制到我的应用程序

  5. 将教程中的 build.gradle(module app) 复制到我的应用中

但它显示错误,然后我开始追踪问题,发现了一些东西

    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.NavigationView;
    import android.support.design.widget.Snackbar;
    import android.support.design.widget.TabLayout;
    import android.support.graphics.drawable.VectorDrawableCompat;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.content.res.ResourcesCompat;
    import android.support.v4.view.GravityCompat;
    import android.support.v4.view.ViewPager;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;

    import java.util.ArrayList;
    import java.util.List;


    /**
     * Provides UI for the main screen.
     */
    public class MainActivity extends AppCompatActivity {

        private DrawerLayout mDrawerLayout;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            // Adding Toolbar to Main screen
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            // Setting ViewPager for each Tabs
            ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
            setupViewPager(viewPager);
            // Set Tabs inside Toolbar
            TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
            tabs.setupWithViewPager(viewPager);


            // Create Navigation drawer and inlfate layout
            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
            // Adding menu icon to Toolbar
            ActionBar supportActionBar = getSupportActionBar();

            if (supportActionBar != null) {

                // Start from this line, if I leave it uncommented, it will make the app crash

                //VectorDrawableCompat indicator
                //      = VectorDrawableCompat.create(getResources(), R.drawable.ic_menu, getTheme());
                //indicator.setTint(ResourcesCompat.getColor(getResources(),R.color.white,getTheme()));
                //supportActionBar.setHomeAsUpIndicator(indicator);
                //supportActionBar.setDisplayHomeAsUpEnabled(true);
            }



            // Set behavior of Navigation drawer
            navigationView.setNavigationItemSelectedListener(
                    new NavigationView.OnNavigationItemSelectedListener() {
                        // This method will trigger on item Click of navigation menu
                        @Override
                        public boolean onNavigationItemSelected(MenuItem menuItem) {
                            // Set item in checked state
                            menuItem.setChecked(true);

                            // TODO: handle navigation

                            // Closing drawer on item click
                            mDrawerLayout.closeDrawers();
                            return true;
                        }
                    });
            // Adding Floating Action Button to bottom right of main view
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Snackbar.make(v, "Hello Snackbar!",
                            Snackbar.LENGTH_LONG).show();
                }
            });             
        }


        // Add Fragments to Tabs
        private void setupViewPager(ViewPager viewPager) {
            Adapter adapter = new Adapter(getSupportFragmentManager());
            adapter.addFragment(new ListContentFragment(), "List");
            adapter.addFragment(new TileContentFragment(), "Tile");
            adapter.addFragment(new CardContentFragment(), "Card");
            viewPager.setAdapter(adapter);
        }

        static class Adapter extends FragmentPagerAdapter {
            private final List<Fragment> mFragmentList = new ArrayList<>();
            private final List<String> mFragmentTitleList = new ArrayList<>();

            public Adapter(FragmentManager manager) {
                super(manager);
            }

            @Override
            public Fragment getItem(int position) {
                return mFragmentList.get(position);
            }

            @Override
            public int getCount() {
                return mFragmentList.size();
            }

            public void addFragment(Fragment fragment, String title) {
                mFragmentList.add(fragment);
                mFragmentTitleList.add(title);
            }

            @Override
            public CharSequence getPageTitle(int position) {
                return mFragmentTitleList.get(position);
            }
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.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;
            } else if (id == android.R.id.home) {
                mDrawerLayout.openDrawer(GravityCompat.START);
            }
            return super.onOptionsItemSelected(item);
        }

    }

我在上面的源代码中注释了一段代码,该应用在设备上运行良好

如果我激活该代码,错误将显示如下

    E/AndroidRuntime: FATAL EXCEPTION: main
  java.lang.RuntimeException: Unable to start activity ComponentInfo{package.name.MainActivity}: android.content.res.Resources$NotFoundException: File res/drawable-mdpi-v4/ic_menu.png from xml type xml resource ID #0x7f02005e

产生问题的代码,从这里开始

    **//VectorDrawableCompat indicator
    //  = VectorDrawableCompat.create(getResources(), R.drawable.ic_menu, getTheme());**

如果我不加注释,它会导致应用崩溃

到目前为止,NavigationView、FloatingActionButton 等都运行良好

那么,VectorDrawableCompat 有什么问题,如何解决?

感谢之前

【问题讨论】:

  • 你安装了最新的SDK??
  • folder中删除Drawable
  • 我认为当你创建一个新项目时,AS会创建mipmap文件夹而不是drawable文件夹。如果是这种情况,请将R.drawable.ic_menu 更改为R.mipmap.ic_menu
  • 当我在android studio中输入时,它看起来可以绘制,据我所知,它可以读取.png和.xml文件

标签: android android-studio android-design-library


【解决方案1】:

答案很简单,问题是主题

    VectorDrawableCompat indicator = VectorDrawableCompat.create(getResources(), R.drawable.ic_menu, null);
    indicator.setTint(ResourcesCompat.getColor(getResources(),R.color.white, null));
    supportActionBar.setHomeAsUpIndicator(indicator);
    supportActionBar.setDisplayHomeAsUpEnabled(true);

我用空值设置了主题,现在它可以工作了

【讨论】:

    【解决方案2】:

    安装 Android 5.0 SDK 的 SDK 平台,然后通过 SDK-Manager 将您的 Support Library 和 Support Repository 更新到最新版本。

    查看此链接以创建材料应用程序

    http://developer.android.com/training/material/index.html

    借助支持库,您可以在旧设备上提供类似的行为,例如:

    使用材质主题 UI 小部件的子集,例如 编辑文本 微调器 单选按钮 还可以看看 android 设计支持库。

    更多信息: 更多库在这里可用

    https://android-arsenal.com/

    【讨论】:

    • 它是为 Eclipse 准备的?
    • 是的 Eclipse 试试这个。
    • 我在 Android Studio 上遇到了这个问题,但感谢您的评论
    • Okiee 所以我为你提供了 android studio 的步骤
    猜你喜欢
    • 2016-02-01
    • 2015-10-13
    • 1970-01-01
    • 2016-08-18
    • 2015-01-31
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多