安卓开发学习2:xml配置布局与Java布局实例以及二者混合控制
xml配置布局实例Java布局实例约束布局帧布局点击事件的另一种书写方式Java代码和xml混合控制实例:实现图片列表xml配置布局实例<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.andr
·
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的关键字
更多推荐
已为社区贡献12条内容
所有评论(0)