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

一、背景

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

二、项目代码

2.1流式布局
XML 复制代码
<?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">

    <TextView
        android: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 复制代码
<?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.ConstraintLayout
        android: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"
        >

        <EditText
            android: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.Button
            android: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.FlowLayout
        android: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.ConstraintLayout
        android: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.Button
            android: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.Button
            android: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.ConstraintLayout
        android: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">

        <TextView
            android: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>

        <TextView
            android: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 主要代码
java 复制代码
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")
    @Override
    protected 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("");
                // 将数据添加到FlowLayout
                addDataToFlowLayout(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项目中的textview edittext button的更深的认知,点击触发条件等,以及对constraintlayout,linerlayout和flowlayout也有了更深刻的认知

相关推荐
千里马学框架5 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台5 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone5 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc5 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo5 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077005 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼5 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone5 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen5 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone5 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui