簡體   English   中英

Android Studio中新項目上的Android Material Design

[英]Android Material Design on new project in Android Studio

我已經使用Eclipse構建了一些Android應用,現在我開始使用Android Studio進行開發

我已遵循此構建材料設計應用程序教程

我使用導入功能在Android Studio上成功運行了本教程,並在設備中完美運行

所以,我重新安裝了最新的Android Studio,也下載了最新的SDK。

現在,我想在我的應用中實現它

我嘗試過的步驟

  1. 建立新專案

  2. 將教程中的所有活動復制到我的應用中

  3. 將教程中的所有其余文件夾復制到我的應用中

  4. 將教程中的Android清單中的應用程序設置復制到我的應用程序

  5. 將教程中的build.gradle(模塊應用)復制到我的應用中

但是它顯示錯誤,然后我開始跟蹤問題所在,並發現了一些問題

    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有什么問題,以及如何解決呢?

之前感謝

安裝Android 5.0 SDK的SDK平台,然后通過SDK-Manager將支持庫和支持存儲庫更新為最新版本。

看看這個用於創建實質性應用程序的鏈接

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

使用支持庫,您可以在較舊的設備上提供類似的行為,例如:

使用UI小部件(例如EditText Spinner RadioButton)的Material Theme子集還可以查看android設計支持庫。

更多信息:此處有更多庫

https://android-arsenal.com/

答案很簡單,問題是主題

    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);

我將主題設置為空值,現在可以正常工作了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM