TextView控件:
- layout_width: 组件的宽度
- layout_height:组件的高度
- id:为TextView设置一个组件Id
- text :设置显示的文本内容
- textColor:设置字体颜色
- textStyle:设置字体风格 可选:
- normall(无效果)
- bold(加粗)
- italic(斜体)
- textSize:字体大小 单位一般使用sp
- background:设置控件的背景,可以理解为填充整个控件的颜色,可以是图片
- gravity:设置控件中内容的对齐方向,TextView中是文字,ImgaeView中是图片等等。
拓展:
- shadowColor:设置阴影颜色,需要与shadowRadius一起使用
- shadowRadius:设置阴影的模糊程度,设为0.1就变成相同字体了,建议使用3.0
- shadowDx:设置阴影在水平方向的偏移
- shadowDy:设置阴影在垂直方向的偏移,就是垂直方向阴影开始的纵坐标位置
设置TextView的跑马灯效果
- singleLine:内容单行显示
- focusable:是否可以获取焦点
- focusableInTouchMode:用于控制视图在触摸模式下是否可以聚焦
- ellipsize:在哪里省略文本
- marqueeRepeatLimit:字母动画重复的次数
<TextView
android:id="@+id/text_test1"
android:shadowColor="@color/white"
android:shadowRadius="3.0"
android:shadowDx="10"
android:shadowDy="10"
android:text="这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView"
android:singleLine="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:textColor="@color/green"
android:textStyle="italic"
android:textSize="30sp"
android:background="@color/black"
android:gravity="center_vertical"
android:layout_gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="100dp">
<!--用于请求获取焦点-->
<requestFocus/>
</TextView>
也可通过自定义控件的方式来实现 获取焦点
package com.tian.myfirstapplication;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
import androidx.annotation.Nullable;
public class MyTextView extends androidx.appcompat.widget.AppCompatTextView {
public MyTextView(Context context) {
super(context);
}
public MyTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean isFocused() {
return true;
}
}
<com.tian.myfirstapplication.MyTextView
android:shadowColor="@color/white"
android:shadowRadius="3.0"
android:shadowDx="10"
android:shadowDy="10"
android:text="这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView"
android:singleLine="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:textColor="@color/green"
android:textStyle="italic"
android:textSize="30sp"
android:background="@color/black"
android:gravity="center_vertical"
android:layout_gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="100dp"/>
2.Button控件
- StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点<selector>,我们只需要将Button的background属性设置为该drawable资源即可轻松实现
- drawable:引用的Drawable位图。
- state_focused:是否获得焦点
- state_pressed:控件是否被按下
- state_enabled:控件是否可用
- state_selected:控件是否被选择,针对有滚轮的情况
- state_checked:控件是否被勾选
- state_checkable:控件可否被勾选,eg:checkbox
- state_window_focused:是否获得窗口焦点
- state_active:控件是否处于活动状态,eg:slidingTab
- state_single:控件包含多个子控件时,确定是否只显示一个子控件
- state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态
- state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
- state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_baseline_5g_24" android:state_pressed="true"/>
<item android:drawable="@drawable/ic_baseline_4k_24"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#ffff0000" android:state_pressed="true"/>
<item android:color="#ff00ffff" />
</selector>
<Button
android:layout_width="200dp"
android:layout_height="100dp"
android:background="@drawable/btn_selector"
android:backgroundTint="@color/btn_color_selector"
android:text="我是按钮" />
- 点击事件
- 长按事件
- 触摸事件
package com.tian.myfirstapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.animation.TimeAnimator;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String TIAN = "tianlog";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn_test);
//点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TIAN,"onClick");
}
});
//长按事件
btn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.e(TIAN,"onLongClick");
return false;
}
});
//触摸事件
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e(TIAN,"OnTouchListener"+event.getAction());
return false;
}
});
}
}
2022-10-08 20:22:04.371 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener0
2022-10-08 20:22:04.442 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:04.787 7121-7121/com.tian.myfirstapplication E/tianlog: onLongClick
2022-10-08 20:22:05.244 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:05.419 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:05.570 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.321 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.619 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.818 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.953 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener1
2022-10-08 20:22:07.000 7121-7121/com.tian.myfirstapplication E/tianlog: onClick
PS:当返回值为true时其他的方法自动被屏蔽
3.控件EditText
- hint:输入提示
- textColorHint 输入提示文字的颜色
- inputType:输入类型
- drawableXxxx:在输入框的指定方位添加图片
- drawablePadding:设置图片与输入内容的间距
- paddingXxxx:设置内容与边框的间距
- background:背景色
private static final String TIAN = "tianlog";
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn_test);
editText = findViewById(R.id.ed_text);
//点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TIAN,"onClick");
Log.e(TIAN,editText.getText().toString());
}
});
<EditText
android:id="@+id/ed_text"
android:hint="请输入用户名"
android:textColorHint="#95a1aa"
android:inputType="text"
android:drawableLeft="@drawable/ic_baseline_person_24"
android:drawablePadding="20dp"
android:paddingLeft="20dp"
android:layout_width="match_parent"
android:layout_height="100dp"/>
4.ImageView控件
- src:设置图片资源
- scaleType:设置图片缩放类型
- maxHeight:最大高度
- maxWidth:最大宽度
- adjustViewBounds:调整View的界限
缩放类型:
- fitStart:保持宽高比缩放图片,知道较长的边与Image的边长相等,缩放完成后将图片放再ImageView的左上角。
- fitCenter:默认值,同上,缩放后放于中间。
- fitEnd:同上,缩放后放于右下角。
- fitXY:对图像进行横纵方向进行独立缩放,使得该图片完全适应ImageView,但是图片的宽高比可能会发生改变。
- center:保持原图大小,显示在ImgaeView的中心,当原图的size大于ImageView的size,超过部分裁剪处理
- centerCrop:保持宽高比缩放图片,直到完全覆盖ImageView,可能会出现显示不完全。
- centerInside:保持宽高比缩放图片,直到ImageView能完全地显示图片/
- matrix:不改变原图大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理。
android:scaleType="center"
<ImageView
android:src="@drawable/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxHeight="200dp"
android:maxWidth="200dp"
android:adjustViewBounds="true"
/>
5.ProgressBar控件
- max:进度条的最大值
- progress:进度条已完成进度值
- indeterminacte:如果设置成true,则进度条不精确显示进度
- style="?android:attr/progressBarStyleHorizontal"水平进度条
progressBar = findViewById(R.id.pro_bar);
//点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//判断当前进度条是否显示,显示就关掉不显示就让其显示
if (progressBar.getVisibility() == View.GONE){
progressBar.setVisibility(View.VISIBLE);
}else {
progressBar.setVisibility(View.GONE);
}
}
});
//点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//每点击一次按钮,进度条就加10 总数100
int progress = progressBar.getProgress();
progress+=10;
progressBar.setProgress(progress);
}
});
<ProgressBar
android:id="@+id/pro_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:layout_width="300dp"
android:layout_height="wrap_content"/>
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:indeterminate="true"
android:layout_width="300dp"
android:layout_height="wrap_content"/>
6.Notification与NotificationManager
- 创建一个NotficationManager
NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Adroid系统级服务的句柄,返回对应的对象,在这里需要放回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可
- 使用Builder构造器来创建Notfication对象
使用NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常工作。Android8.0新增了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的机器上显示。
常见方法说明:
- setContentTitle(String string) 设置标题 (必须设置)
- setContentText(String string)设置文本内容(必须设置)
- setSmallIcon(int icon)设置小图标 (必须设置)
- setLargeIcon(Bitmap icon)设置通知的大图标
- setColor(int argb)设置小图标的颜色
- setContetnIntent(PendingIntent intent)设置点击通知后的跳转意图
- setAutoCancel(boolean boolean)设置点击通知后自动清除通知
- setWhen(long when) 设置通知被创建的时间
ps:Android5.0系统开始,对于通知栏图标的设计进行了修改。现在Google要求,所有应用程序的通知栏图标,应该只使用alpha图层来进行绘制,而不应该包括RGB图层
- NotificationChannel
通知渠道,Android 8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。
通知的重要程度设置,NotificationManager类中
- IMPORTANCE_NONE:关闭通知
- IMPORTANCE_MIN:开启通知,不会弹出,但没有提示音,状态栏中无显示。
- IMPORTANCE_LOW:开启通知,不会弹出,不发出提示音,状态栏中显示。
- IMPORTANCE_DEFAULT:开启通知,不会弹出,发出提示音,状态栏中显示
- IMPORTANCE_HIGH:开启通知,会弹出,发出提示音,状态栏中显示
package com.tian.myfirstapplication;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
public class NotificationActivity extends Activity {
private NotificationManager manager;
private Notification notification;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notification_activity_layout);
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel notificationChannel = new NotificationChannel("tian", "测试通知", NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(notificationChannel);
}
Intent intent = new Intent(this, MainActivity.class);
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);
//前三个为必须设置的属性 时间默认为当前时间可设置可不设置
notification = new NotificationCompat.Builder(this, "tian")
.setContentTitle("测试通知:官方通知")
.setContentText("世界那么大,我想去看看")
.setSmallIcon(R.drawable.ic_baseline_person_24)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.test))
.setColor(Color.parseColor("#ff0000"))
.setContentIntent(activity)
.setAutoCancel(true)
.build();
}
public void deleteNotification(View view) {
manager.cancel(1);
}
public void sendNotification(View view) {
manager.notify(1,notification);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:onClick="sendNotification"
android:layout_width="100dp"
android:layout_height="100dp"/>
<Button
android:onClick="deleteNotification"
android:layout_width="100dp"
android:layout_height="100dp"/>
</LinearLayout>
7.ToolBar控件
- layout_width="match_parent"
- layout_height="?attr/actionBarSize"
- background="#ffff00"
- app:navigationicon="@drawable/ic_baseline_arrow_back_24"
- app:title="主标题"
- app:titleTextColor="#ff0000"
- app:titleMarginStart="90dp"
- app:subtitle="子标题"
- app:subtitleTextColor="#00ffff"
- applog="@mipmap/ic_launcher"
<androidx.appcompat.widget.Toolbar
android:id="@+id/tb"
android:background="#ffff00"
app:navigationIcon="@drawable/ic_baseline_arrow_back_24"
app:title="@string/tool_bar_title"
app:titleTextColor="#ff0000"
app:titleMarginStart="90dp"
app:subtitle="子标题"
app:subtitleTextColor="@color/green"
app:logo="@drawable/test"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
Toolbar toolbar = findViewById(R.id.tb);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("tianlog","toolbar被点击了");
}
});
可以这样设置标题的居中 同理可设置图片 副标题等等(推荐使用)
<androidx.appcompat.widget.Toolbar
android:id="@+id/tb"
android:background="#ffff00"
app:navigationIcon="@drawable/ic_baseline_arrow_back_24"
app:titleMarginStart="90dp"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<TextView
android:textColor="@color/green"
android:text="标题"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.appcompat.widget.Toolbar>
8.AlertDialog控件
- AlertDialog.Builder builder = new AlertDialog.Builder(context);构建Dialog的各种参数
- Builder.setIcon(int iconId);添加ICON
- Builder.setTitle(CharSequence title);添加标题
- Builder.setMessage(CharSequence message);添加信息
- Builder.setView(View view);设置自定义布局
- Builder.create();创建Dialog
- Builder.show();显示对话框
- setPositiveButton 确定按钮
- setNegativeButton 取消按钮
- setNeutraButton 中间按钮
<Button
android:onClick="showAlertDialog"
android:background="@color/green"
android:text="显示对话框"
android:layout_marginTop="10dp"
android:layout_width="100dp"
android:layout_height="50dp"/>
public void showAlertDialog(View view) {
View dialogView = getLayoutInflater().inflate(R.layout.alert_dialog_layout, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//注意set方法返回的builder而create返回的不是builder所以必须放再后面
builder.setIcon(R.drawable.ic_baseline_person_24)
.setTitle("我是对话框")
.setMessage("今天天气很好,出去走走吧")
.setView(dialogView)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("tianlog","点击了确定");
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("tianlog","点击了取消");
}
})
.setNeutralButton("中间按钮", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("tianlog","点击了中间按钮");
}
})
.create()
.show();
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@color/green"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:src="@drawable/test"
android:maxHeight="200dp"
android:maxWidth="200dp"
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="哈哈,天气很好"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
9.PopupWindow控件
- setContentView(View contentView);设置popupWindow显示的view
- showAsDropDown(View anchor);相对某个控件的位置(正左下方),无偏移
- showAsDropDown(View anchor,int xoff,int yoff)相对某个控件的位置,有偏移
- setFocusable(boolean focusable)设置是否获取焦点
- setBackgroundDrawable(Drawable background)设置背景
- dismiss() 关闭弹窗
- setAnimationStyle(int animationStyle)设置加载动画
- setTouchable(boolean touchable) 设置触摸使能
- setOutsideTouchable(boolean touchable) 设置PopupWindow外卖呢的触摸使能
public void popupWindowShow(View view) {
View inflate = getLayoutInflater().inflate(R.layout.alert_dialog_layout, null);
ImageView img_test = inflate.findViewById(R.id.img_test);
img_test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("tianlog","点击了popupWindow里面的图片控件");
}
});
PopupWindow popupWindow = new PopupWindow(inflate, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.test,getTheme()));
popupWindow.setFocusable(true);
popupWindow.showAsDropDown(view,10,10);
}
<Button
android:text="popupWindow显示"
android:onClick="popupWindowShow"
android:background="#ff0000"
android:layout_marginTop="10dp"
android:layout_width="100dp"
android:layout_height="50dp"/>