ToolBar的使用和注意事项

Toolbar是什么?官方介绍Toolbar是应用的内容的标准工具栏,是由以前的Actionbar的升级后得到的需要注意的是他们不是说两个独立的控件,而是相互关联的,要使用Toolbar还是得跟ActionBar扯上关系的。源代码是这样注释的:

A Toolbar is a generalization of {@linkActionBar action bars} for use
within application layouts.

相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置,设计更自由。它是作为一个ViewGroup来定义使用的,所以单纯使用ActionBar已经稍显过时了,它的一些方法已被标注过时。

那么它怎么使用呢,首先我们一样要用到v7的支持包,然后定义程序的主题样式,在style里得先把Actionbar去掉,有点像欲想练功,必先自宫的感觉啊。那么最简单的使用方式就是下面的情况

1、设计style

   <stylename="AppTheme"parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <itemname="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

当然这是在系统自动生成的style上修改的,也是最直接的使用方式,修改的地方就是parent的内容:需要使用NoActionBar的主题

2、在布局文件中添加ToolBar

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <!--使用toolBar时,需要的主题是NoActionBar-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#3F51B5"
        android:popupTheme="@style/AppTheme">
    </android.support.v7.widget.Toolbar>
</RelativeLayout>

3、设计右上角的导航按钮

创建menu文件夹,在eclipse中menu文件夹是本来就存在的,但是在android studio中后来就没有主动显示出来了,所以我们需要自己创建,这个很简单

点击res --->右键--->new--->directory,然后自己命名为menu  ,然后点击menu ---右键---new  Menu  resource file

或者直接new  Android resource directory,在下拉选项中选择类型menu,并且命名文件名

<?xml version="1.0"encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!--actionbar里每个item的优先级,值越大优先级越低,actionbar地方不够就会放到overflow中-->
    <itemandroid:id="@+id/ab_search"
        android:orderInCategory="80"
        android:title="search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom"
        >
    </item>
    <item
        android:id="@+id/ab_share"
        android:orderInCategory="90"
        android:title="share"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
        app:showAsAction="ifRoom">
    </item>
    <item
        android:id="@+id/setting"
        android:orderInCategory="100"
        android:title="action_settings"
        android:icon="@mipmap/ic_menu"
        app:showAsAction="always"></item>
</menu>

在这里有几个值得注意的地方

1、app命名空间:也就是:xmlns:app="http://schemas.android.com/apk/res-auto"  

   这个东西相信大家也不陌生,就是我们自定义控件的时候自己定义的空间,现在呢可以直接使用这个,添加它的方式也很简单,有人   说复制一下嘛,嘿嘿,万一手头没有呢,只要打app然后会提示appNS,就是它了,按快捷键就行,不要问我快捷键是啥,什么?你不知道?好吧  ctrl+空格

2、android:orderInCategory属性

   你问别人的时候,有人会这样告诉你:啊,就是优先级。再多一句就是:数值越大,优先级越低。好吧,刚开始我也是不明白,试了之后才明白,就是在导航栏里排列的顺序

  

 就是右上角的三个栏从左往右的排列顺序,值越大,越靠后

 3、图标问题:、

有人在写的时候会纠结,我没有搜索按钮和分享按钮的图标啊,那么你就out啦,我的图片文件夹里也没有啊,那么他们来自哪里呢?这里:

app:actionViewClass="android.support.v7.widget.SearchView"

app:actionProviderClass="android.support.v7.widget.ShareActionProvider"

当然啦,还有好几个,我们以后遇到了再讲,大家发现新的也要告诉我啊

4、app:showAsAction

   当写下这行代码的时候,一定要添加app的命名空间,也就是在1里我们讲的

4、java代码实现

准备了这么久,如果再不让大家看到点效果,估计有些人的心就开始躁动了,那么,好吧,临门一脚了,我们在java代码里添加一些代码就可以看到最初的效果了

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;


public class MainActivityextends AppCompatActivity{
    privateToolbar toolbar;
    @Override
    protected voidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar= (Toolbar) findViewById(R.id.toolBar);
//      toolbar.setLogo(R.mipmap.ic_launcher);//设置app logo
//      toolbar.setSubtitle("Subtitle");//设置子标题

        toolbar.setNavigationIcon(R.mipmap.home);//设置导航栏图标
        toolbar.setTitle("LuoFeng");                //设置主标题
        toolbar.inflateMenu(R.menu.main_menu);  //设置右上角的填充菜单
        //setSupportActionBar(toolbar);
    }
}

好了,可以运行了,运行效果是这样的。

  

当然啊,那个圆点不是哈,那是其他的效果,回头再给大家讲。

在这里呢,大家发现我注释掉了一些东西,比如子标题

在最后一行我也注释掉了一行://setSupportActionBar(toolbar);

1、这一行代码如果在这里写上呢,首先要保证你的Activity继承AppCompatActivity,如果不写的话,就可以继承Activity等。

2、这行代码如果写上的话呢,会出现右边图所示的现象,就是设置的东西会消失   

   那么怎么解决这个问题呢?我们有很多种方法:

   1、在toolbar中自己添加控件,作为菜单来显示。不要问我为什么?在开始的时候就说明了嘛,ToolBar继承GroupView

   2、将menu的资源文件放在onCreateOptionsMenu()方法里加载,不用toolbar加载

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu,menu);
    return true;
}

下面运行就没有问题了

 

 那么,喜欢思考问题的人就又有问题要问了,那就是左上角的logo我们通常会需要点击划出侧边栏,那么监听怎么办呢?

 这里也有两种方式可以给这个logo添加监听

1、使用toolBar自带的监听

 

  toolbar.setNavigationOnClickListener(new View.OnClickListener() {
           @Override
            public void onClick(View view) {
               Toast.makeText(MainActivity.this,"sssssssssssssssss",Toast.LENGTH_LONG).show();
          }
       });

2、使用menu的监听方法:

  @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case android.R.id.home:
            Toast.makeText(MainActivity.this,"sssssssssssssssss",Toast.LENGTH_LONG).show();
            break;
    }
    return super.onOptionsItemSelected(item);
}

 有人会问,那个id是从哪里来的呢?好吧,我告诉你:

android.R.id.home就是现在系统默认的toolbar里icon的id。

好了,toolBar的简单介绍就到这里,有问题和新的发现的大家都可以告诉我啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 PyQt5 中,窗口是 GUI 应用程序的主要组成部分。下面详细讲解了窗口的全部操作和重要特性,并提供了相关函数的示例说明。 1. 创建窗口: - 使用 `QMainWindow` 或其它窗口类创建窗口对象。 - 示例: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow app = QApplication(sys.argv) window = QMainWindow() window.show() sys.exit(app.exec_()) ``` 2. 设置窗口属性: - 使用 `setWindowTitle()` 方法设置窗口标题。 - 使用 `setWindowIcon()` 方法设置窗口图标。 - 使用 `setGeometry()` 方法设置窗口位置和大小。 - 示例: ```python window.setWindowTitle("My Window") window.setWindowIcon(QIcon("icon.png")) window.setGeometry(100, 100, 500, 300) ``` 3. 添加部件: - 使用窗口的 `setCentralWidget(widget)` 方法设置中心部件。 - 使用窗口的 `addWidget(widget)` 方法或布局管理器将部件添加到窗口。 - 示例: ```python central_widget = QWidget() window.setCentralWidget(central_widget) button = QPushButton("Click Me") layout = QVBoxLayout() layout.addWidget(button) central_widget.setLayout(layout) ``` 4. 创建菜单栏和工具栏: - 使用 `QMenuBar` 和 `QMenu` 创建菜单栏和菜单项。 - 使用 `QToolBar` 和 `addAction()` 创建工具栏和工具按钮。 - 示例: ```python menubar = QMenuBar() menu = QMenu("File") menubar.addMenu(menu) toolbar = QToolBar() action = QAction("Open", self) toolbar.addAction(action) window.setMenuBar(menubar) window.addToolBar(toolbar) ``` 5. 响应事件: - 重写窗口类的事件处理方法,如 `keyPressEvent()`、`mousePressEvent()` 等。 - 示例: ```python def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() ``` 6. 显示消息框: - 使用 `QMessageBox` 类显示不同类型的消息框,如信息框、警告框、错误框等。 - 示例: ```python QMessageBox.information(self, "Information", "This is an information message.") ``` 7. 关闭窗口: - 使用窗口对象的 `close()` 方法关闭窗口。 - 示例: ```python window.close() ``` 8. 注意事项: - 在使用 PyQt5 创建窗口时,需要确保在 `QApplication` 对象中调用 `sys.exit(app.exec_())` 来确保应用程序正常退出。 - 在使用布局管理器时,应该使用适当的布局管理器来自动调整部件的大小和位置,以适应窗口的大小变化。 通过上述示例和说明,您可以了解如何在 PyQt5 中进行窗口的创建、设置属性、添加部件、创建菜单栏和工具栏、响应事件、显示消息框以及关闭窗口。同时,请注意遵循 PyQt5 的编程规范和最佳实践,以获得更好的用户体验和代码可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值