【发布时间】:2016-10-11 08:31:55
【问题描述】:
我已经用 Eclipse 构建了一些 Android 应用,现在我开始使用 Android Studio 进行开发
我已经关注这个Build a Material Design App Tutorial
我使用导入在 Android Studio 上成功运行了本教程,并且在设备中完美运行
所以,我已经全新安装了最新的 Android Studio,也下载了最新的 sdk
现在,我想在我的应用中实现它
我尝试过的步骤
创建新项目
将教程中的所有活动复制到我的应用中
将教程中的所有剩余文件夹复制到我的应用程序
将教程中 android manifest 中的应用程序设置复制到我的应用程序
将教程中的 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