Android基础控件之基本属性

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011619283/article/details/82731018

Android中所有的UI控件都继承自View,在开始介绍View的基本属性之前,先学习一下Android是如何添加一个视图控件的。
在iOS中往某个界面上添加一个控件有两种方式:
1.使用xib或者storyboard,往可视化界面上拖一个控件(比如UIlabel,然后设置好frame和内容)即可。
2.使用代码创建一个UIlabel实例,然后调用[addSubView:]将label实例添加到界面的view上即可。

而Android其实也有两种方式:
1.也是在某个Activity对应的xml文件的Design模式上,拖一个控件上去(其实,我们更多的是在xml的Text的模式下,手写xml文件,添加一个控件对应的xml)。
2.在Activity对应的java文件中,创建一个控件实例,然后添加到该Activity对应的xml文件上即可。

后面会有代码和截图介绍这两种创建方式。

控件的id

如果我们需要在代码逻辑中修改某个控件的属性,那么用xml添加完视图后,我们就需要在.java文件中获取这个控件,而界面上可能会有很多个同类型的控件,那么我们就需要给每一个控件设置一个id。

<Button
    android:id="@+id/testBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="这是按钮" />

而.java中获取该控件的代码是这样的:

Button testButton = (Button) findViewById(R.id.testBtn);

控件的宽高

控件宽高的值,实际上是两种状态(wrap_content、match_parent)和固定值。
wrap_content 表示控件的宽或高是:内容的所占的宽或高。
match_parent 表示控件的宽或高等于父视图的宽或高(低版本的Android叫fill_parent)。
固定值,比如100dp、150dp这样的固定数据。

// 表示控件的宽高为内容的宽和高
android:layout_width="wrap_content"
android:layout_height="wrap_content"

// 表示控件的宽高为父视图的宽高
android:layout_width="match_parent"
android:layout_height="match_parent"

// 控件的宽为200,高为100android:layout_width="200dp"
android:layout_height="100dp"

注意点:
px(像素):一般表示分辨率,比如图片的分辨率是100x100px。再比如现在的手机大多都是1080*1920,但是如果我们设置控件的宽高为px的话,就没办法适配其他型号的手机了,所以现在很少用px来表示控件的宽高了。
dp:在介绍dp前要先介绍一下屏幕像素密度:相同尺寸情况下,分辨率越高,屏幕越清晰,即屏幕像素密度越大。屏幕像素密度指每英寸上面的像素点个数,单位是dpi,是“dot per inch”的缩写。
而dp即密度无关像素:单位dip或dp,是Density Independent Pixels的缩写,Android规定,在屏幕像素密度为160dpi的情况下,1dp=1px。而在像素密度为320dpi的情况下,1dp=2px,以此类推。计算公式:1dp=(像素密度/160dpi)*1px。这个dp就类似iOS中宽高的概念了,不同的设备1dp所表示的分辨率是不一样的,设置宽高为dp时,就能更好的适配不同尺寸的屏幕。
sp:主要用来设置文本字体的大小。

控件的背景

Android的控件背景可以是16进制的颜色,也可以是图片。

// 用16进制颜色设置控件背景
android:background="#F00"

知识点:
Android中颜色的表示法有很多种,比如RGB、ARGB、RRGGBB、AARRGGBB。

控件的可见性

该属性有三种状态值:gone、visible、invisible。

android:visibility="invisible"

gone 与invisible的区别是:gone 表示控件不可见,也不会占任何的位置,也不会有任何响应。
而invisible表示控件虽然不可见,但是会占据它的宽高位置。

扫描二维码关注公众号,回复: 4106982 查看本文章

举例:

<Button
        android:id="@+id/testBtn"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:text="这是按钮1" />
    <Button
        android:id="@+id/testBtn2"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:text="这是按钮2"
        android:visibility="gone" />
    <Button
        android:id="@+id/testBtn3"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:text="这是按钮3"
        android:visibility="invisible" />
    <Button
        android:id="@+id/testBtn4"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:text="这是按钮4"
        android:visibility="visible" />

控件的外边距

学习过HTML的都会知道CSS里的盒模式有个外边距和内边距。
外边距可以设置视图距离父视图上下左右的距离。
内边距可以设置视图内部内容距离自己边框上下左右的距离。
Android 的控件布局其实也用的是这个盒模式。

如果距离父视图上下左右的外边距相同,可以这么设置:

android:layout_margin="10dp"

当然,我们也可以单独的设置某个外边距:

android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"

API26,也就是Android 8.0之后新添加了这两个属性

android:layout_marginHorizontal="10dp"
android:layout_marginVertical="10dp"

控件的内边距

上面已经介绍过内边距的含义了,这里就直接介绍用法吧。

统一设置上下左右内边距:

android:padding="5dp"

各自设置内边距:

android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"

当然API26开始也设置了两个新属性:

android:paddingHorizontal="5dp"
android:paddingVertical="5dp"

点击事件

其实,Android所有的UI控件都有点击事件,因为这个事件是基类View就具有的。

android:onClick="test"

而这里的test是方法名,需要定义在对应的Activity内,而且必须定义公有方法。

public void test(Button btn) {
    // 这里执行点击事件逻辑
}

代码创建控件,并添加到界面视图上

使用XML创建视图,并获取某个控件的方式,在上面讲id这个基本属性时已经介绍过了。

这里补充一下用代码创建,并添加到视图上的方式:

// 创建一个文本控件
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText("Hello Android");
// 获取控件的布局对象
LinearLayout.LayoutParams lp = textView.getLayoutParams();
lp.width = 200;
lp.width = 50;
lp.setMargins(5,5,5,5);
textView.setLayoutParams(lp);

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main_content);
// 添加到XML视图上
linearLayout.addView(textView);

猜你喜欢

转载自blog.csdn.net/u011619283/article/details/82731018