Android Studio简易项目|随机选择器(类似转盘)

devtools/2024/10/21 15:10:03/

一、背景

为了强化对flowlayout流式布局的理解和简易安卓项目架构结构的理解,写一个小项目,随机选择器,控制可见等

二、项目代码

2.1流式布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="8dp"android:background="@drawable/item_background"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@android:color/white"android:textSize="16sp"/>
</LinearLayout>
2.2布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"><androidx.constraintlayout.widget.ConstraintLayoutandroid:id="@+id/tip"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"><EditTextandroid:id="@+id/tip_title"android:layout_width="200dp"android:layout_height="50dp"android:hint="@string/btn_edit"android:gravity="center"app:layout_constraintStart_toStartOf="parent"app:layout_constraintBottom_toBottomOf="parent"></EditText><android.widget.Buttonandroid:id="@+id/btn_save"android:layout_width="80dp"android:layout_height="40dp"android:layout_marginStart="@dimen/margin_200"android:layout_marginBottom="8dp"android:background="@drawable/btn_background"android:text="@string/btn_save"android:textColor="@color/white"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toEndOf="@+id/tip_title"></android.widget.Button></androidx.constraintlayout.widget.ConstraintLayout><com.google.android.material.internal.FlowLayoutandroid:id="@+id/flowLayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="16dp"android:orientation="horizontal"app:lineSpacing="@dimen/margin_80"android:layout_marginTop="@dimen/margin_100"app:layout_constraintTop_toBottomOf="@+id/tip"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"></com.google.android.material.internal.FlowLayout><androidx.constraintlayout.widget.ConstraintLayoutandroid:id="@+id/selector"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="@dimen/margin_100"app:layout_constraintTop_toBottomOf="@id/flowLayout"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"><android.widget.Buttonandroid:id="@+id/btn_random"android:layout_width="100dp"android:layout_height="80dp"android:textColor="@color/white"android:background="@drawable/btn_background"android:text="@string/btn_choose"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"></android.widget.Button><android.widget.Buttonandroid:id="@+id/btn_clear"android:layout_width="100dp"android:layout_height="80dp"android:textColor="@color/white"android:background="@drawable/btn_background"android:text="@string/btn_clear"android:layout_marginStart="60dp"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toEndOf="@+id/btn_random"></android.widget.Button></androidx.constraintlayout.widget.ConstraintLayout><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="@dimen/margin_400"app:layout_constraintTop_toBottomOf="@+id/selector"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"android:id="@+id/sel_show"><TextViewandroid:id="@+id/sel_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/sel_ans"android:visibility="gone"android:textColor="@color/black"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"></TextView><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/sel_ans"android:visibility="gone"android:layout_marginStart="@dimen/margin_400"android:background="@drawable/btn_background"app:layout_constraintStart_toEndOf="@+id/sel_text"app:layout_constraintTop_toTopOf="parent"></TextView></androidx.constraintlayout.widget.ConstraintLayout></androidx.constraintlayout.widget.ConstraintLayout>
2.3 主要代码
package com.example.javatestwithleetcode.ui;import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;import com.example.javatestwithleetcode.R;
import com.example.javatestwithleetcode.utils.StringUtils;
import com.example.javatestwithleetcode.utils.ToastUtils;
import com.google.android.material.internal.FlowLayout;
import java.util.ArrayList;
import java.util.Random;public class MainActivity extends AppCompatActivity {private FlowLayout flowLayout;private ArrayList<String> dataList;private Button button;private Button save_btn;private EditText editText;private Button clear_btn;private TextView sel_ans;private TextView sel_title;@SuppressLint("ResourceAsColor")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initDatas();//也可以用implements然后switch-case 也可以拆开放三个方法里button.setOnClickListener(view -> {Random random=new Random();int i= random.nextInt(dataList.size());
//            ToastUtils.showToast(dataList.get(i));sel_ans.setText(dataList.get(i));sel_ans.setVisibility(View.VISIBLE);sel_title.setVisibility(View.VISIBLE);});save_btn.setOnClickListener(v->{editText=(EditText) findViewById(R.id.tip_title);if(StringUtils.isNotEmpty(editText.getText().toString()) ){dataList.add(editText.getText().toString());editText.setText("");// 将数据添加到FlowLayoutaddDataToFlowLayout(dataList);}else{ToastUtils.showToast("请输入后再保存");}});clear_btn.setOnClickListener(v->{dataList.clear();flowLayout.removeAllViews();sel_ans.setVisibility(View.GONE);sel_title.setVisibility(View.GONE);});}private void addDataToFlowLayout(ArrayList<String> dataList) {if(dataList.isEmpty()){return;}flowLayout.removeAllViews();LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);layoutParams.setMargins(0, 0, getResources().getDimensionPixelSize(R.dimen.margin_100), 0);LayoutInflater inflater = LayoutInflater.from(this);for (String data : dataList) {View view = inflater.inflate(R.layout.item_flowlayout, flowLayout, false);TextView textView = view.findViewById(R.id.textView);textView.setText(data);textView.setPadding(getResources().getDimensionPixelSize(R.dimen.margin_40), getResources().getDimensionPixelSize(R.dimen.margin_40), getResources().getDimensionPixelSize(R.dimen.margin_40), getResources().getDimensionPixelSize(R.dimen.margin_40));textView.setSingleLine();textView.setTextColor(getResources().getColor(R.color.white));textView.setLayoutParams(layoutParams);flowLayout.addView(view,layoutParams);}}private void initDatas(){setContentView(R.layout.activity_main);dataList = new ArrayList<>();flowLayout = findViewById(R.id.flowLayout);sel_ans=(TextView) findViewById(R.id.sel_ans);sel_title=(TextView) findViewById(R.id.sel_text);sel_ans.setPadding(getResources().getDimensionPixelSize(R.dimen.margin_80),getResources().getDimensionPixelSize(R.dimen.margin_80),getResources().getDimensionPixelSize(R.dimen.margin_80),getResources().getDimensionPixelSize(R.dimen.margin_80));button =(Button) findViewById(R.id.btn_random);save_btn=(Button) findViewById(R.id.btn_save);clear_btn=(Button) findViewById(R.id.btn_clear);}
}

资源文件和mainfest还有工具类不作详细解释。

三、项目截图

图片放不出来。。。

四、重点

添加flowlayout,以及设置可见性,加强了对android studio>android studio项目中的textview edittext button的更深的认知,点击触发条件等,以及对constraintlayout,linerlayout和flowlayout也有了更深刻的认知


http://www.ppmy.cn/devtools/127590.html

相关文章

10.19 RHCSA 作业

关闭防火墙&#xff0c;挂载&#xff0c;安装nginx用nmtui命令配置多ip ip a检测配置是否正确 vim /etc/nginx/conf.d/test ip.conf 配置nginx服务信息 在网站中添加内容 浏览器上测试网页内容

支持国密算法的数字证书-国密SSL证书详解

在互联网中&#xff0c;数字证书作为标志通讯各方身份信息的数字认证而存在&#xff0c;常见的数字证书大都采用国际算法&#xff0c;比如RSA算法、ECC算法、SHA2算法等。随着我国加强网络安全技术自主可控的大趋势&#xff0c;也出现了支持国密算法的数字证书-国密SSL证书。那…

Java的建造师:类和对象是什么?

在Java的世界里&#xff0c;类和对象就像建筑蓝图和实际的房子。类是用来设计和描述某种事物的模板&#xff0c;而对象就是根据这个模板建造出来的实际事物。咱可以把类看成是一张说明书&#xff0c;而对象是根据说明书创建出来的“产品”。 什么是类&#xff1f; 类&#xff…

Spark 基础概念

Apache Spark 是一个快速、分布式的计算系统&#xff0c;用于大规模数据处理和分析。它提供了一个高级 API&#xff0c;用于编写并行处理的任务&#xff0c;可以在大规模集群上运行。 Spark 的基本概念包括以下几个方面&#xff1a; Resilient Distributed Datasets (RDDs)&a…

RISC计算机 CISC计算机

复杂指令集系统与精简指令集系 在计算机系统结构发展的过程中&#xff0c; 指令系统的优化设计有两个截然相反的方向&#xff0c; 一个是增强指令的功能&#xff0c; 设置一些功能复杂的指令&#xff0c; 把一些原来由软件实现的、 常用的功能改用硬件的指令系统来实现&#xf…

Vue main.js引入全局changePassword组件原型实例,修改密码组件原型实例

main.js引入全局changePassword组件原型实例 changePassword 实例1. changePassword.vue2. proto.js 引入及使用main.jslogin.js main.js引入全局组件原型实例 changePassword 实例 1. changePassword.vue <template><el-dialog title"修改密码" :visibl…

​​【项目建设PPT模板】中台建设,中台设计,数字中台整体建设方案(PPT)

工业互联网数字中台解决方案旨在为企业提供全面、高效的数据驱动能力。该方案主要包括以下几个核心部分&#xff1a; 数据中台&#xff1a;作为核心&#xff0c;数据中台负责汇聚、整合、提纯和加工各类工业数据&#xff0c;实现数据资产的标准化、模型化和模块化。通过提供API…

OBOO鸥柏丨 21.5 寸自助服务终端机智能科技查询一体新势力

OBOO鸥柏数字化 21.5 寸自助服务终端机以其卓越的表现、丰富的功能和可靠的品质&#xff0c;主要应用于政务办事大厅&#xff0c;自助查档&#xff0c;自助打印&#xff0c;自助办理业务一体机触摸终端&#xff0c;智慧城市营业厅均在当前市场中已经展现出强大的优势。科技触控…