第19天~dialog+Menu

dialog的DEMO

掀开新档

id命名为btnalert

https://ithelp.ithome.com.tw/upload/images/20220203/20119035yymi9Rz5iw.png

onClick从java档来加入
https://ithelp.ithome.com.tw/upload/images/20220203/20119035tqBAxbX1Yk.png

再来是比较难的code

package com.huang.alert_dialog;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button alert;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        alert = (Button) findViewById(R.id.btnalert);
        alert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();

                alertDialog.setTitle("靠自己好吗?");
                alertDialog.setMessage("稳步踏实,则百事方佳~~");
                alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                dialogInterface.dismiss();
                            }
                        }


                );

                alertDialog.show();
            }
        });
    }
}

https://ithelp.ithome.com.tw/upload/images/20220203/201190355D8zsGOHva.png


Menu-就是手机上面的"三个点"

2种方法-这里写第1种用xml档-layout+menu.xml

新增档案-

https://ithelp.ithome.com.tw/upload/images/20220203/20119035jY1qMQleS4.png

再从res-new-Android Resource Directory
https://ithelp.ithome.com.tw/upload/images/20220203/20119035r8D8jydrfd.png

然後选type-选menu-上面会自己变

https://ithelp.ithome.com.tw/upload/images/20220203/20119035F0nC7diiiO.png

res夹–> 右 -->新增 resourse dir --> type:menu --> new resource file

menu/menu_main.xml
然後再从menu的右键去new-Menu Resource File

https://ithelp.ithome.com.tw/upload/images/20220203/20119035MYhWXbS1J8.png

制定名称-

https://ithelp.ithome.com.tw/upload/images/20220203/20119035SzBVCu3Q9x.png

长这样~

https://ithelp.ithome.com.tw/upload/images/20220203/20119035oravcJJAnO.png


整个就是menu-还有里面的button

https://ithelp.ithome.com.tw/upload/images/20220203/20119035nuGXSfq1R2.png

拉入Menu Item

https://ithelp.ithome.com.tw/upload/images/20220203/20119035grT9e9JbCS.png

id+title+icon都要做

https://ithelp.ithome.com.tw/upload/images/20220203/20119035p25nzXBb9v.png
显示在哪的
showAsAction="always"
要用空格点2下会挑出可以V~

https://ithelp.ithome.com.tw/upload/images/20220203/20119035I1O5D6RKK3.png

设置 showAsAction

ifRoom:如果 toolbar 上有位置才显示,不然会在三个点点击之後才出现

never:不显示在界面上,只在三个点点击之後才出现

always:会显示在 toolbar 上
https://ithelp.ithome.com.tw/upload/images/20220203/20119035laGrxnZBI5.png

先看到icon再看到title
如果没有icon就会直接看到title

这里反而是手打程序码不会动~是要按格子

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/Item01"
        android:icon="@android:drawable/btn_star_big_on"
        android:title="AA"
        app:showAsAction="always" />
</menu>


visible是否显示

enabled是否可用
https://ithelp.ithome.com.tw/upload/images/20220203/20119035d1L1v11Ohp.png


再写第2个没有写always就会被收在第2个
https://ithelp.ithome.com.tw/upload/images/20220203/20119035tZ6bjXP5jr.png

https://ithelp.ithome.com.tw/upload/images/20220203/20119035UP5TtbmjAN.png

选择 ifRoom
https://ithelp.ithome.com.tw/upload/images/20220203/20119035lNCmUQdQwV.png

目前显示
https://ithelp.ithome.com.tw/upload/images/20220203/20119035Kb9lwtO9VK.png
ifRoom:如果 toolbar 上有位置才显示,不然会在三个点点击之後才出现

never:不显示在界面上,只在三个点点击之後才出现

always:会显示在 toolbar 上


第3个选never

https://ithelp.ithome.com.tw/upload/images/20220203/201190356IxtoVDrT2.png

https://ithelp.ithome.com.tw/upload/images/20220203/201190352ukO4h9vFU.png

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/Item01"
        android:icon="@android:drawable/btn_star_big_on"
        android:title="AA"
        app:showAsAction="always" />
    <item
        android:id="@+id/Item02"
        android:icon="@android:drawable/ic_btn_speak_now"
        android:title="BB"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/Item03"
        android:icon="@android:drawable/ic_dialog_email"
        android:title="CC"
        app:showAsAction="never" />
</menu>

https://ithelp.ithome.com.tw/upload/images/20220203/201190358YdF4uJb30.png


如果没有特别写就是showAsAction="never"

https://ithelp.ithome.com.tw/upload/images/20220203/201190358U2us6J9X3.png

然後item04下面再放menu让他一层又一层

https://ithelp.ithome.com.tw/upload/images/20220203/201190356Gu7Jb1cxq.png

显示
https://ithelp.ithome.com.tw/upload/images/20220203/20119035NxUFBIkjMr.png

下面第1个item写-

https://ithelp.ithome.com.tw/upload/images/20220203/20119035kgz2SUeiOb.png

下面第2个item写-

https://ithelp.ithome.com.tw/upload/images/20220203/201190358t5WvWsQnB.png

程序码:


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/Item01"
        android:icon="@android:drawable/btn_star_big_on"
        android:title="AA"
        app:showAsAction="always" />
    <item
        android:id="@+id/Item02"
        android:icon="@android:drawable/ic_btn_speak_now"
        android:title="BB"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/Item03"
        android:icon="@android:drawable/ic_dialog_email"
        android:title="CC"
        app:showAsAction="never" />
    <item
        android:id="@+id/Item04"
        android:title="OTHER" >
        <menu >
            <item
                android:id="@+id/sub01"
                android:title="DD01" />
            <item
                android:id="@+id/sub02"
                android:title="DD02" />
        </menu>
    </item>
</menu>

目前模拟器是看不到东西的


从java档让menu显示-右键Generate-->Override

安卓快捷键
https://medium.com/mindorks/11-android-studio-shortcuts-every-android-developer-must-know-a153e736e611

Override Methods(CTRL+O) :去寻找onCreateOptionsMenu(menu)-在WIN上

https://ithelp.ithome.com.tw/upload/images/20220203/20119035uWRdV74Raz.png

找到了~

https://ithelp.ithome.com.tw/upload/images/20220203/20119035JyVDdBpqeR.png

package com.huang.mymenu;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //建立menu


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return super.onCreateOptionsMenu(menu);
    }
}

java档让menu显示-右键Generate-->Override

Override Methods(CTRL+O) :去寻找 -在WIN上

https://ithelp.ithome.com.tw/upload/images/20220203/20119035IpRHdOawEj.png

https://ithelp.ithome.com.tw/upload/images/20220203/20119035a507AVurfW.png

我按完有点跑掉-这里用手动调成这样

package com.huang.mymenu;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //建立menu

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return super.onCreateOptionsMenu(menu);
    }

    //menu加侦听器
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        return super.onOptionsItemSelected(item);
    }


}

在xml产生+在java档叫出来

建立 分析器:menu角色 / 位置

package com.huang.mymenu;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //建立menu

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater =getMenuInflater();
        inflater.inflate(R.menu.menu_main,menu);

        return true;
    }

    //menu加侦听器
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        return super.onOptionsItemSelected(item);
    }


}

到这里模拟器 就可以看到了喔~

https://ithelp.ithome.com.tw/upload/images/20220203/20119035NTvx7ND4CB.png

https://ithelp.ithome.com.tw/upload/images/20220203/20119035LCY8uOe1Ha.png


加侦听器用switch

//menu加侦听器
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        
        switch (item.getItemId()){
            case R.id.Item01:
                Toast.makeText(MainActivity.this,"第1层第1项",Toast.LENGTH_SHORT).show();
                break;
        }
        
        
        return super.onOptionsItemSelected(item);
    }


item02 就是让他直接消失,所以不用

Toast.makeText(MainActivity.this,"第1层第1项",Toast.LENGTH_SHORT).show();

https://ithelp.ithome.com.tw/upload/images/20220203/20119035s2k1IGejV0.png

程序码改成:

case R.id.Item02:
                //Toast.makeText(MainActivity.this,"第1层第1项",Toast.LENGTH_SHORT).show();
                finish();

後面也是依序新增:


package com.huang.mymenu;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //建立menu

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater =getMenuInflater();
        inflater.inflate(R.menu.menu_main,menu);

        return true;
    }

    //menu加侦听器
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()){
            case R.id.Item01:
                Toast.makeText(MainActivity.this,"第1层第1项",Toast.LENGTH_SHORT).show();
                break;
            case R.id.Item02:
                //Toast.makeText(MainActivity.this,"第1层第1项",Toast.LENGTH_SHORT).show();
                finish();

            case R.id.Item03:
                Toast.makeText(MainActivity.this,"第1层第3项",Toast.LENGTH_SHORT).show();
                break;

            case R.id.sub01:
                Toast.makeText(MainActivity.this,"第2层第1项",Toast.LENGTH_SHORT).show();
                break;
            case R.id.sub02:
                Toast.makeText(MainActivity.this,"第2层第2项",Toast.LENGTH_SHORT).show();
                break;

        }


        return super.onOptionsItemSelected(item); //赋予功能
    }


}


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/Item01"
        android:icon="@android:drawable/btn_star_big_on"
        android:title="AA"
        app:showAsAction="always" />
    <item
        android:id="@+id/Item02"
        android:icon="@android:drawable/ic_btn_speak_now"
        android:title="BB"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/Item03"
        android:icon="@android:drawable/ic_dialog_email"
        android:title="CC"
        app:showAsAction="never" />
    <item
        android:id="@+id/Item04"
        android:title="OTHER" >
        <menu >
            <item
                android:id="@+id/sub01"
                android:title="DD01" />
            <item
                android:id="@+id/sub02"
                android:title="DD02" />
        </menu>
    </item>
</menu>

因为是Toast所以也是要用 手机 模拟

https://ithelp.ithome.com.tw/upload/images/20220203/20119035fqwXrllYo9.jpg

https://ithelp.ithome.com.tw/upload/images/20220203/20119035B1EvbuP9z4.jpg

https://ithelp.ithome.com.tw/upload/images/20220203/20119035f0MfR716gd.jpg

https://ithelp.ithome.com.tw/upload/images/20220203/20119035PU8Lh3j8lW.jpg

https://ithelp.ithome.com.tw/upload/images/20220203/20119035BfR7T6DfIZ.jpg


用纯java写出来:

也是开新档案

https://ithelp.ithome.com.tw/upload/images/20220203/20119035oPNUw5mrCC.png



import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuItem item01 = menu.add(0,0,0,"AA");
        MenuItem item02 = menu.add(0,1,1,"BB");
        MenuItem item03 = menu.add(0,2,2,"CC");
        //MenuItem other = menu.add(0,3,3,"OTHER");
        item01.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        SubMenu sub = menu.addSubMenu(0,3,3,"OTHER");
        sub.add(0,100, 0, "S1");
        sub.add(0,101, 1, "S2");

        return true;
    }

    //menu加侦听器
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()){
            case 0:
                //Toast.makeText(MainActivity.this, "第一层第一项", Toast.LENGTH_SHORT).show();
                finish();
                break;
            case 1:
                Toast.makeText(MainActivity.this, "第一层第一项", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(MainActivity.this, "第一层第2项", Toast.LENGTH_SHORT).show();
                break;
            case 100:
                Toast.makeText(MainActivity.this, "第2层第一项", Toast.LENGTH_SHORT).show();
                break;
            case 101:
                Toast.makeText(MainActivity.this, "第2层第2项", Toast.LENGTH_SHORT).show();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}

因为是Toast所以也是要用 手机 模拟
https://ithelp.ithome.com.tw/upload/images/20220203/20119035JBFKn4dPWo.jpg

https://ithelp.ithome.com.tw/upload/images/20220203/20119035GXyLisqQNz.jpg

要上架的专案不能出现命名里面有test或example


<<:  # Day19--从Sruct、Class的本质差异论MVC

>>:  【Day 19】QGIS + OSM

IT 铁人赛 k8s 入门30天 -- day30 Share Process Namespace between Containers in a Pod

参考文件 https://kubernetes.io/docs/tasks/configure-po...

JS 标签样板字面值 DAY76

在我们使用 标签样板字面值 可解决 XSS攻击 这里我们先来介绍简单的 标签样板字面值 依据在样板字...

RDS备份还原与地端的差异

在使用面板成功备份还原後, 再使用SSMS实作的可行性, 是否跟地端的一样? 先使用UI方式备份, ...

[Day13] React Native - 整理资料流,使用 Redux 吧!

Redux 官网 在还没有加入Redux之前,资料在APP中各个view的传递会需要翻山越岭,经过一...

Day21 xib传值的小教室2

接续昨天。 到到二个页面的程序码中,新增一字串变数,也在生命周期中,使此变数会等於第二页的文字格变数...