手机参数Design:Bar参数是什么意思思

Material Design之TextInputLayout、Snackbar的使用
时间: 15:45:04
&&&& 阅读:44
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&这两个控件也是Google在2015 I/O大会上发布的Design Library包下的控件,使用比较简单,就放在一起讲了,但有的地方也是需要特别注意一下。
TextInputLayout
TextInputLayout功能非常简单,就是用于用户在EditText中输入时hint的提示和错误的提示。
先来看看效果图吧:
从上图很明显的看出:
1、当EditText获得焦点时候,TextInputLayout会在左上角默认的生成一个Label用来显示EditText中hint的内容,所以当用户输入时候hint内容会浮动到左上角,这极大便利了用户输入提交数据的体验。
2、当EditText中输入的内容不合法时,TextInputLayout便会在EditText的左下角用红色显示错误的提示信息。这是怎么回事呢?我们来看看TextInputLayout的源码,发现TextInputLayout中有个setErrorEnabled(boolean enabled)方法,意思就是是否设置错误提示信息:
从源码中我们很清晰的看到TextInputLayout的错误提示的工作原理了。总结就是:如果传入true,则TextInputLayout会在左下角生成一个TextView用来显示错误信息,如果传入false,则移除TextView从而不显示错误信息。从源码中我们还可以看到setError(CharSequence error);这个方法,顾名思义,这个方法就是当我们设置需要显示错误提示信息setErrorEnabled(true),我们再使用setError()方法把我们需要设置的错误提示信息传入到TextView中显示出来。
下面来看看怎么用代码实现:
布局activity_main.xml:
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&&
&android.support.design.widget.TextInputLayout
android:id=&@+id/textInput_layout_name&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:hint=&user_name& /&
&/android.support.design.widget.TextInputLayout&
&android.support.design.widget.TextInputLayout
android:id=&@+id/textInput_layout_password&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_marginTop=&20dp&
android:hint=&user_password& /&
&/android.support.design.widget.TextInputLayout&
&/LinearLayout&在代码中实现:
TextInputLayout mTextInputLayoutName = (TextInputLayout) findViewById(R.id.textInput_layout_name);
TextInputLayout mTextInputLayoutPassword = (TextInputLayout) findViewById(R.id.textInput_layout_password);
//mTextInputLayoutName.getEditText()返回的是它的子EditText控件,一个TextInputLayout只能包含一个EditText控件
mTextInputLayoutName.getEditText().addTextChangedListener(new MyTextWatcher(mTextInputLayoutName, &用户名长度不能小于6位&));
mTextInputLayoutPassword.getEditText().addTextChangedListener(new MyTextWatcher(mTextInputLayoutPassword, &密码长度不能小于6位&));MyTextWatcher代码:
class MyTextWatcher implements TextWatcher {
private TextInputLayout mTextInputL
private String errorI
public MyTextWatcher(TextInputLayout textInputLayout, String errorInfo) {
this.mTextInputLayout = textInputL
this.errorInfo = errorI
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
public void onTextChanged(CharSequence s, int start, int before, int count) {
public void afterTextChanged(Editable s) {
if (mTextInputLayout.getEditText().getText().toString().length() & 6) {
mTextInputLayout.setErrorEnabled(true);//是否设置错误提示信息
mTextInputLayout.setError(errorInfo);//设置错误提示信息
mTextInputLayout.setErrorEnabled(false);//不设置错误提示信息
其中,需要注意两点:
1、TextInputLayout布局中只能包含一个EditText子View,不能包含多个EditText。
2、TextInputLayout中有个方法getEditText();该方法返回的是它的子EditText对象,所以我们可通过mTextInputLayout.getEditText();来得到EditText对象,不需要findViewById找了。
3、设置错误提示信息时一定要先setErrorEnabled(true);再设置setError(...);因为TextView只在setErrorEnabled()方法中创建,必须创建好TextView才能往TextView上设置信息。而不需要设置时直接setErrorEnabled(false);即可,因为它自身会remove移除TextView。
Snackbar是带有动画效果的提示条,它极具美观效果,它出现在屏幕的底部,它和Toast类似,不过却有的地方和Toast不同,Snackbar可以添加按钮,可以支持滑动删除,也可以不作任何操作自身会在几秒(1.5s或2.75s)后消失。最值得注意的一点就是Snackbar不能同时显示多个,只能一次显示一个,而Toast可以同时显示多个这和Toast不同。
现在来看看怎么实现吧:
1、普通Snackbar:
代码实现:
Snackbar.make(rootView, &This is a SnackBar&, Snackbar.LENGTH_SHORT).show();//第一个参数是SnackBar显示在哪个视图上,必须设置,不能为null,一个界面也不能同时显示两个SnackBar其中特别需要注意第一个参数,它表示Snackbar是显示在哪个视图上,不可为null,比如我们可以通过页面中其它的view.getRootView()得到根视图,再把rooView设置进去即可。
2、带有按钮的Snackbar:
代码实现:
//带按钮的SnackBar
Snackbar.make(rootView,&带按钮的SnackBar&,Snackbar.LENGTH_SHORT).setAction(&UNDO&, new View.OnClickListener() {
public void onClick(View v) {
//do something ...
}).show();
好了,这两个控件就讲完了。。。
其中别忘记添加对design Library的依赖哦!
由于比较简单,就不上传源码了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:&&&&&&&&&&&&
&&&& &&&&&&
&& && && &&&&
版权所有 鲁ICP备号-4
打开技术之扣,分享程序人生!亚马逊意外错误报歉,由于程序执行时,遇到意外错误,您刚刚操作没有执行成功,请稍后重试。或将此错误报告给我们的客服中心:推荐您,确认您的操作无误后,再继续其他操作。您可以通过亚马逊,获得更多的帮助。Android Support Design 库 之 Snackbar使用及源码分析
-------------
新增文件夹...
新增文件夹
(多个标签用逗号分隔)
在谷歌提出&material design 之后,终于推出了&android.support.design 这个官方的material design库,这几天我也简单浏览了下这个库,基本上我们常用的组件都有了,从今天开始,就可以一步步替换掉
以前使用的github上的那些开源控件了,毕竟谷歌出品 才属精品~~另外分析这个design库的源码我认为是非常有意义的,android上的app 在以前各家都有各家的风格,但是在谷歌出了material design这门新的
设计语言以及官方的库以后,相信越来越多的app 会逐步优化自己的ui 来符合官方的标准,学习这个design库的源码可以让我们以后改写自定义控件的时候更加柔韧有余。
首先,来看一下这个官方的介绍。/design/spec/components/snackbars-toasts.html#
这个文章系统的阐述了 snackbar和toast的区别和正确使用snackbar的方式。
我简单归纳如下:
1.比toast更加好,毕竟snackbar 可以响应点击事件
2.snackbar 同一时间有且只有一个在显示。
3.snackbar 上不要有图标
4.snackbar上action 只能有一个。
5.如果有悬浮按钮 floating action button的话,snackbar 在弹出的时候 不要覆盖这个button.
6.此外我个人认为snackbar 在一定程度上可以替代dialog的某些应用场景。比如以前网络不通的情况下 我们登陆失败,会给一个dialog提示,现在就可以用snackbar 来做这个有action的提示 更加方便快捷。
使用snackbar:
1.导入support design 库 (这一步在以后的design库的 控件文章里都会舍去)
首先找到你app的build gradle文件
然后增加一个compile语句即可
compile 'com.android.support:design:22.2.0'
2.编写xml文件以及java文件
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:id="@+id/layout"&
&!-- 因为snackbar 需要有一个父控件所以 我们暂时就用tv 来做他的父控件--&
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_centerVertical="true"
android:gravity="center"
android:text="Bottom layout" /&
&/RelativeLayout&
package com.example.burning.
import android.os.B
import android.support.design.widget.S
import android.support.v7.app.ActionBarA
import android.view.M
import android.view.MenuI
import android.view.V
import android.widget.TextV
public class MainActivity extends ActionBarActivity {
private TextV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) this.findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//这个地方第一个参数&&&&传进去的是tv&&&&但是实际上你无论传进去什么值 snackbar都一定是从屏幕的最底端出现的&&&&原因在源码
//分析那边可以看到
Snackbar.make(tv, "connection error", Snackbar.LENGTH_LONG).setAction("retry", new View.OnClickListener() {
public void onClick(View v) {
tv.setText("aleady click snackbar");
}).show();
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
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 super.onOptionsItemSelected(item);
最后我们来看下效果
&然后我们来看一下 如果和正常的FAB(悬浮按钮)在一起会有什么效果(注意这里的悬浮按钮我们也使用design库里的并不使用github上开源的)
先看一下xml文件
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"&
&FrameLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&android.support.design.widget.FloatingActionButton
android:id="@+id/btnFloatingAction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:src="@drawable/ic_plus"
app:borderWidth="0dp"
app:fabSize="normal" /&
&/FrameLayout&
&/RelativeLayout&
activity代码 package com.example.burning.
import android.os.B
import android.support.design.widget.S
import android.support.v7.app.ActionBarA
import android.view.M
import android.view.MenuI
import android.view.V
import android.view.ViewG
public class MainActivity extends ActionBarActivity {
private ViewG
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout = (ViewGroup) this.findViewById(R.id.layout);
layout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Snackbar.make(layout, "connection error", Snackbar.LENGTH_LONG).setAction("retry", new View.OnClickListener() {
public void onClick(View v) {
}).show();
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
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 super.onOptionsItemSelected(item);
来看一下运行效果
大家可以看到当我们的snackbar在弹出的时候&&&&会覆盖到我们的FAB,那这体验是非常糟糕的,这里也给出一个完美的解决方案
其实也很简单用一下design库里的layout即可&&&&java代码不需要改变&&&&只要稍微改一下布局文件即可
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"&
&android.support.design.widget.CoordinatorLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&android.support.design.widget.FloatingActionButton
android:id="@+id/btnFloatingAction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:src="@drawable/ic_plus"
app:borderWidth="0dp"
app:fabSize="normal" /&
&/android.support.design.widget.CoordinatorLayout&
&/RelativeLayout&
就是换了一个新的layout而已。
来看下运行的效果。
当然了 你要改变这个snackbar的背景色也是可以的 只需要
Snackbar sb=Snackbar.make(layout, "connection error", Snackbar.LENGTH_LONG).setAction("retry", new View.OnClickListener() {
public void onClick(View v) {
sb.getView().setBackgroundColor(0xfff44336);
sb.show();
基本的用法 要点就是这些,我们来看一下这个snackbar的源码 & 看看谷歌官方是如何编写&material design 风格控件的 这里我无法贴上全部源码 因为太多,只挑重要的流程说 可以从make开始。
//这个地方就是构造函数
Snackbar(ViewGroup parent) {
this.mParent =
this.mContext = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(this.mContext);
this.mView = (Snackbar.SnackbarLayout)inflater.inflate(layout.layout_snackbar, this.mParent, false);
//这个地方就是我们调用的make函数 也就是整个类的一个入口 在这里可以看到 我们的代码转入了snackbar的构造函数
public static Snackbar make(View view, CharSequence text, int duration) {
//注意看这个地方调用了 findsuitableparent这个函数
Snackbar snackbar = new Snackbar(findSuitableParent(view));
snackbar.setText(text);
snackbar.setDuration(duration);
public static Snackbar make(View view, int resId, int duration) {
return make(view, view.getResources().getText(resId), duration);
//这个函数其实作用就是无论你传进去的是什么view 我最终都会遍历到framlayout为止,因为activity的最外层实际上就是一个framlayout
//所以你在调用make函数的时候无论传什么值进去 snackabr都会从最底部弹出来 就是因为这个函数做了这样的工作 但是!!!!
&&&&&&&&&&&&&&&&//如果在遍历到最顶部的framlayout之前 遇到了一个framelayout 那么就会从这个framlayout的底部弹出,而不会从屏幕的最下方弹出了。
//这个地方CoordinatorLayout的优先级比framlayout还要高 所以你如果穿进去的view是CoordinatorLayout的话 这个snackbar 就一定会从
//CoordinatorLayout 底部弹出了。如果你CoordinatorLayout的最底部恰好在屏幕中间 那么snackbar 就会从屏幕中间弹出
而不会从底部弹出 这一点一定要注意
private static ViewGroup findSuitableParent(View view) {
ViewGroup fallback =
if(view instanceof CoordinatorLayout) {
return (ViewGroup)
if(view instanceof FrameLayout) {
if(view.getId() == ) {
return (ViewGroup)
fallback = (ViewGroup)
if(view != null) {
ViewParent parent = view.getParent();
view = parent instanceof View?(View)parent:
} while(view != null);
大家可以看一下第六行。实际上这个mView就是一个内部类的对象
1 private final Snackbar.SnackbarLayout mV
然后接着看第六行的xml文件(到这里其实我们也能猜到了 真正自定义view的snackbar是由snackbar的内部类snackbarlayout来完成的)
&?xml version="1.0" encoding="utf-8"?&
~ Copyright (C) 2015 The Android Open Source Project
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
&!--注意看class那边的写法
那个$就是代表内部类的一个符号 这个技巧 以后我们自己自定义控件的时候也可以学习--&
&view xmlns:android="/apk/res/android"
class="android.support.design.widget.Snackbar$SnackbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
style="@style/Widget.Design.Snackbar" /&&!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-_a_platform_manifest.git/lmp-mr1-supportlib-release/frameworks/support/design/res/layout/layout_snackbar.xml --&
继续看下内部类
找到我们真正的snackbar的布局文件 注意这个地方讨巧的使用了merge标签 这是一个比较好的优化xml的 写法
&?xml version="1.0" encoding="utf-8"?&
~ Copyright (C) 2015 The Android Open Source Project
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
&merge xmlns:android="/apk/res/android"&
android:id="@+id/snackbar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="@dimen/snackbar_padding_vertical"
android:paddingBottom="@dimen/snackbar_padding_vertical"
android:paddingLeft="@dimen/snackbar_padding_horizontal"
android:paddingRight="@dimen/snackbar_padding_horizontal"
android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
android:maxLines="@integer/snackbar_text_max_lines"
android:layout_gravity="center_vertical|left|start"
android:ellipsize="end"/&
android:id="@+id/snackbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/snackbar_extra_spacing_horizontal"
android:layout_marginStart="@dimen/snackbar_extra_spacing_horizontal"
android:layout_gravity="center_vertical|right|end"
android:background="?attr/selectableItemBackground"
android:paddingTop="@dimen/snackbar_padding_vertical"
android:paddingBottom="@dimen/snackbar_padding_vertical"
android:paddingLeft="@dimen/snackbar_padding_horizontal"
android:paddingRight="@dimen/snackbar_padding_horizontal"
android:visibility="gone"
android:textAppearance="@style/TextAppearance.Design.Snackbar.Action"/&
&/merge&&!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-_a_platform_manifest.git/lmp-mr1-supportlib-release/frameworks/support/design/res/layout/layout_snackbar_include.xml --&
到这里 主要的snackbar的一个加载流程就分析完毕了,很多诸如动画的代码部分 我就暂时不去分析他了,大家可以自己仔细分析。
另外有心的同学可能发现了这么一个代码
实际上Behavior 我个人认为是这次support design库里面最重要的一个东西,以后我会单独出来讲一下。基本上support design包里 每一个控件都有她的身影出没。
相关资讯  — 
相关文档  — 
发布时间: 15:08:20
同类热门经验
70326次浏览
151457次浏览
56313次浏览
90801次浏览
56936次浏览
OPEN-OPEN, all rights reserved.目前 Android design 的应用开发会让魅族的 smart bar 迎来春天吗?
魅族的 smart bar 和 Android design 有异曲同工之处,随着安卓市场的规范,及国内软件行业的发展,魅族会不会因为坚持 smart bar 的设计理念而成为国内行业的领头羊?具体可以参见微信新版本及魅族 QQ 内置版本~
按投票排序
答:目前不会,将来也不会。有一种情况下可能,就是谷歌把smartbar吸收进android design。
SBar根本就不是android design的一部分,甚至还会与之冲突。我说过SBar是SplitActionBar和NavigationBar的混合产物。
我们先来看NavigationBar。谷歌表示要强制显示NavigationBar,但是只要厂商只要手机时还设置单独按键就一定会干掉NavigationBar。魅族是不可能去掉自己的home键的,所以魅族在这一点上就跟android design背道而驰。
再来看SplitActionBar。这个东西已经基本不出现了,谷歌不鼓励这个,同样是出于避免双底栏现象。而且安卓很忌讳使用iOS应用上的底部Tab,鼓励使用滑动Tab。从这一点上SBar同样与android design背道而驰。
结论,这玩意跟android design根本不是一回事。更不可能借android design东风。引用一下我的另一个回答,供参考。
估计希望很渺茫,魅族一直想以苹果的思路,结合谷歌action bar研发属于自己的rom,无奈自己是安卓的命……摆脱不了自己的宿命,挣扎在苹果的极简和安卓的复杂混乱之间……
不会. 首先, 遵循 Android Design 和适配 Smart Bar 之间没有任何必然联系. 就在题主举的例子中, 微信 5.2 大体靠近了 Android Design, 但完全不兼容 Smart Bar, QQ 魅族专版则不符合 Android Design —— 很多兼容 Smart Bar 的应用其实都是不符合 Android Design 的, 比如布卡漫画专版. 欲知详情请阅读: . 这里有更详细的解释.
连私生子都不是怎么来分财产。1,只有一小部分使用Android设计的应用程序能满足Sbar的条件。
2,微信5.2便能证明1,它可能自己实现了Actionbar的控件,这个放在原生/兼容Android一点问题都没有,反正最终用户看不出它与原生控件的区别,但在flyme这个非兼容的版本就有问题,它不认。3,用了原生控件,flyme也不见得会认(我不清楚具体情况,但例子很好找)。引用楼上 给出的例子:
“魅族的 Smart Bar 和 Android Design 有异曲同工之处”题主都有这个定论了,还问什么问题呢?
符合Android design不一定兼容smart bar,action bar里可不是仅仅只能放icon,更何况现在还有drawer。所以,大海带条估计依旧存在。微信新版至少从UI上是较符合Android Design,而魅族定制版手机QQ则是兼容了SBar但不符合Android Design。话说,多少人被魅族这狗设计误导了,自己上 ,去看看什么才是Android Design。
其实当有了魅族专版出现的时候,我就觉得现在的smartbar就错误了,一个应用开发团队从来都不愿意同样是安卓客户端,而要开发出两个版本,魅族手机用户也不想自己应用的版本,始终低于别人的版本!就像这次适配版的QQ,并不是最新的版本,实际上我更喜欢最新版的qq,而不是适配版的qq!适配版本的到来不能说是魅族的春天,但绝对不是一个坏消息,与各大应用公司的合作,是最好的决定!尽管魅族smartbar不是那么的完美,但我依然喜欢我的MX3.可能安卓版的魅族手机永远不会变完美,但魅族依然有春天,我期待ubuntu MX4!
看到很多人那微信5.2内测版来说,有个疑问,貌似微信5.2也不完全是按照Android Design来做的,最明显一点界面上方右侧的“搜索、加号和更多”这三个按钮根本不是按照Actionbar的标准来设计的,而只是外观上做成了和Actionbar样子而已~微信团队应该只是整体按照Android Design来做,但我们看到的这里为了实现更多个性化的设计需求而没用采用Actionbar标准设计,所以魅族的smartbar并不能自动的识别并整合。可以看看来自Snapseed真正的Actionbar点击“更多”时的菜单和微信“更多”菜单的对比~当然了以上都是自己根据页面显示得来的猜测,本人并不了解微信是如何实现的。利益相关:魅族MX2用户,其实我更希望软件能够按照真正的Android design标准来做设计,actionbar在上面我并不觉得好用,屏幕这么大手指去点上面的图标真的很费力,我倒是希望微信是下面这个样子的:(PS随手改改,仅供参考)
只要没有双底栏,smartbar就是成功的,魅族未来必然会加大屏幕,减小上下边框,那时海带条和home键组合会效果很好,你们不要扯什么设计名词,好的体验才是标准,大众会给出选择的
从这次放出来的适配QQ来看,深度并不够,有大量的界面依然存在双底栏的情况,如果smartbar说的是真正安卓design的都可以智能适配的话,那么现在大多数的或者说基本都不符合安卓design,只不过有专版罢了,如果专版的更新速度能跟上原应用的适配速度还好说,否则有的时候真是挺郁闷的,另外,其实适配的应用真的很好用,希望QQ和微信不光要尽快适配,还应该有深度,和更新的速度,与其这样,不如魅族和开发者聊聊给点利益让步补助使应用本身就是“安卓design”希望是安卓design的不要打脸,魅族也应该适当修改SB的适配规则,让更多的应用主动适配,否则只不过大家扁平化了没有SB,利益相关:一个很希望软件都适配的MX3用户
不会。原因千言万语总结起来就一句:smartbar不是标准的android设计规范。那退一万步讲,假设魅族开发了一个操作系统,在这个系统制定了smartbar设计规范,那应用开发者会接受吗?还是不会。因为目前的smartbar给开发者的空间太少了,只能放图标控件,只能放下面,只能放5个,返回占一个“更多”占一个剩下就只能有三个图标放上面了,想多放一个?会被挤到“更多”里,想在图标下加文字?只能也把文字做到图标里挤在狭窄的bar里(参见支付宝魅族专版)总之,要是开发者完全按照魅族的标准开发应用,就像戴着脚镣跳舞,apps的个性被严重地限制,出来的结果就是看上去都差不多,事实上你去看看现在的魅族专版应用们确实就是一个模子出来的,一样的呆头呆脑,一样的魅族style。更新的交互方式?更好的界面设计?别想了,能用就行。不过也许J.Wong就是要这个,你看所有应用都统一在smartbar规定的范式下,封闭的世界里完美的梦想,多好。魅族搞错了一些事,android的虚拟键最多是不好看占用屏幕空间,魅族的smartbar不仅占用屏幕空间还侵夺了开发者的设计空间。没有开发者开发牛逼的apps,再好的系统都是残废,更何况flyme还是寄人篱下呢?这样下去,跟随魅族的就只剩下铁杆粉丝了,这样真的好吗?-----------------------------------------------抱歉打着字有点情绪,见谅。
非专业回答,纯粹是一名MX2使用者的吐糟,有错误请指教。
当然不会了,两者没关系;不想要sb,还想要支持魅族机型,怎么办?actionbar自定义custview,把按钮都放在上面,再把我的葵花宝典去sb方法加上,不仅去了sb,动画也没问题(sb区不会被强制动画)
不,会让他彻底淘汰。
看看google的官方应用吧,比如google+之类的,sb?呵呵
Sb是检验app是否符合Android design的唯一标准
明显不会,论坛对讨论去SB之类的一律封号完全没有包容、大度的感觉利益相关:被囧王永久禁言后进化的魅族黑

我要回帖

更多关于 参数是什么意思 的文章

 

随机推荐