Android Material Design实战

前段时间,由于产品需求,对Android Material风格化做了一次深入的应用。其实去年早就陆陆续续地在接触MD了,这次的深入实践,算是真正的去了解MD,也遇到了许多的坑,不管是设计还是开发,平时看到MD官网的效果,都会让人觉得非常规范化,尤其是那些动画,着实令人瞠舌。
但是,在真正应用MD的时候,它并不像它表现的那样规范和精彩,这也误导了很多人,理所当然地以为“这就是官方支持的啊”。

我不会举出所有MD的用法,没那个精力,而且大部分还是很简单的。只是例举一些这次用到的一些控件和方法。这里要再次推出大字典! https://developer.android.com/index.html。从我入门android时,我就一直把google开发文档作为字典去使用,只是最近的大半年,由于工作,已经很少去阅读它了,这次的MD开发,让我感觉回到了翻文档的时代。不管是新手还是老鸟,开发文档是必备的,真的很有用。
接下来就切入正题了。

首先,google做了 Material Design的向下兼容,官方给出了一个兼容包,可以参考 http://android-developers.blogspot.jp/2015/05/android-design-support-library.html

Cardview在使用时,如果发现阴影不明显,需要在layout的四周设置margin,给阴影留出空间。不过暂时还有个问题,就是在5.0以下的设备中,如果设置cardPreventCornerOverlap( 在v20和之前的版本中添加内边距,这个属性是为了防止卡片内容和边角的重叠 )为true,会有白边,设置为false,就没有圆角了。个人理解,Cardview由于继承的是FrameLayout,所以说到底还是一个布局而已,圆角可能是对layout的背景进行了重新绘制,并不能真正的限制内部View的大小和显示。

elevation在使用的过程中,如果发现设置后无效,需检查设置的view是否有background,elevation要求背景不为transparent,且父布局要求有一定空间可以显示阴影。

RecyclerView在进行direction设置的时候,recyclerview首先是根据raw/col Count对屏幕进行平分,然后才对里面的adapter布局进行布局。

官方使用colorPrimaryDark来改变statusBar的颜色,需要targetSdkVersion>=21。

android.support.v7.app.AlertDialog可以一直兼容到2.3,可以保持MD的风格。在使用EditDialog的时候,它默认是不会弹出软键盘,且focus在文字的最前面,用以下代码可解决这个问题。

 
 
private void showEditTitleDialog1(String strTitle) {
        if (mActivity == null)
            return;

        final EditText editText = new EditText(mActivity);
        AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
        AlertDialog dialog = builder.create();
        dialog.setTitle(R.string.title);
        dialog.setView(editText, Util.dpToPx(mActivity, 24), 0, Util.dpToPx(mActivity, 24), 0);
        editText.setText(strTitle);
        editText.requestFocus();
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, mActivity.getResources().getString(R.string.str_com_ok), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Do something
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, mActivity.getResources().getString(R.string.str_com_cancel), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            public void onShow(DialogInterface dialog) {
                InputMethodManager imm = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
            }
        });
        dialog.show();
    }

类似于menu的list dialog,可以使用popupMenu。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值