布局页面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
</LinearLayout>
布局的一种容器,类似HTML中的div标签
layout_height:容器的高度
layout_width:容器的宽度
orientation:容器中内容的,垂直或水平布局的方式
TextView控件
<TextView
android:id="@+id/tv_one"
android:text="@string/tv_one"
android:textColor="@color/black"
android:textStyle="italic"
android:textSize="50sp"
android:shadowColor="@color/red"
android:shadowRadius="3.0"
android:shadowDx="10.0"
android:shadowDy="10.0"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="200dp">
<requestFocus/>
</TextView>
TextView属性
id:在Java代码中可以获取控件的唯一标识
text:可以通过text属性设置控件的文本信息
textColor:可以设置文本的字体颜色信息
textSize:可以设置字体的大小(单位推荐使用sp)
gravity:设置文本文字的对齐方式,上,下,左,右,居中,垂直居中,水平居中
shadowColor:设置阴影字体颜色的属性
shadowRadius:设置阴影字体的模糊程度,值越大越模糊,值越小越清晰
shadowDx:阴影字体向横轴上偏移的坐标大小
shadowDy:阴影字体向纵轴上偏移的坐标大小
singleLine:文本是否排布在一行上显示
ellipsize:文本过长时,省略号的显示位置(其中marquee值为滚动显示,前提是要TextView控件聚焦的情况下)
marqueeRepeatLimit:设置marquee值时,marqueeRepeatLimit属性则设置滚动的次数,其中(marquee_forever值为无限循环滚动)
focusable:控件是否可以获取焦点(如果要实现滚动显示,此项必须开启)
focusableInTouchMode:用于控制视图在触摸模式下,是否可以聚焦
clickable:设置控件是否可以单击
当设置这些属性时,TextView运行后无法滚动的问题
解决办法1:
设置clickable属性:设置控件是否可以单击,启动后单击TextView控件实现滚动
解决办法2:
在TextView标记中添加<requestFocus/>强制聚焦,启动后自动聚焦,实现滚动
解决方法3:
重写MyTextView类型,继承TextView, 实现TextView中的方法,将isFocused方法直接return true
public class MyTextView extends TextView {
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;
}
}
Button控件
<Button
android:text="我是一个按钮"
android:background="@drawable/btn_selector"
android:backgroundTint="@color/btn_color_selector"
android:foreground="#ff00ff00"
android:layout_width="200dp"
android:layout_height="100dp">
</Button>
这三种属性都可以直接设置属性,也可以通过设置drawable的selector的方式来设置
selector中的state_pressed属性时按钮点击时启动的图片或颜色
background:设置背景色,也可以是image,下面例子是设置drawable的selector的方式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_baseline_build_24" android:state_pressed="true"/>
<item android:drawable="@drawable/ic_baseline_brightness_high_24"/>
</selector>
backgroundTint:设置文本颜色,下面例子是设置drawable的selector的方式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
tools:ignore="MissingDefaultResource">
<item android:color="#ffff0000" android:state_pressed="true"/>
<item android:color="#ff00ff00" />
</selector>
foreground:设置前景色
android:foreground="#ff00ff00"
按钮的点击事件
点击事件
//点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TAG,"onClick:");
}
});
长按事件
//长按事件
btn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.e(TAG,"onLongClick:");
return false;
}
});
触摸事件
//触摸事件
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e(TAG,"onTouch:"+event.getAction());
return false;
}
});
这三个事件是依此冒泡消息传递的,当用户点击按钮首先出发触摸事件,如果在触摸事件发生长按,会将消息传递给长按事件,如果松手长按事件再把消息传递给单击事件。
如果触摸事件返回true,则消息不会进行向上的传递机制,也就是触摸事件不会把消息传递给长按事件,所以长按事件和单击事件也无法获取消息,不会触发事件。
如果长按事件返回true,同理消息不会进行向上的传递机制,也就是在松手时长按事件不会把消息传递给单击事件,所以单击事件无法触发。