Material Design——控件大汇总(三)

我尽量不打错别字,用词准确,不造成阅读障碍。

汇总三主要是讲一些突然想起来或新接触的控件,会随时更新,如果想了解其他控件及布局,请移步我的上一篇文章Material Design——控件大汇总(二);目前有BottomNavigationView

BottomNavigationView

最终效果图:

final

这个布局设置了padding所以看起来有些奇怪。如果需要代码,请跳到最后一部分。

一般的BottomNavigationView只可以设置三个,超出时就会有动画,且没有提供取消的方法,目前只有使用反射修改:

效果():

这里写图片描述

配上ViewPager的时候效果更是绚烂,不忍直视。

使用方法:

 <android.support.design.widget.BottomNavigationView
        android:id="@+id/nv_navigation"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="#cccccc"
        app:itemIconTint="@drawable/bottom_navigation_selector"
        app:itemTextColor="@drawable/bottom_navigation_selector"
        app:menu="@menu/navigation">
    </android.support.design.widget.BottomNavigationView>

itemIconTint:是图片的效果,使用selector可以改变颜色,默认情况与上图实例差不多。
itemTextColor:是文字的效果,与图片一样。

selector如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#303F9F" android:state_checked="true"/>
    <item android:color="#666666" android:state_checked="false"/>
</selector>

menu如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/tab1check"
        android:title="@string/recycler_view" />
    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/tab2check"
        android:title="@string/recycler_view" />
    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/tab3check"
        android:title="@string/recycler_view" />
    <item
        android:id="@+id/navigation_person"
        android:icon="@drawable/app_icon_checked"
        android:title="@string/recycler_view" />
    <item
        android:id="@+id/navigation_person2"
        android:icon="@drawable/chat_icon_96"
        android:title="@string/recycler_view" />
</menu>

Activity代码如下:

navigationView = (BottomNavigationView) findViewById(R.id.nv_navigation);
BottomNavigationViewHelper.disableShiftMode(navigationView);  //通过反射取消默认动画
navigationView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener);
private BottomNavigationView.OnNavigationItemSelectedListener onNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    return true;
                case R.id.navigation_dashboard:
                    return true;
                case R.id.navigation_notifications:
                    return true;
                case R.id.navigation_person:
                    return true;
                case R.id.navigation_person2:  //case不写则该view将没有点击效果
                    return true;
            }
            return false;
        }
    };

反射代码如下:

public class BottomNavigationViewHelper {
    public static void disableShiftMode(BottomNavigationView view) {
        BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
        try {
            Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
            shiftingMode.setAccessible(true);
            shiftingMode.setBoolean(menuView, false);
            shiftingMode.setAccessible(false);
            for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
                item.setShiftingMode(false);
                item.setChecked(item.getItemData().isChecked());
            }
        } catch (NoSuchFieldException e) {
            Log.e("BNVHelper", "Unable to get shift mode field", e);
        } catch (IllegalAccessException e) {
            Log.e("BNVHelper", "Unable to change value of shift mode", e);
        }
    }
}

若要加上消息提醒,代码如下:

BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigationView.getChildAt(0);
View tab = menuView.getChildAt(3);
BottomNavigationItemView itemView = (BottomNavigationItemView) tab;
View badge = LayoutInflater.from(this).inflate(R.layout.menu_unrend_num, menuView, false);
itemView.addView(badge);
TextView count = (TextView) badge.findViewById(R.id.tv_msg_count);
count.setText("1");

布局如下(可自行调整):
R.layout.menu_unrend_num

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_msg_count"
        android:layout_width="15dp"
        android:layout_height="15dp"
        android:layout_gravity="center"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="3dp"
        android:background="@drawable/bg_red_circle"
        android:gravity="center"
        android:textColor="#ffffff"
        android:textSize="12sp"
        android:visibility="visible" />
</LinearLayout>

添加一个红色的圆背景,代码如下:
bg_red_circle

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="oval">
    <size
        android:width="5dp"
        android:height="5dp"/>
    <solid android:color="#ff0000"/>
</shape>

参考文章(感谢):
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0428/7888.html
https://blog.csdn.net/a_zhon/article/details/78334515

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我可以为你提供一个满足material design设计风格的文件上传控件,它可以帮助你在网页上快速、便捷地上传文件。它具有简洁明了的界面,支持本地文件上传,也可以从网络上轻松访问文件。同时,它也允许用户对上传文件进行预览、编辑和分享等操作。 ### 回答2: Material Design是一种由Google提出的设计语言,旨在提供一种直观和一致的用户体验。为了满足Material Design的设计风格,我们可以创建一个简洁而具有现代感的文件上传控件。 首先,该控件应具有明确的界面元素,包括一个上传图标、一个提示文字和一个选择文件按钮。上传图标应该是一个符合Material Design的图标,比如一个云朵形状的图标,以表示文件上传的概念。提示文字应该清晰地指示用户应该点击哪里进行文件上传操作。选择文件按钮则应被设计成一个点击区域较大且有明显反馈的按钮,以确保用户体验。 在用户点击选择文件按钮后,控件应该呈现一个方便用户进行文件选择的界面。这个界面应该有一个文件浏览器的图标和一个文字,提示用户选择一个或多个文件。此外,为了符合Material Design的概念,我们可以使用一些动画效果来增强用户体验,比如按钮点击后有一个微妙的涟漪效果。 在用户成功选择文件后,控件应当显示一个符合Material Design的反馈,比如一个勾号图标和一个“文件已上传”的文字。这一部分可以用一个动画来突出显示,以增加用户的交互感。 最后,在用户上传文件的过程中,控件应该提供一个进度条或者一个加载动画,来显示上传进度和给用户一个可见的反馈。这将有助于用户了解文件上传的进程以及剩余时间,以便更好地控制和计划他们的操作。 总的来说,一个满足Material Design设计风格的文件上传控件应该注重界面元素的明确性和可交互性,使用合适的图标和动画来增强用户体验,并提供明确的反馈和进度展示来帮助用户了解上传过程。 ### 回答3: 满足Material Design设计风格的文件上传控件应该具有以下几个特点: 1. 界面设计:控件整体界面应简洁清晰,采用扁平化设计风格,使用明亮的色彩和简洁的图标。上传按钮应该有明显的矩形边框,并使用Material Design中的浮动按钮的样式。 2. 文件选择:用户点击上传按钮后,应弹出文件选择对话框。在选择文件时,对话框应该采用卡片的形式展示文件信息,每个文件卡片上应包含文件名、文件大小和文件类型等信息,并使用Material Design中的阴影效果进行修饰。 3. 进度展示:在文件上传过程中,应该有一个水平进度条显示上传进度。进度条应采用Material Design中的波纹效果,并在顶部显示上传进度的百分比。 4. 上传结果:在文件上传完成后,需要给用户一个明显的反馈。可以在界面上显示一个提示消息,告知用户文件上传成功,并显示文件的上传路径或者下载链接。 5. 错误处理:当文件上传过程中出现错误时,应该给用户适当的提示。可以使用红色的错误信息提示框,提示用户上传失败的原因,并提供重新上传按钮。 6. 用户体验:控件应该具有良好的用户体验,能够适应不同尺寸的屏幕和设备。在移动设备上,可以使用折叠面板的形式来展示文件选择对话框,以节约空间。 综上所述,满足Material Design设计风格的文件上传控件应具备上述特点,通过简洁明快的界面设计、明确的用户反馈和良好的用户体验,能够提供便捷的文件上传功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值