安卓开发学习笔记(控件篇)
目录
控件
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的事件处理
-
点击事件
-
长按事件
-
触摸事件
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?