xml配置布局实例

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    android:background="@mipmap/bg"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="18sp"
        android:text="@string/start_name"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Java布局实例

约束布局

package com.example.ui_test;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.app.AlertDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
        ConstraintLayout constraintLayout = new ConstraintLayout(this);
        // 背景图设置
        constraintLayout.setBackgroundResource(R.mipmap.bg);
        setContentView(constraintLayout);
		// 创建TextView视图并设置文字内容、文字颜色、文字大小
        TextView textView = new TextView(this);
        textView.setText("Hello World");
        textView.setTextColor(Color.WHITE);
        // COMPLEX_UNIT_SP表示单位sp,是安卓系统推荐使用的单位
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);

		// 配置布局的宽高,设置为WRAP_CONTENT表示宽高由内容决定
        ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
		// 绑定参数到组件
        textView.setLayoutParams(params);
		// 监听点击方法
        textView.setOnClickListener((v) -> {

			// 弹窗
            new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")
                    .setMessage("冲?")
                    .setPositiveButton("确定", (dialog, which)->{
                        Log.i("风景","查看");
                    })
                    .setNegativeButton("退出", (dialog, which)->{
                        Log.i("风景", "退出");
                    }).show();
        });


        constraintLayout.addView(textView);

    }
}

在这里插入图片描述

帧布局

package com.example.ui_test;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.app.AlertDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
        FrameLayout constraintLayout = new FrameLayout(this);
        constraintLayout.setBackgroundResource(R.mipmap.bg);
        setContentView(constraintLayout);

        TextView textView = new TextView(this);
        textView.setText("Hello World");
        textView.setTextColor(Color.WHITE);
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);


        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );

        params.gravity = Gravity.CENTER;

        textView.setLayoutParams(params);

        textView.setOnClickListener((v) -> {


            new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")
                    .setMessage("冲?")
                    .setPositiveButton("确定", (dialog, which)->{
                        Log.i("风景","查看");
                    })
                    .setNegativeButton("退出", (dialog, which)->{
                    	finish(); // 结束activity
                        Log.i("风景", "退出");
                    }).show();
        });


        constraintLayout.addView(textView);

    }
}

点击事件的另一种书写方式


// 写法一:箭头函数和监听类
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")
                    .setMessage("冲?")
                    .setPositiveButton("确定", (dialog, which)->{
                        Log.i("风景","查看");
                    })
                    .setNegativeButton("退出", (dialog, which)->{
                        Log.i("风景", "退出");
                        finish(); // 结束activity
                    }).show();
            }
        });
// 写法二:仅监听类
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")
                    .setMessage("冲?")
                    .setPositiveButton("确定",

                        new DialogInterface.OnClickListener(){
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                Log.i("风景","查看");
                            }
                        })

                    .setNegativeButton("退出",

                        new DialogInterface.OnClickListener(){
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                Log.i("风景","退出");
                                finish(); // 结束activity
                            }
                        }

                    ).show();
            }
        });

Java代码和xml混合控制

1、将不变或者少变化的组件代码放到xml中
2、将复杂变化的组件使用Java实现

1、xml文件配置

实例:GridLayout实现图片列表

<?xml version="1.0" encoding="utf-8"?>
<GridLayout 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:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:rowCount="3"
    android:columnCount="4"
    tools:context=".MainActivity">

</GridLayout>

2、OnCreate方法

package com.example.grid_test;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {

    private ImageView[] imageViews = new ImageView[12];

    private int[] imagePath = new int[]{
        R.mipmap.img1,R.mipmap.img2,R.mipmap.img3, R.mipmap.img4,R.mipmap.img5,R.mipmap.img6,
            R.mipmap.img7,R.mipmap.img8,R.mipmap.img9, R.mipmap.img10,R.mipmap.img11,R.mipmap.img12
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GridLayout gridLayout = (GridLayout)findViewById(R.id.layout);

        for(int i=0 ; i < imageViews.length ; i++){

            imageViews[i] = new ImageView(MainActivity.this);

            imageViews[i].setImageResource(imagePath[i]);
            // 内边距
            imageViews[i].setPadding(2,2,2,2);

            // 获取网格布局的列数
            int columnCount = gridLayout.getColumnCount();
            // 获取设备宽度
            int screenWidth = this.getWindowManager().getDefaultDisplay().getWidth();

            // 图片的宽、高
            // screenWidth/columnCount表示按列平分设备宽度
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(screenWidth/columnCount, 220);

            imageViews[i].setLayoutParams(params);
            gridLayout.addView(imageViews[i]);

        }
    }
}

3、结果
在这里插入图片描述

注意图片名要符合命名规则,因为资源都是加载到R这个资源上的,访问图片资源的时候,实际上将图片资源转换成一个图片对象去访问,而图片名相当于对象的id,在Java中它就是一个属性,相当于一个变量,命名有需要符合变量命名规范,并且不能是Java的关键字

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐