Android --- 交换两个布局

准备布局

exchange_out_layout

exchange_in_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:layout_marginTop="20dp"tools:context=".fragment.addaccount.AddExchangeFragment"><LinearLayoutandroid:id="@+id/exchange_out_layout"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center_vertical"android:background="@drawable/selec_tab"android:layout_marginRight="10dp"android:layout_marginLeft="10dp"android:paddingLeft="10dp"android:paddingRight="10dp"android:orientation="horizontal"><TextViewandroid:id="@+id/change_out_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="2"android:text="请选择转出账户" /><TextViewandroid:id="@+id/change_out_money"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:text="¥10.00" /><TextViewandroid:id="@+id/change_out_all"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="4dp"android:background="@drawable/add_tab_background"android:text="全部转出" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/exchange_icon"android:layout_width="20dp"android:layout_height="20dp"android:src="@drawable/exchange_down"/></LinearLayout><LinearLayoutandroid:id="@+id/exchange_in_layout"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="@drawable/selec_tab"android:gravity="center_vertical"android:orientation="horizontal"android:paddingLeft="10dp"android:paddingRight="10dp"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="2"android:text="请选择转入账户" /><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:text="¥10.00" /><TextViewandroid:id="@+id/textView6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/add_tab_background"android:padding="2dp"android:text="全部转出" /></LinearLayout>
</LinearLayout>

设计点击方法

为图片设计一个点击方法

 exchange_icon = getView().findViewById(R.id.exchange_icon);exchange_icon.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 交换逻辑}});

交换逻辑:

1.获取父组件

parentLayout = (ViewGroup) linearLayout_out.getParent(); // 得到父容器

2.找到在父组件中,这两个子布局的位序

获取布局位序 --- int index1 = parentLayout.indexOfChild(linearLayout_out);

在Android中,ViewGroup(比如LinearLayout、RelativeLayout等)中的子View的顺序是由它们在ViewGroup中的索引(index)决定的。索引表示子View在ViewGroup中的位置,第一个子View的索引为0,依次递增。

在上述代码中,通过调用parentLayout.indexOfChild(view)方法可以获取指定子View在其父ViewGroup中的索引位置。这样做是为了根据不同的索引位置来调整子View的顺序,实现布局的交换或调整。 

3.在父组件中移除这两个子布局

删除布局 --- parentLayout.removeViewInLayout(linearLayout_in);

4. 再将这两个子布局添加到对方的位置上,通过比较两个索引的大小来确定需要交换的两个布局的顺序。

  • 如果index1 < index2,说明布局1在布局2之前,此时应先将布局1添加到parentLayout中,然后再将布局2添加到parentLayout中;
  • 如果index1 >= index2,说明布局1在布局2之后或者二者在同一个位置,此时应先将布局2添加到parentLayout中,然后再将布局1添加到parentLayout中。
  • 添加布局 --- parentLayout.addView(linearLayout_out, index2);
  • 刷新布局 --- parentLayout.requestLayout(); 
 exchange_icon.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (parentLayout != null && linearLayout_in != null && linearLayout_out != null) {int index1 = parentLayout.indexOfChild(linearLayout_out);int index2 = parentLayout.indexOfChild(linearLayout_in);parentLayout.removeViewInLayout(linearLayout_out);parentLayout.removeViewInLayout(linearLayout_in);if(index1 < index2) {parentLayout.addView(linearLayout_in, index1);parentLayout.addView(linearLayout_out, index2);} else {parentLayout.addView(linearLayout_out, index2);parentLayout.addView(linearLayout_in, index1);}parentLayout.requestLayout();}}});

效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费,Python蓝桥杯等级考试真题--第13级(含答案解析和代码)

Python蓝桥杯等级考试真题–第13级 一、 选择题 答案&#xff1a;C 解析&#xff1a;正向下标由0开始&#xff0c;下标3代表第四个元素&#xff0c;故答案为C。 答案&#xff1a;A 解析&#xff1a;range&#xff08;0,4&#xff09;的取前不取后&#xff0c;元组的符号是小括…

【CGAL】Region_Growing 检测平面并保存

目录 说明一、算法原理二、代码展示三、结果展示 说明 本篇博客主要介绍CGAL库中使用Region_Growing算法检测平面的算法原理、代码以及最后展示结果。其中&#xff0c;代码部分在CGAL官方库中提供了例子。我在其中做了一些修改&#xff0c;使其可以读取PLY类型的点云文件&…

【搭建大语言模型】使用LocalGPT搭建本地大语言模型服务并实现远程访问进行交互

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问&#xff0c;由于localGPT只能通过本地局域网IP地址端口号的形式访问&#xff0c;实现远程访问…

设计模式15——享元模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 享元模式&#xff08;Flyweigh…

Linux信号:信号的概念及意义

目录 一、什么是信号 kill-l查看信号 二、信号的产生 2.1系统调用 kill raise abort 2.2软件条件 13)SIGPIPE pipe信号 14&#xff09;SIGAKARM alarm信号 2.2硬件中断 2.3异常 8)SIGFPE 除0异常 11)SIGSEGV 野指针 2.4信号处理的常见方式 三、Core Dump和term…

一文详解SaaS增长模式:PLG、MLG、SLG哪种更适合你?

在SaaS&#xff08;软件即服务&#xff09;的领域中&#xff0c;增长策略的选择对于企业的成功至关重要。其中&#xff0c;PLG&#xff08;产品驱动增长&#xff09;、MLG&#xff08;市场驱动增长&#xff09;和SLG&#xff08;销售驱动增长&#xff09;是三种常见的策略&…

Centos 7 安装刻录至服务器

前言 在日常测试中&#xff0c;会遇到很多安装的场景&#xff0c;今天给大家讲一下centos 7 的安装&#xff0c;希望对大家有所帮助。 一.下载镜像 地址如下&#xff1a; centos官方镜像下载地址https://www.centos.org/download/ 按照需求依次点击下载 二.镜像刻录 镜像刻…

强悍!轻量级 Viedo Download 项目!!【送源码】

今天给大家分享一个非常轻量实用的命令行视频下载项目&#xff1a;Lux。 项目简介 Lux是一款基于Golang编写的快速、简单的视频下载库和命令行工具&#xff0c;支持众多个流行的视频网站&#xff0c;包括 YouTube、Bilibili、优酷、爱奇艺、腾讯视频、抖音快手等。 界面简洁易…

重生之 SpringBoot3 入门保姆级学习(07、整合 Redis 案例)

重生之 SpringBoot3 入门保姆级学习&#xff08;07、整合 Redis 案例&#xff09; 导入 Maven 依赖并刷新 Maven <dependencies><!--springboot3 Web 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring…

高效至臻,Media Encoder 2024 for Mac——您的专业媒体处理首选

Media Encoder 2024 for Mac是一款专为Mac用户打造的专业视频和音频编码工具&#xff0c;凭借其卓越的编码能力和智能编辑功能&#xff0c;为用户提供了前所未有的媒体处理体验。无论是高清、4K还是8K的视频文件&#xff0c;Media Encoder 2024都能轻松驾驭&#xff0c;确保在压…

学习javascript的函数

1.什么是函数&#xff1f; 可以重复被使用的代码块 作用&#xff1a;函数可以把具有相同或者相似逻辑的代码“包裹起来”&#xff0c;有利于代码的复用。 2.函数的基本使用 1.定义函数 利用关键字Function 定义函数&#xff08;声明函数&#xff09; function 函数名(){函…

4、xss-labs之level4、lecel5

一、level4 1、测试分析 level4跟之前的3一样的思路&#xff0c;闭合value的值&#xff0c;但是通过双引号闭合&#xff0c;然后使用onclick的属性弹窗绕过 输入3的payload&#xff1a; 2、所以构造payload payload&#xff1a;"οnclickalert(1)// 二、level5 1、测…

uniapp高校二手书交易商城回收系统 微信小程序python+java+node.js+php

每年因为有大量的学生在接受教育&#xff0c;每到大学毕业季的时候&#xff0c;所使用的大量书籍对他们自己来说&#xff0c;很多是没有用&#xff0c;同时由于书籍多和不方便携带&#xff0c;导致很多大学生在毕业时将教材直接丢弃是在校大学生处理已用教材的一种主要方式。然…

数据结构-二叉树系统性学习(四万字精讲拿捏)

前言 这里我会从二叉树的概念开始讲解&#xff0c;其次涉及到概念结构&#xff0c;以及堆的实现和堆排序。 目的是&#xff0c;堆比二叉树简单&#xff0c;同时堆本质上是二叉树的其中一种情况&#xff0c;堆属于二叉树顺序结构的实现 最后完善二叉树的讲解&#xff0c;也就是…

Java与Gradle 的版本兼容性矩阵验证

1.下面这个表格显示了java和gradle的版本兼容性情况 2.根据上面这份表格理解&#xff0c;是不是java17就需要gradle 7.3之后来支持。用android studio 来试验一下: jdk选择: build成功: 说明JDK17并不是一定需要Gradle 7.3之后版本 3.使用JDK1.8、JDK11验证一下Grade 7.2是否可…

四款开源电子表格组件,轻松集成到你的项目

hello&#xff0c;大家好&#xff0c;我是徐小夕。之前和大家分享了很多可视化&#xff0c;零代码和前端工程化的最佳实践&#xff0c;最近在研究在线电子表格的技术实现&#xff0c;发现了几个优质的开源电子表格项目&#xff0c;这里和大家一起分享一下。 同时我也把其中一款…

太速科技-基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡)

基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡) 1、板卡概述   板卡采用xilinx Spartan6系列芯片&#xff0c;支持 PCI Express Base Specification 1.1 x1。内含丰富的逻辑资源和存储单元&#xff0c;板卡FPGA外接双片32M*16bit DDR2缓存器&#xff0c;支持乒乓操作。…

超好用的AI插件—Fitten code【IDEA 和 VScode 安装】

Fitten code安装 Fitten code是什么IDEA从磁盘安装Fitten codeVScode安装Fitten code Fitten code是什么 这是Fitten code官网&#xff0c;功能还是很多的&#xff0c;包括代码自动补全、自动添加注释、智能bug查找等等&#xff1a; Fitten Code是由非十大模型驱动的AI编程助手…

视频号小店应该怎么操作呢?不了解的小伙伴快来看!

大家好&#xff0c;我是电商小V 普通人想利用视频号小店赚钱&#xff0c;奈何自己不会直播&#xff0c;不会拍视频&#xff0c;那么普通人应该怎么在视频号中赚钱呢&#xff1f;今天咱们就来详细的说一下&#xff0c; 其实不直播&#xff0c;不拍视频也是可以在视频号上面卖货赚…

Microsoft Remote Desktop for Mac:你的跨平台远程连接利器

Microsoft Remote Desktop for Mac是一款专为Mac用户设计的远程桌面连接工具&#xff0c;它凭借卓越的性能和多项实用功能&#xff0c;成为了跨平台远程协作的首选工具。 多平台支持&#xff1a;Microsoft Remote Desktop for Mac不仅支持与其他Mac设备进行连接&#xff0c;还…