多种方式实现Android页面布局的切换

本文详细介绍了使用按钮、按键和触摸三种方式实现页面切换的技术细节,包括代码实现、逻辑解析和实际应用。从按钮切换的简单实现,到按键和触摸切换的更灵活方法,为开发者提供了全面的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多种方式实现页面切换

今天老师留的作业如题,要求用三种方式实现:按钮切换,按键切换和触摸切换。

先说我做的第一种方式逻辑:

先上代码:

OneActivity.java文件代码:

package cn.class3g;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class OneActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button nextButton = (Button)findViewById(R.id.next);

nextButton.setOnClickListener(new OnClickListener() {

@Override

publicvoid onClick(View v) {

setContentView(R.layout.two);

ButtonupButton=(Button)findViewById(R.id.up);

upButton.setOnClickListener(newOnClickListener() {

@Override

publicvoid onClick(View v) {

setContentView(R.layout.main);

ButtonnextButton = (Button)findViewById(R.id.next);

}

});

}

});

}

}

解释:这是我最初写的代码,布局文件写了两个:main.xml和two.xml,分别显示两个页面,分别有一个<TextView>和<Button>元素,具体代码如下:

Main.xml代码:

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="这是第一页"

/>

<Button

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/next"

android:text="下一页"/>

</LinearLayout>

Two.xml代码:

<?xmlversion="1.0" encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="这是第二页"

/>

<Button

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/up"

android:text="上一页"

/>

</LinearLayout>

两个xml文件写完后就是写逻辑了,java代码如开头写的那样,我是这样想的:

默认的onCreate方法初始化后,通过setContentView调用布局文件main。Xml这就是默认的布局,然后声明了一个Button组件命名为nextButton,调用setOnClickListener监听器实现对按钮的监听,在监听器中new了一个点击监听器onclickListener,在监听器中实现了一个名为onClick的方法,在这里我写了一个跳转页面的setContentView方法,通过点击Button按钮实现跳转到two.xml布局页面上,这样就打开了two.xml页面;在这个页面上写了另一个Button按钮命名为:upButton用来返回上页面,就这样通过嵌套就实现了通过点击按钮实现页面切换的效果。

但这不是我想要的效果,我要的效果是无论点击哪个按钮都会出现不同的样式页面,所以我通过对按钮进行判断来实现效果。首先想到的是用if语句进行判断点击的是哪个按钮,然后进行不同的操作。我想这样好点吧,但事实上不需要那么复杂去判断键值就可以实现:

packagecn.class3g;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.widget.Button;

public classActivityTest extends Activity {

/** Called when the activity is firstcreated. */

@Override

public void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button nextButton =(Button)findViewById(R.id.next);

nextLayout();//显示下一个页面

}

public void nextLayout(){

setContentView(R.layout.two);

ButtonupButton=(Button)findViewById(R.id.up);

upButton.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

upLayout();

}

});

}

public void upLayout(){

setContentView(R.layout.main);

ButtonnextButton = (Button)findViewById(R.id.next);

nextButton.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

nextLayout();//显示下一个桌面

}

});

}

}

然后是通过按键实现页面切换,通过老师上午的实例可以知道,在调用onClickDown或onClickUp的方法中调用页面布局文件就可以实现:setContentView(R.layout.main);,在OnClickDown和onClickUp中分别添加两个页面的布局文件,再添加相反的方法,实现返回即可,代码如下:

public boolean onKeyDown(int keyCode,KeyEvent event) {

this.setContentView(R.layout.main);

returnsuper.onKeyDown(keyCode, event);

}

public boolean onKeyUp(int keyCode,KeyEvent event){

//showInfo("keyUp"+keyCode);

this.setContentView(R.layout.second);

return super.onKeyUp(keyCode,event);

}

触摸实现换页

public booleanonTouchEvent(MotionEvent event){

//showInfo("ontouch:x=" +event.getX() + " y="+event.getY());

flag = !flag;

if(flag){

this.setContentView(R.layout.main);

}else{

this.setContentView(R.layout.second);

returnsuper.onTouchEvent(event);

}

总结:

调用布局文件:setContentView(R.layout.main);

获取组件ID:ButtonnextButton = (Button)findViewById(R.id.next);

做题的过程中重命名了一次java文件,导致无法调试,原因是:忘记更改AndroidManifest.xml文件中的<activity>下的<android:name>属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值