[英]Android Material Design on new project in Android Studio
我已經使用Eclipse構建了一些Android應用,現在我開始使用Android Studio進行開發
我已遵循此構建材料設計應用程序教程
我使用導入功能在Android Studio上成功運行了本教程,並在設備中完美運行
所以,我重新安裝了最新的Android Studio,也下載了最新的SDK。
現在,我想在我的應用中實現它
我嘗試過的步驟
建立新專案
將教程中的所有活動復制到我的應用中
將教程中的所有其余文件夾復制到我的應用中
將教程中的Android清單中的應用程序設置復制到我的應用程序
將教程中的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設計支持庫。
更多信息:此處有更多庫
答案很簡單,問題是主題
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.