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

news/2024/10/15 8:58:12/

一、背景

为了强化对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/news/1539358.html

相关文章

技术成神之路:设计模式(二十)装饰模式

介绍 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许在不改变对象自身的情况下&#xff0c;动态地为对象添加额外的职责。这个模式通常用于增强或改变对象的功能。 1.定义 装饰模式通过创建一个装饰类&#xff0c;将功能动态地添加…

深入解析TCP/IP协议:网络通信的基石

1. 引言 TCP/IP 协议是现代计算机网络的核心&#xff0c;它为互联网上的设备提供了通信的基础。在网络通信中&#xff0c;TCP/IP 协议栈是无处不在的&#xff0c;无论是个人设备的浏览器请求&#xff0c;还是大型分布式系统的内部通信&#xff0c;都依赖于它的稳定、高效与可靠…

电子电气架构---软件定义汽车,产业变革

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

理解和解决TCP 网络编程中的粘包与拆包问题

1. 什么是TCP网络编程中的粘包和拆包现象&#xff1f; 在TCP网络编程中&#xff0c;粘包和拆包问题是常见的现象&#xff0c;通常会导致数据传输中的错误。这些现象的发生源于TCP协议的特点。TCP是面向流的协议&#xff0c;它保证数据传输的可靠性&#xff0c;但不会像UDP那样…

java的LinkedList

java的LinkedList 什么是LinkedListLinkedList的模拟实现LinkedList的使用ArrayList和LinkedList的区别 什么是LinkedList LinkedList的官方文档 LinkedList的底层是双向链表结构&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独的结点中&#xf…

迈巴赫S480升级原厂魔毯悬挂功能有哪些作用

迈巴赫 S480 升级魔毯空气悬挂系统的功能介绍如下&#xff1a; 1. 平稳驾驶体验&#xff1a; • 路况适应&#xff1a;通过摄像头和雷达扫描车前方路面状况&#xff0c;提前获取路况信息&#xff0c;然后根据这些信息自动调节空气悬挂的软硬程度。无论是在平坦的高速公路&…

Linux内核 -- 读写同步机制之序列锁 read_seqbegin 作用与用法

read_seqbegin 函数的作用与用法 read_seqbegin 是 Linux 内核中的一个函数&#xff0c;用于在内核实现轻量级的读写同步机制时读取序列锁&#xff08;sequence lock&#xff09;的状态。序列锁是一种适合读多写少的场景的锁机制&#xff0c;允许多个读取者并发读取&#xff0…

kafka脚本工具使用

如何定位kakfa消费端消息异常问题 查看主题查看消费者组查看消费者详情&#xff08;LAG: 消费者与最新消息的滞后程度(数字越大说明消费者处理消息的速度越慢)&#xff09; 进入docker容器&#xff0c;直接运行sh脚本即可 docker exec -it <containerName> /bin/bash或…