V7新控件

本文详细介绍了V7风格控件如Dialog、ToolBar、LinearLayoutCompat、ListPopupWindow和Spinner的使用方法,包括其特性、XML配置、代码实现及自定义菜单的创建过程。此外,还展示了如何在布局中添加分隔线以及如何使用SwipeRefreshLayout进行数据刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

V7


1.AlertDialog

v7风格的Dialog相对原来的版本去掉了跳跃弹出的动画,下方按钮去掉了边框,聚集在了右侧,显示时去掉了分隔线。

ToolBar

取代原先的ActionBar实现相对完美的定制

xml文件

<android.support.v7.widget.Toolbar
android:id="@+id/md_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="50dp"
android:background="?attr/colorPrimary"
android:layout_marginBottom="20dp"              
>

代码

  //隐藏系统默认title,我当时修改了theme用的noactionbar的Theme所以这行代码并没用
getSupportActionBar().setDisplayShowTitleEnabled(false);
Toolbar toolbar = (Toolbar) findViewById(R.id.md_toolbar);
//标题
toolbar.setTitle("测试");
//副标题,显示在标题下方
toolbar.setSubtitle("副标题");
//logo,显示在标题左侧
toolbar.setLogo(R.mipmap.ic_launcher);    
//导航图标,显示在最左侧,可以使用该图标调出菜单
toolbar.setNavigationIcon(android.R.drawable.ic_input_delete);
//这个并没有用,设置菜单时重写onCreateOptionMenu即可
//toolbar.inflateMenu(R.menu.menu_main);
setSupportActionBar(toolbar);
toolbar.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "点击了" + item.getItemId(), Toast.LENGTH_SHORT).show();
                return false;
            }
});

题外话,如何创建菜单项

//重写该方法,菜单将会显示在toobar上
@Override
public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        //获取toolbar上的菜单view,也可以在上面的setOnMenuItemClickListener实现更加简单,这里只是一个演示。
        MenuItem item = menu.findItem(R.id.action_share);
        //强转为你需要的view
        View actionView = item.getActionView();
        return super.onCreateOptionsMenu(menu);
}

//菜单文件,为没有接触过的小伙伴准备的额,相关属性请自行查文档
//res/menu/menu_main.xml
<menu 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
>
<item
android:id="@+id/ab_search"
android:orderInCategory="80"
android:title="action_search"                app:actionViewClass="android.support.v7.widget.SearchView"/>
<item
android:id="@+id/action_share"
android:orderInCategory="90"
android:title="action_share"              app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="action_settings"
app:showAsAction="never"/>
</menu>

2.LinearLayoutCompat

在控件中间添加分隔线

<android.support.v7.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center|center_horizontal"
android:orientation="vertical"
app:divider="@drawable/line"
app:dividerPadding="4dp"
app:showDividers="middle"
>
.....
</android.support.v7.widget.LinearLayoutCompat>

app:divider=”@drawable/line” 给分隔线设置颜色,这里你需要在drawable在定义shape资源,否则将没有效果。

app:dividerPadding=”25dp” 给分隔线设置距离左右边距的距离。

app:showDividers=”middle|beginning|end” 分隔线显示的位置,有四种参数值:middle 每个item之间,beginning最顶端显示分隔线,end 最底端显示分隔线,none不显示间隔线。

3.ListPopupWindow

public void showListPopup(View view) {
    String items[] = {"item1", "item2", "item3", "item4", "item5"};
    final ListPopupWindow listPopupWindow = new ListPopupWindow(this);   
    //设置ListView类型的适配器
    listPopupWindow.setAdapter(new ArrayAdapter<String>(SwipeRefreshActivity.this, android.R.layout.simple_list_item_1, items));    
    //给每个item设置监听事件
    listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Toast.makeText(SwipeRefreshActivity.this, "the position is" + position, Toast.LENGTH_SHORT).show();
    //listPopupWindow.dismiss();
    }
    });
    //设置ListPopupWindow的锚点,也就是弹出框的位置是相对当前参数View的位置来显示,
    listPopupWindow.setAnchorView(view);    
    //ListPopupWindow 距锚点的距离,也就是相对锚点View的位置
    listPopupWindow.setHorizontalOffset(100);
    listPopupWindow.setVerticalOffset(100);    
    //设置对话框的宽高
    listPopupWindow.setWidth(300);
    listPopupWindow.setHeight(600);
    listPopupWindow.setModal(false);
    listPopupWindow.show();
    }

3.PopupMenu

    public void showPopupMenu(View view) {
    //参数View 是设置当前菜单显示的相对于View组件位置,具体位置系统会处理
    PopupMenu popupMenu = new PopupMenu(this, view);
    //加载menu布局
    popupMenu.getMenuInflater().inflate(R.menu.menu_main, popupMenu.getMenu());
    //设置menu中的item点击事件
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
    return false;
    }
    });
    //设置popupWindow消失的点击事件
    popupMenu.setOnDismissListener(this);
    popupMenu.show();
    }

4.新风格Spinner

   <Spinner
    android:id="@+id/spinner"
    style="@android:style/Widget.Holo.Light.Spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"></Spinner>

5.v4-SwipeRefreshLayout

SwipeRefreshLayout继承自ViewGroup,理论上可以完成任何View的刷新

xml文件

xml文件很简单,就像一个FrameLayout一样简单

代码

final SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.md_SwipeRefreshLayout);
//设置进度条的颜色
swipeRefreshLayout.setColorSchemeColors(Color.RED, Color.BLUE, Color.GREEN);
//设置圆形进度条大小
swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);
//设置进度条背景颜色        swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.WHITE);
//设置下拉多少距离之后开始刷新数据,不要设置的太大,不然怎么拉都不刷新
swipeRefreshLayout.setDistanceToTriggerSync(5);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值