安卓开发学习2:xml配置布局与Java布局实例以及二者混合控制

    • xml配置布局实例
    • Java布局实例
      • 约束布局
      • 帧布局
      • 点击事件的另一种书写方式
    • Java代码和xml混合控制
      • 实例:GridLayout实现图片列表

xml配置布局实例


<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"><TextViewandroid: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 {@Overrideprotected 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 {@Overrideprotected 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(); // 结束activityLog.i("风景", "退出");}).show();});constraintLayout.addView(textView);}
}

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


// 写法一:箭头函数和监听类textView.setOnClickListener(new View.OnClickListener() {@Overridepublic 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() {@Overridepublic void onClick(View view) {new AlertDialog.Builder(MainActivity.this).setTitle("系统提示").setMessage("冲?").setPositiveButton("确定",new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Log.i("风景","查看");}}).setNegativeButton("退出",new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Log.i("风景","退出");finish(); // 结束activity}}).show();}});

Java代码和xml混合控制

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

1、xml文件配置

实例:GridLayout实现图片列表


<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};@Overrideprotected 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的关键字


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部