第三章 UI开发

一、常用控件的使用方法

1.1TextView

       TextView可以说是Android中最简单的一个控件了,它主要用于在界面上显示一段文本信息,比如在第1章看到的“Hello world!”。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <TextView
          android:id="@+id/text_view"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:gravity="Center"
          android:textSize="24sp"
          android:textColor="#00ff00"
          android:text="This is TextView" />
</LinearLayout>

android:gravity 来指定文字的对齐方式,可选值有top、bottom、left、right、center等,可以用“|”来同时指定多个值;

android:textSize 属性可以指定文字的大小

android:textColor 属性可以指定文字的颜色,在Android中字体大小使用sp作为单位

1.2Button

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <Button
           android:id="@+id/button"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:textAllCaps="false"
           android:text="Button" />
</LinearLayout>

android:textAllCaps 禁止将小写转为大写

在MainActivity中为Button的点击事件注册一个监听器(使用匿名类的方式注册),如下所示:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
// 在此处添加逻辑
            }
        });
    }
}

       这样每当点击按钮时,就会执行监听器中的onClick() 方法,我们只需要在这个方法中加入待 处理的逻辑就行。

       也可以使用实现接口的方式注册监听器,代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
// 在此处添加逻辑
                break;
            default:
                break;
        }
    }
}

1.3EditText

       EditText是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ...
        <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="hahaha"
        android:maxLines="2"
        />
</LinearLayout>

android:hint 属性指定了一段提示性的文本,当输入任何内容的时候,这段文本就会消失

android:maxLines指定了EditText的最大行数

1.4ImageView

用于在界面上展示图片的一个控件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ...
        <ImageView
        android:id="@+id/iamge_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_1"//给ImageView指定了一张图片
        />
</LinearLayout>

 imageView.setImageResource(R.drawable.img_2);//将图片改成img_2

1.5ProgressBar

用于在界面上显示一个进度条,表示正在加载一些数据

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ...
        <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"//指定为水平进度条
        android:max="100"
        />
</LinearLayout>

 Android控件的可见性:

可以通过android:visibility进行指定,可选值有三个:visible(可见)、invisible(不可见,但仍占据原来的位置)、gone(不可见,不占用任何屏幕空间)

还可以通过代码来设置:setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE、 View.GONE

在代码中动态更新进度条的进度:

int progress=progressBar.getProgress();
progress=progress+10;//每点击一次按钮,获取当前进度,在现有进度上加10作为更新后的进度
progressBar.setProgress(progress);

1.6AlertDialog

在当前界面弹出一个对话框,这个对话框置顶于所有界面元素之上,能够屏蔽掉其他控件的交互能力,用来提示重要的内容或警告信息

AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("This is Dialog");//为这个对话框设置标题
dialog.setMessage("Something important.");//设置内容
dialog.setCancelable(false);//可否用Back键关闭对话框
dialog.setPositiveButton("OK",new DialogInterface).//OK的点击事件
     OnClickListener(){
          @override
          public void onClick(DialogInterface dialog,int which){
          }
     });
     dialog.setNegetiveButton("CANCEL",new DialogInterface).//CANCEL的点击事件
            OnClickListener(){
          @override
          public void onClick(DialogInterface dialog,int which){
          }
     });
     dialog.show();

1.7ProgressDialog

在界面上弹出对话框,对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心等待

ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setTitle("This is progressDialog");//为这个对话框设置标题
progressDialog.setMessage("Loading...");//设置内容
progressDialog.setCancelable(true);//可否用Back键关闭对话框
如果传入了false,则需调用ProgressDialog的dismiss()方法来关闭对话框
progressDialog.show();

二、详解4种基本布局

2.1LinearLayout线性布局

布局中的控件在线性方向上依次排列,默认控件水平方向排列

android:orientation=”horizontal”水平方向

控件宽度不能设置为android:layout_width=“match_parent”,会把水平方向占满,其他控件无法放置

android:orientation=”vertical”垂直方向

控件高度不能设置为android:layout_width=“match_parent”

android:layout_gravity=left,right,top,bottom,center指定控件的对齐方式

android:layout_weight指定控件的大小

2.2RelativeLayout相对布局

通过相对定位的方式让布局中控件可以出现在布局的任何位置

android:layout_margin指定控件在上下左右方向上的偏移

(Left、Right、Top、Bottom)某方向的距离

android:layout_alignParent****(Left、Right、Top、Bottom)相对于布局定位

android:layout_below让一个控件位于另一个控件下方,需要为这个属性指定相对控件id

android:layout_above让一个控件位于另一个控件的上方,需要为这个属性指定相对控件id

例:android:layout_above=“@id/button3"

android:layout_to(Left、Right)Of让一个控件位于另一个控件的左边

android:layout_align(Left、Right、Top,Bottom)让一个控件的某边缘和另一个控件的某边缘对齐

2.3帧布局

所有控件都会默认摆放在左上角,后面的会覆盖前面的,每一个组件都代表一个画面

可以用android:layout_gravity=left,right,top,bottom,center指定控件的对齐方式

三、自定义控件

3.1引入布局

 所有的控件都是直接或者间接继承自View,所有的布局都是直接或间接继承自ViewGroup

android:background用于为布局或控件指定一个背景,可以使用颜色或图片进行填充

※通过include语句将标题栏布局引入需要添加标题栏的布局就可以了:

<include layout="@layout/title"/> 

 3.2创建自定义控件

新建TitleLayout继承自LinearLayout,成为我们自定义的标题栏控件

public class TitleLayout extends LinearLayout {
     public TitleLayout(Context context, AttributeSet attrs) {
     super(context, attrs);
     LayoutInflater.from(context).inflate(R.layout.title, this);
     }
}

现在自定义控件已经创建好了,然后我们需要在布局文件中添加这个自定义控件,修改 activity_main.xml中的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent" >
 
     <com.example.uicustomviews.TitleLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />
</LinearLayout>

※添加自定义控件的时候,需要指明控件的完整包名,不可省略

为标题栏中的按钮注册点击事件,修改TitleLayout中的代码,如下所示:

public class TitleLayout extends LinearLayout {
     public TitleLayout(Context context, AttributeSet attrs) {
     super(context, attrs);
     LayoutInflater.from(context).inflate(R.layout.title, this);
     Button titleBack = (Button) findViewById(R.id.title_back);
     Button titleEdit = (Button) findViewById(R.id.title_edit);
     titleBack.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
               ((Activity) getContext()).finish();
               }
          });
     titleEdit.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
          Toast.makeText(getContext(), "You clicked Edit button",Toast.LENGTH_SHORT).show();
          }
     });
}
}

四、最常用的控件ListView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值