Android 按下按钮时如何显示另一种布局?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11717666/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 08:34:32  来源:igfitidea点击:

how can i show another layout when button pressed?

android

提问by Sincere Friend

i have a following code which flip the page but is show same layout and same activity i want to change this code when button press its show another screen with diffrent layout how it is possible? source code given below

我有以下代码可以翻转页面但显示相同的布局和相同的活动我想在按下按钮时更改此代码显示另一个具有不同布局的屏幕怎么可能?下面给出的源代码

 package com.samir;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AccelerateInterpolator;
import android.widget.Button;
import android.widget.RelativeLayout;

import com.samir.anim.DisplayNextView;
import com.samir.anim.Rotate3dAnimation;

 public class MainActivity extends Activity implements OnClickListener {

Button btnRotateit, btnRotateBack;
RelativeLayout mContainer, relChild1, relChild2;
private boolean isFirstView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mContainer = (RelativeLayout) findViewById(R.id.mainlayout);
    relChild1 = (RelativeLayout) findViewById(R.id.child1);
    relChild2 = (RelativeLayout) findViewById(R.id.child2);

    btnRotateit = (Button) findViewById(R.id.btnrotate);
    btnRotateit.setOnClickListener(this);
    btnRotateBack = (Button) findViewById(R.id.btnback);
    btnRotateBack.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()) {
    case R.id.btnrotate:
        isFirstView = true;
        applyRotation(0, 90);
        break;
    case R.id.btnback:
        isFirstView = false;
        applyRotation(0, -90);
        break;
    default:
        break;
    }

}

private void applyRotation(float start, float end) {
    final float centerX = mContainer.getWidth() / 2.0f;
    final float centerY = mContainer.getHeight() / 2.0f;

    // The animation listener is used to trigger the next animation
    final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
            centerX, centerY, 310.0f, true);
    rotation.setDuration(1200);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    rotation.setAnimationListener(new DisplayNextView(isFirstView,
            mContainer, relChild1, relChild2));

    mContainer.startAnimation(rotation);

}
     }



  package com.samir.anim;

  import android.view.View;
 import android.view.animation.Animation;
 import android.view.animation.Animation.AnimationListener;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.RelativeLayout;

 public class DisplayNextView implements AnimationListener {
RelativeLayout mContainer, relChild1, relChild2;
boolean isFirstView;

public DisplayNextView(boolean isFirstView, RelativeLayout mContainer,
        RelativeLayout relChild1, RelativeLayout relChild2) {
    this.mContainer = mContainer;
    this.relChild1 = relChild1;
    this.relChild2 = relChild2;

    this.isFirstView = isFirstView;
}

@Override
public void onAnimationEnd(Animation animation) {
    mContainer.post(new SwapViews());
}

@Override
public void onAnimationRepeat(Animation animation) {
}

@Override
public void onAnimationStart(Animation animation) {
}

public class SwapViews implements Runnable {
    @Override
    public void run() {

        final float centerX = mContainer.getWidth() / 2.0f;
        final float centerY = mContainer.getHeight() / 2.0f;
        Rotate3dAnimation rotation;

        if (isFirstView) {
            rotation = new Rotate3dAnimation(-90, 0, centerX, centerY,
                    310.0f, false);
        } else {
            rotation = new Rotate3dAnimation(90, 0, centerX, centerY,
                    310.0f, false);
        }
        rotation.setDuration(1500);
        rotation.setFillAfter(true);
        rotation.setInterpolator(new DecelerateInterpolator());

        mContainer.startAnimation(rotation);

        if (isFirstView) {
            relChild1.setVisibility(View.GONE);
            relChild2.setVisibility(View.VISIBLE);
        } else {
            relChild2.setVisibility(View.GONE);
            relChild1.setVisibility(View.VISIBLE);

        }
    }

}

   }




    package com.samir.anim;

 import android.graphics.Camera;
   import android.graphics.Matrix;
  import android.view.animation.Animation;
import android.view.animation.Transformation;

 public class Rotate3dAnimation extends Animation {
private final float mFromDegrees;
private final float mToDegrees;
private final float mCenterX;
private final float mCenterY;
private final float mDepthZ;
private final boolean mReverse;
private Camera mCamera;

public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX,
        float centerY, float depthZ, boolean reverse) {
    mFromDegrees = fromDegrees;
    mToDegrees = toDegrees;
    mCenterX = centerX;
    mCenterY = centerY;
    mDepthZ = depthZ;
    mReverse = reverse;
}

@Override
public void initialize(int width, int height, int parentWidth,
        int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
    mCamera = new Camera();
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    final float fromDegrees = mFromDegrees;
    float degrees = fromDegrees
            + ((mToDegrees - fromDegrees) * interpolatedTime);

    final float centerX = mCenterX;
    final float centerY = mCenterY;
    final Camera camera = mCamera;

    final Matrix matrix = t.getMatrix();

    camera.save();
    if (mReverse) {
        camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
    } else {
        camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
    }
    camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);
}
        }


       <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#DCDCDC"
android:orientation="vertical" >

 <RelativeLayout
    android:id="@+id/child1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/btnrotate"
        android:layout_width="170dp"
        android:layout_height="40dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/btnrotate"
        android:text="@string/rotateit" />
 </RelativeLayout>

 <RelativeLayout
    android:id="@+id/child2"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:visibility="gone" >

    <Button
        android:id="@+id/btnback"
        android:layout_width="170dp"
        android:layout_height="40dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/btnback"
        android:text="@string/rotateback" />
     </RelativeLayout>

      </RelativeLayout>

回答by Rahul Patel

use the setContentViewon your onclicklistener method Like :

setContentView在您的 onclicklistener 方法上使用 ,例如:

setContentView(R.layout.layout);

EDIT:I think you want when btnRotateitis press then you want to display relChild1and relChild2and again press btnRotateBackthen appear the mContainer, Then Try like:

编辑:我想你想的时候btnRotateit是按那么你想显示relChild1relChild2并再次按下btnRotateBack再出现mContainer,然后再尝试使用:

Add the code on the btnRotateitonclick Method :

btnRotateitonclick 方法上添加代码:

relChild1.setVisibility(View.VISIBLE);
relChild2.setVisibility(View.VISIBLE);
mContainer.setVisibility(View.GONE);

and Add the code on the btnRotateBackonclick Method :

并在btnRotateBackonclick 方法上添加代码:

relChild1.setVisibility(View.GONE);
relChild2.setVisibility(View.GONE);
mContainer.setVisibility(View.VISIBLE);

Try this one and Let me know.

试试这个,让我知道。

回答by Sparky

From your response to vishwa, it looks like you don't want to change the layout of your existing activity so much as to change to another activity. In which chase:

从您对 vishwa 的回应来看,您似乎不想更改现有活动的布局,而是要更改为另一个活动。在哪个追逐中:

Intent intent = new Intent(this, secondpage.class);
startActivity(intent);

回答by MAC

onClick(View v)
{
    setContentView(R.layout.another);
                            ^^^^^^^ 
}

EDIT :For example you have two view, you can set visibility INVISIBLEor GONE

编辑:例如您有两个视图,您可以设置可见性INVISIBLEGONE

and in onClick apply rotation and change visibility of components

并在 onClick 应用旋转并更改组件的可见性

回答by Vishwanath.M

check this code

检查此代码

 private View view = null ;
 Button addbutton = null;
 ViewGroup parent = null;
 LayoutInflater inflater = null;

 inflater= (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
 addbutton = (Button)findViewById(R.id.btnAdd);

 parent = (ViewGroup) findViewById(R.id.mainxml);


 addbutton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        view = inflater.inflate(R.layout.other, null);
        parent.addView(view);
   }
});