安卓开发学习笔记(控件篇)
目录
控件
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

浙公网安备 33010602011771号