-
2011-10-01 23:24:27更多相关内容
-
如何简单的自定义一个自动换行的流式布局(TagLayout)
2021-03-22 14:25:11而lineMaxHeight用来记录当前行的子View中的最大高度,当换行时候传递给heightUse,使下一阶段的子View添加下沉高度。 这段代码是什么意义: measureChildWithMargins(child, widthMeasureSpec, 0, ...批注 2020-02-10 212314.png
先上完整代码:
public class TagLayout extends ViewGroup {
List childrenBounds = new ArrayList<>();
public TagLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
Rect childBound = childrenBounds.get(i);
child.layout(childBound.left, childBound.top, childBound.right, childBound.bottom);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int lineMaxWidth = 0;
int heightUse = 0;
int widthUse = 0;
int lineMaxHeight = 0;
int specMode=MeasureSpec.getMode(widthMeasureSpec);
int specWidth = MeasureSpec.getSize(widthMeasureSpec);
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, heightUse);
if (specMode!=MeasureSpec.UNSPECIFIED&&widthUse + child.getMeasuredWidth() > specWidth) {
// 另起一行
widthUse = 0;
heightUse += lineMaxHeight;
lineMaxHeight=0;
measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, heightUse);
}
Rect childBound;
if (childrenBounds.size() <= i) {
childBound = new Rect();
childrenBounds.add(childBound);
} else {
childBound = childrenBounds.get(i);
}
childBound.set(
widthUse,
heightUse,
widthUse + getMeasuredWidth(),
heightUse + getMeasuredHeight());
widthUse += child.getMeasuredWidth();
lineMaxWidth = Math.max(lineMaxWidth, widthUse);
lineMaxHeight = Math.max(lineMaxHeight, child.getMeasuredHeight());
}
int width = lineMaxWidth;
int height = lineMaxHeight+heightUse;
setMeasuredDimension(width, height);
}
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new MarginLayoutParams(getContext(), attrs);
}
}
## 准备工作
定义一个容器来存储子View的位置信息:
```java
List childrenBounds = new ArrayList<>();
先从onMeasure()阶段开始
定义了四个量:
int widthUse = 0;//使用了多少宽度
int heightUse = 0;//使用了多少高度
int lineMaxWidth = 0; //当前最大宽度
int lineMaxHeight = 0;//当前最大高度
这个布局是个横向排列的过程,我们用一个widthUse来记录当前行横向使用的宽度,则计算下个子View位置时候,只需在此基础上累加即可。
而lineMaxHeight用来记录当前行的子View中的最大高度,当换行时候传递给heightUse,使下一阶段的子View添加下沉高度。
这段代码是什么意义:
measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, heightUse);
这其实是安卓帮我们做了一个自动计算的过程:
LayoutParams layoutParams = child.getLayoutParams();
int specWidthMode = MeasureSpec.getMode(widthMeasureSpec);
int specWidthSize = MeasureSpec.getSize(widthMeasureSpec);
int childWidthMode;
int childWidthSize;
switch (layoutParams.width) {
case LayoutParams.MATCH_PARENT:
switch (specWidthMode) {
case MeasureSpec.EXACTLY:
case MeasureSpec.AT_MOST:
childWidthMode = MeasureSpec.EXACTLY;
childWidthSize = specWidthSize - useWidth;
break;
case MeasureSpec.UNSPECIFIED:
childWidthMode = MeasureSpec.UNSPECIFIED;
childWidthSize = 0;
break;
}
break;
case LayoutParams.WRAP_CONTENT:
break;
}
可以类比为如上的代码,根据开发者传入的参数类型进行数值的自动适配
onLayout()阶段
循环设置布局参数
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
Rect childBound = childrenBounds.get(i);
child.layout(childBound.left, childBound.top, childBound.right, childBound.bottom);
}
-
java 流式FlowLayout布局换行方法
2020-05-03 11:23:42java 流式FlowLayout布局换行方法 怎么简单怎么来 方法一 add(new JLabel(" ")); //添加空白标签来实现换行 空白标签的空格数量由你来决定 方法二 将标签设置为不可视 setVisiable(false) 方法三 这里是引用 .....java 流式FlowLayout布局换行方法
怎么简单怎么来
方法一add(new JLabel(" ")); //添加空白标签来实现换行
空白标签的空格数量由你来决定
方法二
将标签设置为不可视setVisiable(false)
方法三(看了看别人的方法)
JButton c=new JButton(" " +" "); c.setContentAreaFilled(false); c.setBorderPainted(false); c.setEnabled(false);
版权声明:本文为CSDN博主「宁悦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/deramer1/article/details/73135595 -
Java FlowLayout布局的时候换行的问题 | 学步园
2021-02-26 10:07:18空间不够了就在下面那“行“位置开始添加组件 这个布局实现精确布局是不怎么可能了吧 你放个label什么的控件,然后setVisiable(false) FlowLayout是流式布局,就算你已经换行成功,它也会随着窗口的变化而变化。...来源:http://topic.csdn.net/t/20060505/15/4731462.html
参考:http://www.itzcn.com/video-vid-2252-spid-50.html
http://zhidao.baidu.com/question/65633532.html
用GridLayout设置为2行一列就OK啦~~FlowLayout只是单行顺序显示!!
不知道FlowLayout有没有换行功能,帮up。
这个问题也困惑我好久,一起顶,盼高手解答
昨天看了下FlowLayout和GridLayout,里面好像没有换行这个概念.....似乎都是用数学方法计算添加组件的空间,空间不够了就在下面那“行“位置开始添加组件
这个布局实现精确布局是不怎么可能了吧
你放个label什么的控件,然后setVisiable(false)
FlowLayout是流式布局,就算你已经换行成功,它也会随着窗口的变化而变化。也就是说没有必要进行换行。
什么布局比较精确实用呢?
this.setLayout(null);可以在布局中的任何坐标位置画控件。
楼上的意思也就是不使用布局管理器,这样一来,我们把自己的控件用它们自己的方法,比如setBounds之类的,就可以任意布局了。
对了,一般的想做的美观的都采用这样的方法的。
我是二楼的,又发现这个帖子了,我后来用BoxLayout解决了:JPanel pane = new JPanel();BoxLayout lo = new BoxLayout(pane, Y_AXIS)pane.setLayout(lo);然后在pane里直接用add()方法添加,就是竖着排的了。
-
java图形用户界面设计换行
2021-06-19 11:48:25JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密... -
Java Swing组件布局管理器之FlowLayout(流式布局)入门教程
2020-08-28 20:33:36主要介绍了Java Swing组件布局管理器之FlowLayout(流式布局),结合实例形式分析了Swing组件布局管理器FlowLayout流式布局的常用方法及相关使用技巧,需要的朋友可以参考下 -
关于用户界面:Java:JLabels中的换行符?
2021-03-10 01:53:21我正在尝试使用多行文本... 或者,我可以只为JLabel指定最大宽度并知道文本会像div一样自动换行吗?private void addLegend() {JPanel comparisonPanel = getComparisonPanel();//this all displays on one lineJLab... -
自动换行的流式布局
2021-03-04 07:37:321.[代码][Java]代码package com.robert;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;...import java.util.List... -
java – 使用MigLayout自动换行
2021-02-28 06:21:55JDK中包含的java.awt.FlowLayout自动包装所包含的组件: JPanel mainPanel = new JPanel(new FlowLayout()); mainPanel.add(subPanel1); mainPanel.add(subPanel2); mainPanel.add(subPanel3); ... 首选高度已关闭,... -
Android自动换行布局
2021-07-27 11:27:06在网上找了挺久都没找到好用的自动换行布局,于是干脆自己写一个吧,原理其实就是计算布局大小,然后摆放的时候计算子view摆放的时候是否大于父view的最大宽度,超过了就在下面一行摆放就好了,注释就不多写了 ... -
Android可自动换行的布局 -- AutoWrapLineLayout
2021-06-02 16:50:43You can set the style in xml or in java. ####xml Set the autoWrapLineLayout:verticalGap, autoWrapLineLayout:horizontalGap and autoWrapLineLayout:fillMode values. android:id="@+id/auto_wrap_line_... -
Java 有关GUI中JPanel的换行问题
2021-02-25 18:34:43展开全部你没有放出完整代码32313133353236313431303231363533e58685e5...我就给你写一个示例吧参考代码importjava.awt.*;importjavax.swing.*;publicclassTestDemoextendsJFrame{publicTestDemo(){JPaneljp1=newJP... -
Android的换行小部件布局
2021-04-16 01:26:04我实现了与此类似的东西,但使用我认为处理间距和填充的更标准的方法。请让我知道你们的想法,并且...importjava.util.ArrayList;importjava.util.Collections;importjava.util.Iterator;importjava.util.List;impo... -
ReactNative 布局自动换行的实现
2021-03-08 15:06:40核心思想:基于row布局的wrap属性实现自动换行WorkStatusViewStyles = StyleSheet.create({//基于flex-box布局container: {width: width,flexDirection: 'column',flexWrap: 'wrap',backgroundColor: '#dd0ff0',... -
java – JTextArea自动换行调整大小
2021-03-26 13:50:35当我试图设置一个简单的双行文本编辑器时(每行限制字符长度,最多两行),我偶然偶然发现了这个…基本上,给定合适的布局管理器,这个组件可以自己增长 – 它实际上是有道理的,但让我感到惊讶……此外,您可能希望使用... -
关于java:JLabel是否有“自动换行”属性?
2021-04-16 16:36:06现在,我希望Jlabel在到达屏幕末尾时自动将文本换行到下一行,例如"记事本"中的"自动换行"功能。我怎样才能做到这一点?仅供参考,安德鲁斯的回答是最好的。@HovercraftFullOfEels 我只是知道屏幕截图会有所作为! ... -
JAVA代码规范(一)
2021-03-21 09:31:112.源文件每个JAVA源文件都包含一个单一的公共类或接口,且公共类必须是这里的第一个类。3.开头注释根据个人需要,最好列出类名,版本信息,日期,等等。4.包和引入语句第一个非注释行是包语句,其后可以跟引入语句。... -
通过设置最大宽度使jLabel对文本进行换行
2021-02-12 20:23:54而不是将文本换行标签,您还必须将标签放入一个容器中,该容器遵循首选高度并将宽度设置为最大值。例如,可以将标签放在BorderLayout.这里有一个简单但完整的工作程序来说明这一点。您可以根据需要调整框架的大小;标签... -
FlowViewGroup:流式布局,自动换行
2021-04-30 12:30:17流式布局,自动换行 使用方法: 1、依赖配置 在项目最外面的build.gradle文件中,allprojects节点下的repositories中添加: maven { url "https://dl.bintray.com/teadoglibrary/flowViewGroup" } 再在app的build.... -
【Java|Swing】关于JLabel换行
2018-02-17 21:47:09最近在用Swing做Windows的窗口程序,在使用JLabel时发现使用\n没办法换行,于是乎借助百度一下弄懂了JLabel是如何实现换行的。 先可以看一下使用\n的效果 JLabel label=new JLabel("数据版本\nv1.0.0&... -
JAVA图形界面(GUI)之布局管理器
2021-03-17 14:50:31布局管理器就是用来管理读者的界面。摆放的效果直接影响到界面是否美观。布局管理器通过布局管理类来对各种读者组件进行管理。使用布局管理器,不仅可以有序的排列组件,而且当窗体发生变化时,布局管理器很根据新... -
关于换行以及换行属性
2021-01-14 10:45:57看看下一行的宽度够不够,不够的话就进行单词内的断句 word-break:break-all则更粗暴,直接进行单词内的断句 white-space white-space 属性设置如何处理元素内的空白,这个属性声明建立布局过程中如何处理元素中的... -
JAVA swing JLabel JButton标签文本文字内容的换行
2021-03-08 14:23:47//调整此窗口的大小,以适合其子组件的首选大小和布局。 //如果该窗口和/或其所有者还不可显示,则在计算首选 //大小之前都将变得可显示。在计算首选大小之后,将会验证该窗口。 pack(); setVisible(true); } ... -
Java JFrame常用的布局
2017-06-01 18:27:09setLayout(布局对象); 声明布局格式的方式 如: setLayout(new FlowLayout()); 1. FlowLayout布局 FlowLayout布局是JPanel 的默认布局,组建按照加入的先后顺序从左到右排列,一行排满之后就转到下一行继续从... -
Java GUI(图形用户界面)-----GridLayout(网格布局管理器)详解
2022-04-13 11:22:13GridLayout(网格布局管理器) 可以把容器分成n行m列大小相等的网格,每个网格放置一个组件,按照从左往右,从上往下的顺序依次添加,放置在Gird Layout布局管理器的组件将自动占据网格的整个区域。 GridLayout构造... -
Java Swing面板布局之流式布局FlowLayout
2022-01-22 14:43:29FlowLayout应该是Swing布局管理器学习中最简单、最基础的一个。所谓流式,就是内部控件像水流一样,从前到后按顺序水平排列,直到达到容器的宽度时跳转到第二行。既然是水平排列,那么就存在三种基本的对齐方式:... -
Android 实现radiobutton单选换行效果
2021-03-22 17:01:45因为我这个分类是写死的,不是动态获取的,所以我没有用RadioGroup然后动态添加radioButton,因为Radiogroup设置换行以及每行的个数非常麻烦,也没有用类似gridView实现。这个就是写死的RadioButton。xml布局android:...