安卓学习之LinearLayout+TextView+Button

布局页面

<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,同理消息不会进行向上的传递机制,也就是在松手时长按事件不会把消息传递给单击事件,所以单击事件无法触发。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值