android点击按钮切换Layout?

android点击按钮切换Layout?,第1张

屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。

通过查看OPhone API文档可以发现,有个androidwidgetViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。该类有如下几个和动画相关的函数:

setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为androidviewanimationAnimation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。

java代码:

setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。

showNext: 调用该函数来显示FrameLayout里面的下一个View。

showPrevious: 调用该函数来显示FrameLayout里面的上一个View。

复制代码

一般不直接使用ViewAnimator而是使用它的两个子类ViewFlipper和ViewSwitcher。ViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。该类额外提供了如下几个函数:

java代码:

isFlipping: 用来判断View切换是否正在进行

setFilpInterval:设置View之间切换的时间间隔

startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行

stopFlipping: 停止View切换

复制代码

ViewSwitcher 顾名思义Switcher特指在两个View之间切换。可以通过该类指定一个ViewSwitcherViewFactory 工程类来创建这两个View。该类也具有两个子类ImageSwitcher、TextSwitcher分别用于和文本切换。

ViewFlipper示例

ViewFlipper是继承至FrameLayout的,所以它是一个Layout里面可以放置多个View。在示例中定义一个ViewFlipper,里面包含三个ViewGroup作为示例的三个屏幕,每个ViewGroup中包含一个按钮和一张,点击按钮则显示下一个屏幕。代码如下(res\layout\mainxml):

java代码:

<xml version="10" encoding="utf-8">

<LinearLayout

xmlns:android="http://schemasandroidcom/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<ViewFlipper android:id="@+id/details"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:persistentDrawingCache="animation"

android:flipInterval="1000"

android:inAnimation="@anim/push_left_in"

android:outAnimation="@anim/push_left_out"

>

<LinearLayout

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<Button

android:text="Next"

android:id="@+id/Button_next1"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

</Button>

<ImageView

android:id="@+id/image1"

android:src="@drawable/dell1"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

</ImageView>

</LinearLayout>

<LinearLayout

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<Button

android:text="Next"

android:id="@+id/Button_next2"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

</Button>

<ImageView

android:id="@+id/image2"

android:src="@drawable/lg"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

</ImageView>

</LinearLayout>

<LinearLayout

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<Button

android:text="Next"

android:id="@+id/Button_next3"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

</Button>

<ImageView

android:id="@+id/image3"

android:src="@drawable/lenovo"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

</ImageView>

</LinearLayout>

</ViewFlipper>

</LinearLayout>

复制代码

系列之Android 切换多个layout界面(二) 的帖子链接http://wwweoeandroidcom/thread-90754-1-1html

系列之Android 切换多个layout界面(三) 的帖子链接http://wwweoeandroidcom/thread-90759-1-1html

获取内容面板,因为JFrame不能直接添加组件,需要用getContentPane()函数获取内容面板,再在内容面板上进行添加组件。

frameadd(child);子级将被添加到 contentPane。内容窗格始终是非null的。试图将其设置为 null 会导致JFrame抛出异常。默认的内容窗格上会设置有BorderLayout管理器。

扩展资料:

GraphicsEnvironment为Java应用程序提供了特定平台的 GraphicsDevice对象和 Font 对象集合。这些GraphicsDevice可以是各种本机和远端机器的资源,如屏幕、打印机或者是Image Buffer,甚至是Graphics2D绘图方法的目标对象。

而GraphicsDevice就是指特定的图形环境了,如屏幕和打印设备等。这样,我们就可以用GraphicsDevice来 *** 纵屏幕了。GraphicsDevice提供的setFullScreenWindow()方法就是设置全屏幕用的。

-Swing

VStack 会一次性渲染所有视图,无论它们是在屏幕上还是屏幕外。 当您有少量子视图或不希望“懒加载”延迟渲染时,请使用常规 VStack。

alignment:对接方式,左/中/右

spacing:间距

HStack 会一次性渲染所有视图,无论它们是在屏幕上还是屏幕外。 当您有少量子视图或不希望“懒加载”延迟渲染时,请使用常规 HStack。

ZStack 为每个连续的子视图分配比前一个更高的 z 轴值,这意味着后面的子视图出现在前面的子视图的“顶部”。

下面的示例创建一个 100 x 100 点的 ZStack 矩形视图,填充六种颜色之一,将每个连续的子视图偏移 10 点,使它们不会完全重叠:

zIndex:层叠优先级,从大到小1-0

一个灵活的填充空间布局,垂直/水平填充,默认填充满剩余所有空间,也可以指定填充的宽度或高度

minLength:设置填充最小宽度/高度

滚动视图在可滚动内容区域内显示其内容。 当用户执行适合平台的滚动手势时,滚动视图会调整底层内容的可见部分。 ScrollView 可以水平、垂直或同时滚动,但不提供缩放功能。(一般配合HStack、VStack等布局使用)

在以下示例中,ScrollView 允许用户滚动包含 100 个文本视图的 VStack。 列表后的图像显示了右侧滚动视图的临时可见滚动条; 您可以使用 ScrollView 初始值设定项的 showsIndicators 参数禁用它。

Axisset: 设置滚动方向/水平/垂直

showsIndicators:是否显示滚动指示器

一个容器视图,将其内容定义为它自己的大小和坐标空间的函数。可以获取到视图的大小和坐标

通常使用 ViewBuilder 作为子视图生成闭包参数的参数属性,允许这些闭包提供多个子视图。 例如,以下CustomView接受一个通过视图构建器生成一个或多个视图的闭包。(通常用来自定义View、dialog、toast等)

控件显示到屏幕里才会加载(性能会有提升)

控件显示到屏幕里才会加载

//注意,没有考虑/和+-的优先级。

import javaxswing;

import javaawt;

import javaawtevent;

public class Calculator3 extends JFrame implements ActionListener {

private boolean dotExist, operated, equaled; // 帮助运算的布尔变量

private double storedNumber; // 目前的结果

private char lastOperator; // 表示上一运算符

private JTextField operation; // 结果栏

private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符

private JButton[] numbers; // 数字

// 构造者

public Calculator3() {

setTitle("Calculator");

// 初始化变量

dotExist = false; // 表示当前的数是否有小数点

operated = false; // 表示任意运算符是否被按下

equaled = false; // 表示等号是否被按下

storedNumber = 0;

lastOperator = '';

// 初始化窗口变量

operation = new JTextField("0");

operationsetEditable(false);

numbers = new JButton[10];

for (int i = 0; i < 10; i++)

numbers[i] = new JButton("" + i);

dot = new JButton("");

plus = new JButton("+");

minus = new JButton("-");

multi = new JButton("");

div = new JButton("/");

sqrt = new JButton("√");

equal = new JButton("=");

changePN = new JButton("±");

clear = new JButton("AC");

// 将窗口物体放入窗口

GridBagLayout layout = new GridBagLayout();

getContentPane()setLayout(layout);

addComponent(layout, operation, 0, 0, 4, 1);

addComponent(layout, numbers[1], 1, 0, 1, 1);

addComponent(layout, numbers[2], 1, 1, 1, 1);

addComponent(layout, numbers[3], 1, 2, 1, 1);

addComponent(layout, numbers[4], 2, 0, 1, 1);

addComponent(layout, numbers[5], 2, 1, 1, 1);

addComponent(layout, numbers[6], 2, 2, 1, 1);

addComponent(layout, numbers[7], 3, 0, 1, 1);

addComponent(layout, numbers[8], 3, 1, 1, 1);

addComponent(layout, numbers[9], 3, 2, 1, 1);

addComponent(layout, dot, 4, 0, 1, 1);

addComponent(layout, numbers[0], 4, 1, 1, 1);

addComponent(layout, sqrt, 4, 2, 1, 1);

addComponent(layout, plus, 1, 3, 1, 1);

addComponent(layout, minus, 2, 3, 1, 1);

addComponent(layout, multi, 3, 3, 1, 1);

addComponent(layout, div, 4, 3, 1, 1);

addComponent(layout, equal, 5, 0, 2, 1);

addComponent(layout, changePN, 5, 2, 1, 1);

addComponent(layout, clear, 5, 3, 1, 1);

}

// 对按钮进行反应的方法

public void actionPerformed(ActionEvent e) {

JButton btn = (JButton) egetSource();

if (btn == clear) {

operationsetText("0");

dotExist = false;

storedNumber = 0;

lastOperator = '';

} else if (btn == equal) {

operate('=');

equaled = true;

} else if (btn == plus) {

operate('+');

equaled = false;

} else if (btn == minus) {

operate('-');

equaled = false;

} else if (btn == multi) {

operate('');

equaled = false;

} else if (btn == div) {

operate('/');

equaled = false;

} else if (btn == changePN) {

operate('p');

operate('=');

equaled = true;

} else if (btn == sqrt) {

operate('s');

operate('=');

equaled = true;

} else {

if (equaled)

storedNumber = 0;

for (int i = 0; i < 10; i++)

if (btn == numbers[i]) {

if (operationgetText()equals("0"))

operationsetText("" + i);

else if (!operated)

operationsetText(operationgetText() + i);

else {

operationsetText("" + i);

operated = false;

}

}

if (btn == dot && !dotExist) {

operationsetText(operationgetText() + "");

dotExist = true;

}

}

}

// 进行运算的方法

private void operate(char operator) {

double currentNumber = DoublevalueOf(operationgetText())

doubleValue();

if (lastOperator == '')

storedNumber = currentNumber;

else if (lastOperator == '+')

storedNumber += currentNumber;

else if (lastOperator == '-')

storedNumber -= currentNumber;

else if (lastOperator == '')

storedNumber = currentNumber;

else if (lastOperator == '/')

storedNumber /= currentNumber;

else if (lastOperator == 'p')

storedNumber = -1;

else if (lastOperator == 's')

storedNumber = Mathsqrt(currentNumber);

else if (lastOperator == '=' && equaled)

storedNumber = currentNumber;

operationsetText("" + storedNumber);

operated = true;

lastOperator = operator;

}

// 快捷使用GridBagLayout的方法

private void addComponent(GridBagLayout layout, Component component,

int row, int col, int width, int height) {

GridBagConstraints constraints = new GridBagConstraints();

constraintsfill = GridBagConstraintsBOTH;

constraintsinsets = new Insets(10, 2, 10, 2);

constraintsweightx = 100;

constraintsweighty = 100;

constraintsgridx = col;

constraintsgridy = row;

constraintsgridwidth = width;

constraintsgridheight = height;

layoutsetConstraints(component, constraints);

if (component instanceof JButton)

((JButton) component)addActionListener(this);

getContentPane()add(component);

}

// 主方法初始化并显示窗口

public static void main(String[] args) {

Calculator3 calc = new Calculator3();

calcsetSize(290, 400);

calcsetVisible(true);

}

}

1)QLayout::seetDefaultConstraint 0:主窗口最小值被设置为minimumSize(),即layout管理所需的最小空间尺寸,除非空间widget已经有最小的minimumSize尺寸。

2)QLayout::SetFixedSize 3,主窗口的大小被设定为sizeHint()刚好适配好的大小,并不能再被重新设定大小。

3)QLayout::SetMinimumSize 2,设定主窗口minimumSize为minimumSize()定义的,其不能再小

4)QLayout::SetMaxmumSize 4,设定主窗口的最大尺寸maxmumSize到maxmumSize()函数确定的尺寸,其不能大于这个尺寸。

5)QLayout::SetMinAndMaxSize 5,设定主窗口的大小尺寸分别为minimumSize和maxmunSize

6)QLayout::setNoConstraint 1,主窗口不设定尺寸策略,保持用户设定的已有属性

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存