安卓开发阶段性学习总结

1. 各种布局

在安卓APP的开发中页面布局是学习的第一步,也是写一个页面的基础。故首先从页面布局开始。页面布局主要分为线性布局、约束布局、表格布局、帧布局、相对布局。下面我们就按照各类布局进行总结。

1.1 线性布局

1.1.1 线性布局的特点及其适用场景

线性布局是一种简单且灵活的布局方式。适用于需要按照顺序排列的视图场景。具体特点如下图。

特点说明
方向线性布局支持两种方向(横向、水平),默认为横向。
对其方式线性布局可以设置子视图在父视图中的对齐方式,如:顶部、底部、左侧和右侧对齐。
收缩当线性布局中的空间不足时子视图可以收缩。
兄弟视图间距可以设置子视图之间的间距,以控制视图之间的距离。

1.1.2 线性布局案例

线性布局代码片

<LinearLayout
	android:id="@+id/LinearLayout1"
	android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <LinearLayout
		android:layout_width="124dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#ADFF5F" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:background="#DA90D6"
        android:layout_weight="2"/>

</LinearLayout>

效果:
线性布局效果

1.2 约束布局(弹性布局)

1.2.1 约束布局的特点及其适用场景

约束布局是一种可以根据屏幕尺寸、分辨率和其他因素自动调整布局的布局方式。主要的使用场景多为多场景移动应用软件,这样可以更好的适配多种设备。具体特点如下图。

特点说明
灵活性可以根据不同的屏幕尺寸和分辨率自动调整布局,使应用在各种设备上都能有良好的显示效果。
适应性适用于需要在不同设备上进行展示应用,如手机或平板电脑。
高效性约束布局可以减少布局代码的复杂度,提高开发效率。
可维护性通过约束布局,可以将布局和内容分离,使得布局的修改更加容易维护。

1.2.2 约束布局案例

约束布局代码片

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="左上"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:textAllCaps="false"
            />
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="右上"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:textAllCaps="false"
            />
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="左下"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:textAllCaps="false"
            />
        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="右下"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:textAllCaps="false"
            />
    </RelativeLayout>

效果:
约束布局示例

1.3 帧布局

1.3.1 帧布局的特点及其适用场景

帧布局它允许在屏幕上放置一个或多个视图,每个视图都会被视为一个帧。这些帧会按照添加的顺序按照从上到下、从左到右的顺序绘制,但不考虑宽高比例。主要适用于简单的布局效果、有动画的效果和多级布局。但是不建议使用在复杂的布局。具体特点如下图。

特点说明
叠层视图按照添加的顺序层叠显示,但不考虑宽高比。
对齐对齐方式可以通过android:layout_alignItems和android:layout_alignSelf控制。
顺序绘制顺序与添加顺序相同。

1.3.2 帧布局案例

帧布局代码片

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:id="@+id/FrameLayout1"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent"    
    tools:context=".MainActivity"     
    android:foreground="@drawable/logo"    
    android:foregroundGravity="right|bottom">    
    
    <TextView    
        android:layout_width="200dp"    
        android:layout_height="200dp"    
        android:background="#FF6143" />    
    <TextView    
        android:layout_width="150dp"    
        android:layout_height="150dp"    
        android:background="#7BFE00" />    
     <TextView    
        android:layout_width="100dp"    
        android:layout_height="100dp"    
        android:background="#FFFF00" />    
        
</FrameLayout>    

效果:
帧布局效果

1.4 相对布局

1.4.1 相对布局的特点及其适用场景

相对布局是一种每一个部件均以相对某个部件或边框的布局形式。主要适用于多设备配置、动态布局和页面较为复杂的情况下使用。尤其是在需要频繁修改布局的情况下,相对布局的代码结构更加清晰,便于维护。具体特点如下图。

特点说明
灵活性允许根据控件之间的相对关系进行布局,可以根据需求灵活地调整控件的位置和大小。
自适应性可以根据不同屏幕尺寸和设备方向进行自适应调整,确保在不同设备上都可以有相同效果的布局。
可读性使用相对关系来描述控件的位置,代码可读性较高,易于理解和维护。
复杂布局可以提供更大的灵活性和自由度,方便控制控件之间的相对位置关系。
动态布局根据条件和数据动态地调整控件的位置和大小,适用于需要根据不同情况进行布局变化的场景。
图层效果里边的控件可以重叠。

1.4.2 相对布局案例

相对布局代码片

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textAllCaps="false"
        android:text="centerInParent" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:textAllCaps="false"
        android:text="alignParentRight" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:textAllCaps="false"
        android:text="alignParentBottom" />
</RelativeLayout>

效果:
在这里插入图片描述

2.界面交互功能

2.1按钮点击事件

点击按钮后因为制作了监视器,故有弹出弹出提示点击按钮。
按钮事件xml代码片

<Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:text="按钮"
        android:textSize="20dp" />

按钮点击事件java代码片

package cn.edu.baiyunu.midtermassignment;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"按钮被点击了",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

效果:
按钮效果
按钮事件

2.2列表项点击事件

因为制作了监视器,故可以看见点击列表后有弹窗弹出。
列表项事件xml代码片段

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ListView
        android:id="@+id/list_item"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        />

</RelativeLayout>

列表项事件java代码片段

public class MainActivity extends AppCompatActivity  {
    private String[] data = {"G","D","B","Y","X","Y"};
    @Override
    protected  void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,data);
        ListView listView = (ListView) findViewById(R.id.list_item);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText((Context) MainActivity.this, (String) listView.getItemAtPosition(i),Toast.LENGTH_LONG).show();
            }
        });
    }
}

效果:
列表项页面
列表项效果

2.3滑动操作

滑动操作xml代码片

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical" />
</RelativeLayout>

滑动操作MainActivity.java代码片

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private MyAdapter adapter;

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

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        List<String> dataList = new ArrayList<>();
        for (int i = 0; i < 50; i++) {
            dataList.add("Item " + i);
        }

        adapter = new MyAdapter(dataList);
        recyclerView.setAdapter(adapter);
    }
}

滑动操作MyAdapter.java代码片

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> dataList;
    public MyAdapter(List<String> dataList) {
        this.dataList = dataList;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.textView.setText(dataList.get(position));
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(android.R.id.text1);
        }
    }
}

效果:
实现效果图
页面布局

2.4菜单项

菜单项xml代码片

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/save"
        android:title="保存" />
    <item
        android:id="@+id/setting"
        android:title="设置" />
    <item
        android:id="@+id/exit"
        android:title="退出" />
</menu>

菜单项xml代码片

package cn.edu.baiyunu.midtermassignment;
        import androidx.annotation.NonNull;
        import androidx.appcompat.app.AppCompatActivity;

        import android.os.Bundle;
        import android.view.Menu;
        import android.view.MenuItem;
        import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.optionn,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.save:
                Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
                return true; 
            case R.id.setting:
                Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
                return true; 
            case R.id.exit:
                finish();
                return true;
            default:
                return super.onOptionsItemSelected(item); // 其他情况交给父类处理
        }
    }
}

效果:
菜单项展示

2.5对话框

点击按钮,即可出现对话框。
对话框xml代码片

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
    android:id="@+id/show_dialog_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="显示对话框"
    android:layout_centerInParent="true"/>

</RelativeLayout>

对话框java代码片

import android.app.AlertDialog;  
import android.content.DialogInterface;  
import android.os.Bundle;  
import androidx.appcompat.app.AppCompatActivity;  
import android.view.View;  
import android.widget.Button;  
  
public class MainActivity extends AppCompatActivity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        Button showDialogButton = findViewById(R.id.show_dialog_button);  
        showDialogButton.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                showDialog();  
            }  
        });  
    }  
  
    private void showDialog() {  
        AlertDialog.Builder builder = new AlertDialog.Builder(this);  
        builder.setTitle("标题")  
                .setMessage("这是一个简单的对话框示例")  
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {  
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                        // 用户点击了确定按钮,你可以在这里添加处理逻辑  
                    }  
                })  
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {  
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                        // 用户点击了取消按钮,你可以在这里添加处理逻辑  
                        dialog.cancel();  
                    }  
                })  
                .show();  
    }  
}

效果:
点击
对话框效果

3.学习中期总结

经过一段时间的学习和实践,我已经掌握了安卓应用开发的基础框架和方法。但是在深入学习应用的过程中,我发现自己在布局和组件的灵活应用方面仍有所欠缺。主要是无法制作出出具有高可玩性的应用时,
我需要进一步加深对布局和组件的理解,并通过不断的实践来锻炼自己的设计思维和技能。去熟练每一种布局和部件的作用,并且通过GitHub等开源仓库和平台仔细学习一两个项目,去体会制作安卓应用中的方式方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白xy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值