目录

  • 布局方式
  • 线性布局
  • 相对布局
  • 控件属性
  • 基本控件
  • TextView
  • 设置阴影
  • 跑马灯
  • 中划线
  • 下划线
  • EditText
  • Button
  • RadioButton
  • CheckBox
  • 监听事件
  • ImageView
  • 动态设置图片


布局方式

线性布局

LinearLayout需要指定线性布局的方向,设置orientation属性,vertical为垂直布局,horizontal为水平布局

相对布局

RelativeLayout属性详解

控件属性

layout_width:组件宽度
layout_height:组件高度
id:为TextView设置一个id,用来在代码里面找到这个组件
text:设置要显示的文本
textColor:设置文本的颜色
textStyle:设置字体的风格,内置有三个可选项:normal(无效果),bold(加粗),itallc(斜体)
textSize:字体大小,单位为sp
background:控件的背景,可以是颜色或者是图片
gravity:控件中内容的对齐方式

基本控件

TextView,EditText,Button这些控件的layout_width,layout_height,以及id不用多讲,就是控件的宽高和id。还有常用的可供设置的属性有textSize字体大小,textColor字体颜色,background控件的背景,可以引用drawable资源设置为图片,margin类和padding类分别设置控件的外边距和内边距,layout_gravity设置当前控件的对齐方式,gravity设置控件内部控件的对齐方式。
一般来讲,空间大小和控件间的距离用单位dp,字体大小用单位sp。

TextView

maxLines属性用于设置textView的最大显示行数,当实际行数超过最大行数时,可以用ellipsize属性设置textView长度过长时的缩略显示方式,这是关于ellipsize的属性的博客。

设置阴影

shadowColor:设置阴影的颜色,需要与shadowRadius一起使用
shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0
shadowDx:设置阴影在水平方向上的偏移
shadowDy:设置阴影在竖直方向上的偏移

跑马灯

跑马灯需要在单行显示即maxLines属性为1,并且文字显示不下的前提下,设置ellipsize属性为marquee(eliipsize表示在哪里省略文本),这时在获取到当前控件焦点的情况下,可以横向滚动,接下来设置focusable属性为true表示可以获取焦点,再设置focusableInTouchMode属性为true,表示可以通过触摸获取焦点,这是关于focusable和focusableInTouchMode的区别的博客。最后设置重复滚动次数marqueeRepeatLimit属性为marquee_forever,表示一直滚动。
示例:

<TextView
        android:id="@+id/tv_7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="string/TextView_Text7string/TextView_Text7string/TextView_Text7"
        android:textSize="25sp"
        android:textColor="@color/YellowColor"
        android:layout_gravity="center"
        android:layout_marginTop="15dp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"/>
        <requestFocus/>

中划线

tv_4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
        tv_4.getPaint().setAntiAlias(true);

下划线

下划线和中划线不能同时存在
第一种:

tv_5 = findViewById(R.id.tv_5);
        tv_5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);

第二种用xml的方式:

tv_6 = findViewById(R.id.tv_6);
        tv_6.setText(Html.fromHtml("<u>TextView_Text6</u>"));

EditText

EditText有一个hint属性,该属性可以设置在EditText没有内容时的提示信息(textColorHint属性设置提示文字的颜色),和TextView一样maxLines属性设置可以显示的最大行数,intputType属性可以设置允许输入的文本类型,如数字number,密码textPassword,当设置为textPassword时,输入内容会用暗文保护。
drawableXxxx在输入框的指定方向添加图片
drawablePadding设置图片与输入框之间的距离
paddingXxxx设置内容与边框的间距
background设置背景色
EditText有用于监视输入改变的监听器
account为一个EditText实例:

account.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                Toast.makeText(EditTextActivity.this,s.toString(),Toast.LENGTH_SHORT).show();
            }
        });

获取EditText内容可以使用EditText的getText()方法,例如:editText.getText()

Button

Button的Text属性默认是全大写,要按照设置的内容显示需要设置textAllCaps属性为false
Button的两种点击事件设置方法为:
第一种:
在xml文件中设置onClick属性

<Button
        android:id="@+id/bt_1"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:text="@string/Button1"
        android:textAllCaps="false"
        android:textSize="25sp"
        android:textColor="@color/TextColor_red"
        android:background="@drawable/bk_filleted_corner"
        android:layout_centerHorizontal="true"
        android:onClick="showToast"/>

在Activity中写一个与onClick的属性相同名字的方法

public void showToast(View view){
    //点击过后弹出一个提示:Button1被点击了
        Toast.makeText(this,"Button1被点击了",Toast.LENGTH_SHORT).show();
    }

第二种:这种也是比较常用的,给Button设置一个点击监听器

bt_2.setOnClickListener(v -> Toast.makeText(ButtonActivity.this,"Button2被点击了",Toast.LENGTH_SHORT).show());

Button的点击事件的返回值为true时,会导致在其后面检测的click事件不执行

RadioButton

单选框,在一个RadioGroup里的RadioButton可以设置一个默认选中的项,设置checked属性为true,
RadioGroup可以设置布局方向orientation为vertical或者horizontal。当然和其他组件一样,可以设置background。

<RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="15dp">
        <RadioButton
            android:id="@+id/radioButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="男"
            android:textSize="25sp"
            android:textColor="@color/TextColor_red"
            android:checked="true"/>

        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="女"
            android:textSize="25sp"
            android:textColor="@color/TextColor_red"/>
    </RadioGroup>

为RadioButton设置选项改变的监听事件:

radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
            RadioButton radioButton = group.findViewById(checkedId);
            Toast.makeText(RadioButtonActivity.this,radioButton.getText(),Toast.LENGTH_SHORT).show();
        });

CheckBox

<CheckBox
        android:id="@+id/checkbox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Android"
        android:textSize="25sp"
        android:textColor="@color/TextColor_green"
        android:layout_below="@id/checkbox_textView"
        android:layout_marginBottom="15dp"/>

    <CheckBox
        android:id="@+id/checkbox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="IOS"
        android:textSize="25sp"
        android:textColor="@color/TextColor_green"
        android:layout_below="@id/checkbox1"
        android:layout_marginBottom="15dp"/>

    <CheckBox
        android:id="@+id/checkbox3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="其他"
        android:textSize="25sp"
        android:textColor="@color/TextColor_green"
        android:layout_below="@id/checkbox2"
        android:layout_marginBottom="15dp"/>

监听事件

可以每一个CheckBox设置监听事件

checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Toast.makeText(CheckBoxActivity.this,isChecked?"Android被选中了":"Android被取消了选中",Toast.LENGTH_SHORT).show();
            }
        });

也可以自己写一个类实现自所需要设置监听的Listener接口,这里需要实现的接口是CompoundButton.OnCheckedChangeListener,代码如下

//为所有CheckBox按钮设置选中改变事件
    public void setListeners(){
        OnCheckedChange onCheckedChange = new OnCheckedChange();
        checkBox1.setOnCheckedChangeListener(onCheckedChange);
        checkBox2.setOnCheckedChangeListener(onCheckedChange);
        checkBox3.setOnCheckedChangeListener(onCheckedChange);
        checkBox4.setOnCheckedChangeListener(onCheckedChange);
        checkBox5.setOnCheckedChangeListener(onCheckedChange);
        checkBox6.setOnCheckedChangeListener(onCheckedChange);

    }

    class OnCheckedChange implements CompoundButton.OnCheckedChangeListener{

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            switch (buttonView.getId()){
                case R.id.checkbox1:
                    Toast.makeText(CheckBoxActivity.this,isChecked?"Android被选中了":"Android被取消了选中",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.checkbox2:
                    Toast.makeText(CheckBoxActivity.this,isChecked?"IOS被选中了":"IOS被取消了选中",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.checkbox3:
                    Toast.makeText(CheckBoxActivity.this,isChecked?"其他被选中了":"其他被取消了选中",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.checkbox4:
                    Toast.makeText(CheckBoxActivity.this,isChecked?"打游戏被选中了":"打游戏被取消了选中",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.checkbox5:
                    Toast.makeText(CheckBoxActivity.this,isChecked?"做饭被选中了":"做饭被取消了选中",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.checkbox6:
                    Toast.makeText(CheckBoxActivity.this,isChecked?"其他被选中了":"其他被取消了选中",Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }

然后在onCreate方法里设置监听setListeners()就可以了。

ImageView

ImageView有一个用于设置图片展示方式的属性scaleType,Android ImageView ScaleType:图解 fitStart 保持宽高比缩放图片,直到某一边长充满ImageView,可能留白,将图片置于上面或左边
fitCenter 默认值,将图片置于中间
fitEnd 同上,缩放后将图片置于右边或下边
fitXY 将图片进行缩放使其完全填充ImageVIew,图片可能发生形变
center 不缩放,置于中间,超出边界的不显示
centerCrop 保持长宽比缩放,直到完全填充ImageView,图片超出ImageView部分不显示
centerInside 保持宽高比缩放,直到ImageView能够完全显示图片,如果原图小于ImageView,则直接显示在中间,不缩放
matrix 不缩放,从左上角绘制
adjustviewBounds 设置为true,会自动调整ImageView的大小来适应图片大小
加载网络图片可以使用GitHub上的glide库,加载方法:

Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);

一个使用的例子:

btn_imv.setOnClickListener(v -> Glide.with(ImageViewActivity.this).load("http://img2.ddove.com/upload/20121009/090649003786.jpg").error(R.drawable.picture2).into(imv_2));

error()方法是在加载失败时加载另一张图片。
这里加载的是网络图片,所以需要在AndroidManifest里面申请网络权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

动态设置图片

//动态获取图片
        String imageName = "PictureName";
        final int resId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());
        if (resId != 0) {
        	//打印日志
            Log.e("picture load", "successful");
            //设置图片资源
            holder.imageView.setImageResource(resId);
        }

这里的imageName就是图片的名字