Android入门之UI组件的应用(小白速成5)

UI组件属性介绍

最常见的是layout_widthlayout_height:
值为 wrap_content 是指包裹所有字就好,根据文字多少而定 其他组件可以修改宽和高
修改方式:
android:width=“100dp”
android:height=“100dp”
值为 fill_parent 表示与父窗口一样大 设置这个以后,其他的属性不能修改宽和高

还有其他的代码以及意思:

代码作用
android:ems设置每行的汉字个数,2代表2个汉字,即四个字符
android:background设置背景颜色,如:"@android:color/holo_blue_bright"
android:gravity设置文本位置,如设置成center文本将居中显示
android:textSize字体大小,如:“40sp”
android:textColor字体颜色,如:"#00ff00"
android:lines控制行数
android:singleLine="true"显示为单行,多出来的字母不显示,用。。。代替

如果我们要使某行文字产生走马灯的滚动效果,可以用如下代码:

<TextView
        android:id="@+id/textView2"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="152dp"
        android:layout_marginLeft="152dp"
        android:layout_marginTop="308dp"
        android:background="@android:color/holo_blue_bright"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:singleLine="true"
        android:text="12345678901234567890"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

注:这段文字必须设置为单行,然后当字数超过显示的上限时就会出现走马灯效果。(在获取焦点时)

UI组件的应用

ImageView的应用(插入图片)

imageView 是一个可以显示图片的 View组件。
而实现方法也非常简单,找到该组件并且拖动到合适的位置即可。
我们要把放入的图片提前存入res下的drawable文件夹,然后拖动以后,在 android:src=""中指定我们需要显示的图片。
如下图所示在这里插入图片描述
这时,我们运行已经可以看到我们要的图片显示到指定的位置了。
下面我们用代码实现:点击图片左右两边来实现图片的切换吧!

public class MainActivity extends AppCompatActivity {
    private int[] a=new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3
    };
    private  int count=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ImageView imageView =findViewById(R.id.imageView);
    
        final int width=this.getWindowManager().getDefaultDisplay().getWidth();

//这个点击事件不能确定点击的位置,所以换一个点击事件
//        imageView.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                ImageView view =(ImageView)v;
//                if(count==3){
//                    count=0;
//                }
//                view.setImageResource(a[count++]);
//
//            }
//        });

        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                int x=(int) event.getX();
                ImageView view =(ImageView)v;
                if(x>=(width/2)){

                if(count==2){
                    count=-1;
                }
                view.setImageResource(a[++count]);
                }else{

                    if(count==0){
                        count=3;
                    }
                    view.setImageResource(a[--count]);
                }
                return false;
            }
        });
    }
}

如果要实现点击图片左边切换上一张,点击右边切换下一张
首先要获得点击的x坐标
然后是获得屏幕的宽度,通过比较来确定到底是该切换上一张还是下一张。

注释中的代码由于获取不到点击位置,所以不管点击哪里都会切换下一张,而更换setOnTouchListener以后,我们便能获取到点击的位置了。(在前几讲中提到过)

EditText的应用(插入文本框)

依然是直接找到需要的文本框进行拖动。
在这里插入图片描述

Plain Text 和 Password 都是常用的输入框,大家各取所需即可。
文章开头的很多属性在这里都可以用到。
例如:

输入文字长度的限制

设置ems=“10” 也就是显示长度为10时,超过数量会自动换行。
但是添加singleLine=“true” 后,达到宽度后会自动向后滚动。
当我们定义maxLength=“10” 后,输入字符最多为10个。

输入文字提示的设置

当我们定义android:hint=“请输入数字” 后,文本框为空将自动提示后面的话。在这里插入图片描述
当我们定义android:textColorHint="#ff0000" 我们可以对提示信息的颜色进行修改。

输入文字内容的限制1

不仅如此,我们还能对输入的内容进行限制。
android:digits=“1234.±” 表示只允许我们输入引号中的内容。
android:numeric=“signed” 表示只允许输入数字,后面的参数有三个可供选择,integer只允许输入正整数、signed可以放入负数、decimal表示可以输入小数。

输入文字内容的限制2

刚才的简单代码只能实现一些简单的内容限制,如果我们需要更加精细的限制,还需要通过一些监听器来实现:

EditText editText2=findViewById(R.id.editText2);
        editText2.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) {
                String string=s.toString();

                if(string.indexOf("4")!=-1){
                    s.clear();
                    Toast.makeText(getApplicationContext(),"不能输入4",Toast.LENGTH_SHORT).show();

                }
            }
        });

生成了三个方法,分别表示在修改文本之前,修改时,修改后。
上述代码是指通过监视器判断是否出现了4,如果出现4,我们就清空输入的内容,并且弹出提示:不能输入4。
当然,在这里我们的clear方法是清空输入,也可以用delete方法删除固定的几个。

输入文字内容的限制3

下面我们介绍更简单更友好的过滤器方式:

EditText editText1=findViewById(R.id.editText3);
        editText1.setFilters(new InputFilter[]{
                //InputFilter.LengthFilter等同于 maxlength 对长度进行控制
                 new InputFilter.LengthFilter(5),
                //把所有小写字母变成大写
                new InputFilter.AllCaps(),

                //自己定义
                new InputFilter() {
                    @Override
                    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                        if("1".equals(source.toString())){
                            return "一";
                        }else if("2".equals(source.toString())){
                            return "二";
                        }else
                            return null;


                    }
                }
        });

过滤器中可以用系统提供的方法,例如:限制长度、控制大小写。我们也可以自己定义,上面的代码部分写的比较清楚。source表示刚输入的参数。

获取焦点问题

正常情况下,系统默认第一个组件获取焦点,但我们也可以通过代码让某个子元素优先自动获得焦点:
可以输入<requestFocus /> 如下图所示:

 <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="96dp"
        android:layout_marginLeft="96dp"
        android:layout_marginTop="72dp"
        android:ems="10"
        android:inputType="textPassword"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText">
        <requestFocus />
    </EditText>

好了,对于文字图片的插入方式以及各种有用的小限制就说这么多了。
看到这里啦,别忘了点个赞呐!!!
参考自:尚学堂课

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值