第2章:常用组件

Posted 亿钱君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第2章:常用组件相关的知识,希望对你有一定的参考价值。

1. 按钮与事件响应

  • match_partent:表示组件的宽度与其父容器一样宽
  • wrap_content:表示根据内容指定组件的高度
  • android:textAllCaps,设置按钮文本是否所有字母都大写,默认是true,即按钮的文本内容全部大写

1.1 响应单击操作

package com.syl.buttondemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextClock;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

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

        ((Button)findViewById(R.id.btn1)).setOnClickListener(this);
        ((Button)findViewById(R.id.btn2)).setOnClickListener(this);
        ((Button)findViewById(R.id.btn3)).setOnClickListener(this);

    }

    @Override
    public void onClick(View v){
        TextView txt1 = (TextView)findViewById(R.id.txt1);
        switch (v.getId()){
            case R.id.btn1:{
                txt1.setText("单击Button1");
            }break;
            case R.id.btn2:{
                txt1.setText("单击Button2");
            }break;
            case R.id.btn3:{
                txt1.setText("单击Button3");
            }break;

        }
    }


}

注意:此处实现多个按钮响应的区别
在这里插入图片描述

1.2 响应长按操作并震动

  • 实现View.OnLongClickListener接口,并实现其中的onLongClickI()方法
  • onTouch()方法中返回一个boolean类型的值,返回true值时,不再响应其他组件操作
package com.syl.buttondemo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements  View.OnLongClickListener {

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

        Button btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnLongClickListener(this);
    }


    //长按
    @Override
    public boolean onLongClick(View v){
        if(v.getId() == R.id.btn1){
            Toast.makeText(MainActivity.this,"长按事件",Toast.LENGTH_SHORT).show();

            //震动提示
            Vibrator vib = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
            vib.vibrate(500);//震动半秒
        }
        return true;
    }


}
  • 响应长按操作也需注册,(例如在onCreate()方法中,让btn按钮响应长按操作)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnLongClickListener(this);
    }
  • 需要在AndroidManifest.xml中声明需要使用的震动权限
    在这里插入图片描述

1.2 响应触摸事件

  • 处理手指按下、移动、离开的操作
  • 实现View.OnTouchListener()方法,并重写其中的onTouch()方法
  • onTouch()方法中返回一个boolean类型的值,返回true值时,不再响应其他组件操作
  • 组件需在onCreate()方法中注册响应事件
  • 代码
package com.syl.buttondemo;

import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity implements  View.OnTouchListener {

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

        Button btn2 = (Button)findViewById(R.id.btn2);
        btn2.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event){
        if(v.getId() == R.id.btn2){
            TextView txt = (TextView) findViewById(R.id.txt1);
            if(event.getAction()==MotionEvent.ACTION_DOWN){
                txt.setText("手指按下");
            }else if(event.getAction()==MotionEvent.ACTION_UP){
                txt.setText("手指离开");
            }else if(event.getAction()==MotionEvent.ACTION_MOVE){
                txt.setText("手指滑动");
            }

        }
        return true;
    }
    
}

在这里插入图片描述

2. 文本组件

2.1 TextView

  • android:textSize,设置文本尺寸,单位是sp
  • android: Color,设置字体颜色
  • android: gravity,设置文字对齐方式

2.2 EditText:输入、显示文本内容

package com.syl.edittextdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

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

        Button btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {
        
            @Override
            public void onClick(View v) {
                EditText edit1 = (EditText)findViewById(R.id.edit1);
                Button btn = (Button)findViewById(R.id.btn1);
                btn.setText(edit1.getText());
            }
        });
    }
}

在这里插入图片描述

3. 消息与对话框

3.1 Toast:显示提示信息

  • 参数1:指定一个Content对象
  • 参数2:指定需要显示的文本
  • 参数3:指定信息显示的时间长短(Toast.LENGTH_LONG / Toast.LENGTH_SHORT)
  • 创建对象后,调用它的show()方法即可显示信息

3.2 AlertDialog:用于显示包含选择按钮的对话框

  • 使用AlertDialog.Builder对象
  • setTitle() :指定对话框的标题信息
  • setMessage():指定对话框提示消息
  • setCancelable():指定对话框是否可以通过其他方式取消
  • setPositiveButton():指定肯定操作
  • setNegativeButton():指定否定操作
  • setNeutralButton():可定义第三个按钮,类似再看看的意思
package com.syl.alertdialogdemo;

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;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

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

        Button btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnClickListener(this);
    }

    @Override
    public void onClick(View v){
        if(v.getId()==R.id.btn1){
            AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
            dlg.setTitle("请确认您的操作");
            dlg.setMessage("真得要这么做吗");
            dlg.setCancelable(false);

            //肯定操作按钮
            dlg.setPositiveButton("确认", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"确认操作",Toast.LENGTH_LONG).show();
                }
            });
            //取消操作
            dlg.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"取消操作",Toast.LENGTH_SHORT).show();
                }
            });

            dlg.show();
        }
    }


}

在这里插入图片描述

3.3 Progress:用于显示一些信息和一个正在忙的图标,用于指示程序正在执行

4. 菜单

在Activity中使用菜单,需要做以下几个步骤


  • 第一步:使用XML文件定义菜单
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 第二步:在Activity中关联菜单
  • 第三步:定义各个菜单项的响应代码
package com.syl.menudemo;

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);
    }

    //关联菜单
    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater mi = getMenuInflater();
        mi.inflate(R.menu.mainmenu,menu);
        return true;
    }

    //响应菜单项
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()){
            case R.id.menuitem1:
            {
                Toast.makeText(this,"菜单项1",Toast.LENGTH_SHORT).show();
            }break;
            case R.id.menuitem2:
            {
                Toast.makeText(this,"菜单项2",Toast.LENGTH_SHORT).show();
            }break;
            case R.id.menuitem3:
            {
                Toast.makeText(this,"菜单项3",Toast.LENGTH_SHORT).show();
            }break;
        }
        return true;
    }
}

在这里插入图片描述


例二:嵌套菜单

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

    <item
        android:id="@+id/menu_settings"
        android:title="设置"
        android:icon="@mipmap/ic_launcher"
        app:showAsAction="always"/>
    <item
        android:id="@+id/menu_check"
        android:title="自动保存"
        android:checkable="true"
        android:checked="true"/>

    <item
        android:id="@+id/menu_help"
        android:title="学号姓名">
        <menu>
            <item
                android:id="@+id/xuehao"
                android:title="学号"/>
            <item
                android:id="@+id/xingming"
                android:title="姓名"/>
        </menu>


    </item>

    <item
        android:id="@+id/menu_exit"
        android:title="退出"
        app:showAsAction="never"
        android:orderInCategory="100"/>


</menu>

在这里插入图片描述
以上是关于第2章:常用组件的主要内容,如果未能解决你的问题,请参考以下文章

eclipse从入门到精通 高清珍藏版

SWIng用户界面组件

第2章 Throwable常用方法&自定义异常

JS常用代码片段-127个常用罗列-值得收藏

第2章 装配Bean

vueJS学习视频教程