安卓开发学习笔记(控件篇)

目录

控件

Textview(文本框,显示文本的组件)

button

edittext

imageview

progressbar 进度条

Notification 通知

toolbar (相当与页面的页眉)

AlertDialog (对话框)

Popubwindow (悬浮框)


控件

Textview(文本框,显示文本的组件)

基础属性

 

 

这里的LineaLayout是容器,组件是放在容器中,textview的id是唯一的标识符,text和textcolor以及background在开发中规范使用res/values/colors.xml 和strings.xml中所定义的。

在MainActivity中获取textview,并设置其文本,则会覆盖掉布局中默认设置的文本,就行jframe中的settext一样。

 TextView myid = findViewById(R.id.yzh1);
 myid.setText("我是湖南的");

color.xml

这里的color是#00000000 ,8位,每两位(16进制)分别对于透明度,red green blue,值对应着0-255。

string.xml

name为每一个string的标识符,后面则是文本信息。

设置textview中文字的阴影效果

实现跑马效果的TextView

1..5的序号就是步骤

值得注意的是ellipsize设置为marquee为跑马灯省略文本。另外需要在有焦点的情况下才能跑动。

于是设置焦点

1:自定义textview获取焦点

2:鼠标点击获取焦点

3:textview请求焦点

button

继承自textview,有textview的所有方法。

button的背景

设置前景色(foreground)则覆盖文字和背景

在老版本中可通过修改

(修改后的结果)以设置背景颜色

 android:backgroundTint

则是把background中的图片设置颜色

它也可以被设置成颜色选择器,如下

当xml中有被设置颜色选择器时,存在提示

button的事件处理

  1. 点击事件

  2. 长按事件

  3. 触摸事件

 Button bn1 = findViewById(R.id.bn1);
 //点击事件
 bn1.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
         Log.e("yzh","Onclick");
     }
 });
 //长按事件
 bn1.setOnLongClickListener(new View.OnLongClickListener() {
     @Override
     public boolean onLongClick(View view) {
         Log.e("yzh","longclick");
         return false;
     }
 });
 //触摸事件
 bn1.setOnTouchListener(new View.OnTouchListener() {
     @Override
     public boolean onTouch(View view, MotionEvent motionEvent) {
         Log.e("yzh","torch");
         return false;
     }
 });

其中触摸事件又分为按下,弹起,以及按下不松移动。

当torch事件返回为true时,按键事件被torch消费,长按和点击事件都不会被触发

当longclick事件返回为true时,click点击事件则不会被响应。

可以认为用一个响应顺序 torch->longclick->click ,前者返回true则屏蔽后者。

整个按键事件中,最常用的还是点击事件,可以在xml中进行配置

 android:onClick="bn1click"
 public void bn1click(View view) {
     Log.e("bn1","click");
 }

如果同时在xml和代码里去定义了同一个事件监听,则优先代码监听事件监听。

edittext

继承自textview

基本属性

inputType输入类型

  • number, phone都是输入数字

  • numberpassword 只能输入数字,输入后变成密码

  • textpassword 可以输入文本,输入后变成密码

例如在textpassword下

 android:drawableRight="@drawable/ic_baseline_bedtime_24"

设置editview的图标位置以及设置图标

 android:drawablePadding="20dp"

设置图标与textview的间距

 android:paddingLeft

设置editview的内容距离边框的距离

获取edittext的内容,直接通过调用gettext()得到。

设置edittext的内容,通过settext(String s)

例如配合按钮点击事件获取内容

 public void bn1click(View view) {
     EditText editText=findViewById(R.id.uid);
     String  temp=editText.getText().toString();
     Log.e("bn1",temp);
     editText.setText("");
 }

imageview

主要属性

缩放:

默认进行等比缩放 fitcenter fitstart fitend

缩放类型

centerInside 与findCenter的区别,如果图片小于ImageView,CenterInside则保持原图显示,否则就是findCenter

通过设置最大宽,高来进行等比缩放,保证图片不会变形。当一边的长达到最大时,此时整张图根据长来进行缩放,同时又调整ImageView为图片大小。优势在于节省屏幕占用空间。

例如

 <ImageView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:adjustViewBounds="true"
     android:maxWidth="200dp"
     android:maxHeight="200dp"
     android:scaleType="centerInside"
     android:src="@drawable/star" />

progressbar 进度条

常用属性

转圈进度条

例如根据按钮来进行显示

      <ProgressBar
         android:id="@+id/pb1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
 ​
         />
 <Button
     android:id="@+id/bt2"
     android:text="显示隐藏"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:onClick="bn2click"/>
 ​

 public void bn2click(View view) {
     ProgressBar pb1=findViewById(R.id.pb1);
 ​
     if(pb1.getVisibility()==View.GONE){
         pb1.setVisibility(View.VISIBLE);
     }
     else {
         pb1.setVisibility(View.GONE);
     }
 }
 ​

水平进度条

例如一个模拟下载的水平进度条

 <ProgressBar
     android:id="@+id/pb2"
     android:layout_width="400dp"
     android:layout_height="wrap_content"
     style="?android:attr/progressBarStyleHorizontal"
     android:max="100"
 ​
     />
 public void bn2click(View view) {
     ProgressBar pb2=findViewById(R.id.pb2);
     int prog=pb2.getProgress();
     prog+=10;
     pb2.setProgress(prog);
 }

 android:indeterminate="true"

这个方法实现类型于圆圈进度条。

Notification 通知

(这里看了几遍。。。。安卓哔哩哔哩教程太少了。。。

通知渠道

例如:设置通知以及通知跳转到另一界面

 package com.example.yuezhenhao;
 ​
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.app.NotificationCompat;
 ​
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Color;
 import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 ​
 public class MainActivity extends AppCompatActivity {
 ​
 ​
     private  NotificationManager manager;
     private  Notification notification;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 ​
 ​
 //创造NotificationManger对象
           manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
 ​
 //创建Notification对象
 ​
        Intent intent=new Intent(this,mynote.class);
        PendingIntent pendingIntent=PendingIntent.getActivity(this,0,intent,0);
           notification = new NotificationCompat.Builder(this  ,"abc")
                 .setContentTitle("官方通知")
                 .setContentText("无形之刃,最为致命")
                 .setSmallIcon(R.drawable.ic_baseline_person_24)
                   .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.star))
                   .setColor(Color.parseColor("#ff0000"))
                   .setContentIntent(pendingIntent)
                   .setAutoCancel(true)
                 .build();
 ​
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
 ​
     NotificationChannel channel = new NotificationChannel("abc","cstest",NotificationManager.IMPORTANCE_HIGH);
     manager.createNotificationChannel(channel);
     //id与Notification的id设置一致
 }
 ​
 }
 ​
 ​
     public void bn2click(View view) {
         manager.notify(1,notification);//启动通知
 ​
     }
 ​
     public void bn1click(View view) {
 ​
         manager.cancel(1);//关闭通知
     }
 }

toolbar (相当与页面的页眉)

常用属性

例如 结合textview 将标题放中间

 <androidx.appcompat.widget.Toolbar
     android:id="@+id/tb"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="#ff0000"
   
     app:logo="@drawable/ic_baseline_airplanemode_active_24"
     app:navigationIcon="@drawable/ic_baseline_keyboard_return_24">
   <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="这是标题"
       android:textColor="@color/black"
         android:textSize="38dp"
       android:layout_gravity="center"
 ​
 ​
     />
    
 </androidx.appcompat.widget.Toolbar>

以及设置跳转点击事件

 Toolbar tb = findViewById(R.id.tb);
 tb.setNavigationOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
         Log.e("Toolbar", "onClick: 被点击");
     }
 });

AlertDialog (对话框)

常用属性

如按钮监听对话框事件

 public void click(View view) {
     View dialogview = getLayoutInflater().inflate(R.layout.test, null);
     //添加一个View
     AlertDialog.Builder builder = new AlertDialog.Builder(this);
     builder.setIcon(R.drawable.ic_baseline_person_24)
             .setTitle("这是对话框")
             .setMessage("hello world")
             .setView(dialogview)
             .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialogInterface, int i) {
                     Log.e("bn1", "onClick: 点击了确定按钮" );
                 }
             })
             .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialogInterface, int i) {
                     Log.e("bn1", "onClick: 点击了取消" );
                 }
             })
             .setNeutralButton("其他", new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialogInterface, int i) {
                     Log.e("bn1", "onClick: 点击了其他" );
                 }
             })
 ​
             .create()
             .show();
 }

Popubwindow (悬浮框)

基础属性

如按钮监听悬浮框事件

     public void click(View view) {
         //添加一个View
         View myview= getLayoutInflater().inflate(R.layout.test, null);
 ​
         //将view添加进悬浮框
         PopupWindow popupWindow =new PopupWindow(myview, ViewGroup.LayoutParams.WRAP_CONTENT,
                 ViewGroup.LayoutParams.WRAP_CONTENT,true
                 );
         popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.star));
         Button bn2 = myview.findViewById(R.id.bn2);
         Button bn3 = myview.findViewById(R.id.bn3);
         bn2.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 Log.e("悬浮框", "onClick:bn2被点击 " );
                 popupWindow.dismiss();
             }
         });
 ​
         bn3.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
 ​
                 Log.e("悬浮框", "onClick: bn3被点击 ");
                 popupWindow.dismiss();
             }
         });
 ​
         popupWindow.showAsDropDown(view);
 ​
     }

(点击别处则隐藏,参考其构造方法)

  ` PopupWindow popupWindow =new PopupWindow(myview, ViewGroup.LayoutParams.WRAP_CONTENT,
             ViewGroup.LayoutParams.WRAP_CONTENT,true
             );`
 ​
 ​

参考

【2021最新版】Android(安卓)开发零基础入门课程【全套】(由小米、阿里、腾讯、爱奇艺一线大厂老师打造)哔哩哔哩bilibili

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值