Android开车第一弹-MaterialDesign设计规范
本文是Android学的一个随笔
会iOS再来学Android,一切就像行云流水一样融会贯通,从某种意义上来讲,Android比iOS简单,iOS能够实现更精细的布局,但是也更复杂。Android大条随意,这也是为什么我想学习它的原因。
本文由中南大学较为牛逼的研究生金天同学原创,欢迎转载,但是请保留这段版权信息,如果你对文章有任何疑问,欢迎微信联系我:jintianiloveu。牛逼大神一一为你解答!
自定义ToolBar
学习Android一个很重要的问题就是自定义一个美观的toolbar,而很多人不懂得设计规范,各种直接拖按钮上toolbar,太猥琐了。人家google明明有标准的规范为什么不用,非得自作聪明的乱加。 好了不多说了,自顶一个一个toolbar步骤如下: * 更改主题为NoActionBar 这是第一步,也是最重要的一步,要用toolbar,首先把Actionbar去掉。去掉的方法也很简单,直接设置styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:actionMenuTextColor">@color/colorWhite</item>
</style>
这样以来又有个问题,这里设置了主题是light,那么toolbar的文字就会变成黑色,我们进一步定义一个toolbar的theme:
<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
<item name="actionMenuTextColor">@android:color/white</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:popupMenuStyle">@style/Platform.ThemeOverlay.AppCompat.Light</item>
</style>
这里定义了toolbar主题的文字颜色。你设置了NoActionbar之后,实际上在AndroidStudio上的designer就没有ActionBar了,还需要从空间中拖入一个toolbar到actiivity_main.xml,这样的话我们就实现了,toolbar。但是只是一个toolbar我们还没有加入menu
- 添加menu
添加menu,先不管代码,新建一个menu的布局文件,直接拖入menu即可,如果你要想menu在toolbar显示呢就设置
app:showAsAction="always"
AndroidStudio现在有个好处就是都可以直接在界面上设置了,甚至不用写代码。 然后我们在activity java文件中写代码:Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);
这两行代码就设置了我们的toolbar为actionbar了。接着处理menu事件,首先导入包:import android.view.Menu; import android.view.MenuItem;
不导入包,ide不会提示你重写哪几个方法。所以还是导入一下比较好。接着我们就可以开车了:public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.toolbar_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.settings: System.out.println("====>settings"); break; case R.id.more: System.out.println("=====>more"); break; case R.id.about: System.out.println("====>about"); break; default: break; } return true; }
这两个方法就可以实现那啥了。
使用recyclerview
学习一个移动操作系统必须得学习list的使用,在安卓中就是recyclerview,在iOS中就是tableview和collectionview。扯远了,安卓使用recyclerview其实也是很简单的。 * 在主界面中拖入一个recyclerview 这个不需要多说,有手的人都能托,而且大家的手又都这么健壮…
新建一个recyclerview item的布局文件 我不得不说一下安卓跟iOS开发的巨大不同啊,iOS讲究的是精细,美观,所以布局是个很头疼的问题,而安卓就不一样,不管你怎么拖好像它都能帮你自动适配,不过安卓也很难做出iOS那样精细的页面,不过没有关系,好在我们的安卓手机屏幕都很大,加上我们的material design还是非常美观的,也非常符合这种设计语言和风格。、 布局文件随便拖入几个控件或者textview,接下来我们就写控制器来控制他们。
写适配器,类似于iOS中的tableviewcellcontroller 适配器也很简单,首先你要导入包,否则不会提示你重写的方法。
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.*; import android.view.LayoutInflater;
貌似这些包都要用到。没有关系,接下来我们就重写方法了,一个完整的适配器例子如下:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { private Context context; private List<String> data; public RecyclerViewAdapter(Context context, List<String> data){ this.context = context; this.data = data; } public RecyclerViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ View view = LayoutInflater.from(context).inflate(R.layout.list_item_layout, null); return new MyViewHolder(view); } public void onBindViewHolder(RecyclerViewAdapter.MyViewHolder holder, int position){ String res = data.get(position); holder.tv1.setText("nihao"); } public int getItemCount(){ return 20; } class MyViewHolder extends ViewHolder{ TextView tv1; public MyViewHolder(View view){ super(view); tv1 = (TextView) view.findViewById(R.id.textView); } } }
最后一部,找到recyclerview,设置适配器 最后一步很简单,直接贴代码了 ``` RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
ArrayList
LinearLayoutManager manager = new LinearLayoutManager(this); manager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(manager); recyclerView.setItemAnimator(new DefaultItemAnimator());
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, dataArray); recyclerView.setAdapter(adapter); ```