栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android入门系列(一):AS的安装和UI界面控制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android入门系列(一):AS的安装和UI界面控制

一、AS环境搭建 1.下载

进入Android Studio官网下载安装包

Download Android Studio and SDK tools | Android Developers (google.cn)

2.安装

安装过程中选择安装SDK和API

安装完成后,打开进入Tools中的SDK Manager,安装Android 8.0 API 26

3.创建运行环境

安装AVD,Android Virtual Device

使用Android 8.0的API 26比较稳定

二、创建第一个Android项目 1.新建一个项目

2.直接在AVD上运行即可 三、UI界面的控制

ui控制可以通过xml和java代码控制,也可组合控制,还有一种自定义View的方法

1.使用xml来控制页面

在app下的src下的main下的res下的layout新建布局文件

点击layout文件夹按下Alt+Insert新建一个xml文件

新建一个xml文件如下



    
  1. 其中,layout_width和layout_height分别表示控件或布局的宽和高,设置属性match_parent为整个屏幕的最大值,wrap_content为布局或控件里内容所包含的最大值

  2. text,style等属性可以设置引用属性,即使用@符号引用res目录下values目录下的文件名

    styles.xml

    
    
        
    
    

    strings.xml

    
        My Application
        测试字符串
    
    
  3. gravity和layout_gravity属性分别是控件中内容的位置和控件本身位于布局中的位置,实际效果如下图

每一个xml文件都应该有一个对应的Activity文件,并且互相绑定

在java的一个包中,新建一个java文件

继承Activity类并且重写onCreate的void方法

设置绑定即setContentView

package com.thundersoft.test;

import android.app.Activity;
import android.os.Bundle;

import androidx.annotation.Nullable;

import com.thundersoft.myapplication.R;

public class TestAcitivity extends Activity {

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

也可以创建activity会自动创建对应的layout并且绑定

2.使用java代码来控制页面

实现方法是,先创建布局管理器,接着创建具体的组件,最后将组件放入布局管理器中

package com.thundersoft.test;

import android.app.Activity;
import android.app.alertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.frameLayout;
import android.widget.TextView;

import androidx.annotation.Nullable;

import com.thundersoft.myapplication.R;

public class Test2Activity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//         创建一个帧布局管理器
        frameLayout frameLayout = new frameLayout(Test2Activity.this);
//        在activity中显示这个activity布局
        setContentView(frameLayout);
//        设置背景
//        frameLayout.setBackground(this.getResources().getDrawable(R.drawable.ic_launcher_background));

//        new一个TextView对象
        TextView textView = new TextView(Test2Activity.this);
        textView.setText(R.string.test_string);
//        将textview给放进去
        frameLayout.addView(textView);

//        设置布局参数对象
        frameLayout.LayoutParams layoutParams = new frameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
//        位置显示
        layoutParams.gravity = Gravity.CENTER_HORIZonTAL | Gravity.CENTER_VERTICAL;
        textView.setLayoutParams(layoutParams);

//        new一个按钮并且放到布局中
        Button button = new Button(Test2Activity.this);


//        为按钮设置一个点击事件
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new alertDialog.Builder(Test2Activity.this).setTitle("对话框标题")
                        .setMessage("对话框内容")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Log.i("确定区域","进入");
                            }
                        })
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Log.i("取消区域","退出");
                            }
                        })
                        .show();
            }
        });

        frameLayout.addView(button);
    }
}

如果要测试该页更改清单文件的如下代码





    
        

        
    

3.使用java代码和xml文件一起控制

新建一个GridlLayout网格布局

代码如下





其中

​ padding属性代表距离内部元素的间距

​ orientation表示内部元素是横向排列,纵向排列是android:orientation=“vertical”

​ rowCount和columnCount分别是该布局类的元素行数和列数

​ context即是xml和java代码页面的绑定

​ id是为了让java代码能够通过findviewbyid找到该布局对象

对应的java文件如下,Test3Activity:

package com.thundersoft.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.GridLayout;
import android.widget.ImageView;

import androidx.annotation.Nullable;

import com.thundersoft.myapplication.R;

public class Test3Activity extends Activity {

    private ImageView[] img = new ImageView[4];
    private int[] imgIndex = new int[]{
            R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test3);
        GridLayout layout = findViewById(R.id.layout);
        for (int i = 0; i < imgIndex.length; i++) {
            img[i] = new ImageView(Test3Activity.this);
            img[i].setImageResource(imgIndex[i]);
            img[i].setPadding(6,6,8,8);
            ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(500, 500);
            img[i].setLayoutParams(layoutParams);
            layout.addView(img[i]);

        }
    }
}

其中

​ 通过新建一个图像组件数组和一个图像访问地址数组,从xml中拿到布局元素,通过遍历将每一个图像设置大小和边距并且放进layout中

没有的组件要插入组件,有的,使用findView的方式找到组件并且自定义

4.开发自定义的View

viewgroup是view的一个组合,它同时也可以和view同级

安卓开发提供了很多view组件,但是不够自定义,用户可以继承view开发自己的view

先建一个xml文件,使用frameLayout





再建立一个view.java继承view

package com.thundersoft.test;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

import com.thundersoft.myapplication.R;

public class Test4View extends View {
    public float x;
    public float y;
    public Test4View(Context context) {
        super(context);
        x = 300;
        y = 300;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
//        创建并且实例化paint对象
        Paint paint = new Paint();
//        根据图片生成位图对象
        Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
                R.mipmap.ic_launcher);
//        绘制图片
        canvas.drawBitmap(bitmap,x,y,paint);
//        判断图片是否被回收
        if(bitmap.isRecycled()) {
            bitmap.recycle();
        }
    }
}

继承view后,需要写构造函数并且重写onDraw方法

写页面

package com.thundersoft.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.frameLayout;

import androidx.annotation.Nullable;

import com.thundersoft.myapplication.R;

public class Test4Activity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test4);
        frameLayout frameLayout = findViewById(R.id.test4view);
//        实例化view
        Test4View test4View = new Test4View(this);
        test4View.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
//                设置x和y
                test4View.x = event.getX();
                test4View.y = event.getY();
//                重设组件位置
                test4View.invalidate();
                return true;
            }
        });
        frameLayout.addView(test4View);
    }
}

这样就将自己的view放到了自己的viewgroup也在这里也就是帧布局管理器中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531017.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号