【android】3、Toolbar

Toolbar包含ActionBar,是一个view。通常在activity的顶端,用于标题栏等。

在使用Toolbar时,要将activity中原有的ActionBar隐藏掉,否则原有的actionBar和Toolbar会同时出现在顶端。

隐藏ActionBar:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"/>

使用Toolbar,布局文件如下:

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
    <Button
        android:id="@+id/nav_button"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginLeft="10dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:background="@drawable/ic_home"/>
    <!--城市名-->
    <TextView
        android:id="@+id/title_city"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="#fff"
        android:textSize="20sp"/>
    </android.support.v7.widget.Toolbar>
在该布局文件中,设置了一个Button,用于显示菜单,其实可以使用toolbar中默认的返回键,而不必手动添加一个Button。添加了一个TextView,用于动态显示标题的信息。

Toolbar中右侧最多设置三个action:

在menu/toolbar.xml中列出action:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/settings"
        android:icon="@drawable/ic_settings"
        android:title="Settings"
        app:showAsAction="never"/>
</menu>

由于在项目中只用到了一个action,因此只有一个<item>

app:showAsAction="never"表示永远不显示在toolbar中,ifRoom,表示有空间就显示。“always”表示永远显示在toolbar中

如果要在toolbar中显示action,要通过

public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.toolbar, menu);
        return true;
    }
设置action的布局,否则不会显示。

而action对应的操作则需要函数:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.settings:{
                AlertDialog.Builder build = new AlertDialog.Builder(this);
                build.setTitle("自动更新?");
                build.setCancelable(true);
                build.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                //设置内容区
                final String [] items = {"自动更新","取消自动更新"};
                build.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which){
                            case 0:
                                SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();
                                editor.putString("autoUpdate", "Update");
                                editor.apply();
                                Toast.makeText(getApplicationContext(), "自动更新", Toast.LENGTH_LONG).show();
                                dialog.dismiss();
                                break;
                            case 1:
                                SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();
                                edit.putString("autoUpdate", "UnUpdate");
                                edit.apply();
                                Toast.makeText(getApplicationContext(), "取消自动更新", Toast.LENGTH_LONG).show();
                                dialog.dismiss();
                                break;
                        }
                    }
                });
                AlertDialog dialog = build.create();
                dialog.show();
                break;
            }

        }
        return true;
    }
这里设置了当点击settings时打开一个dialog,进行相关的设置。


猜你喜欢

转载自blog.csdn.net/J675620982/article/details/77842030
今日推荐